Mantıksal seçenek ayrılmış bir anahtar kelime olduğunda bir şeyi nasıl adlandırırsınız? [kapalı]


64

Bazen, bir şeyin en mantıklı adı (örneğin bir değişken), tercih edilen dilde veya ortamda ayrılmış bir anahtar kelimedir. Eşit derecede uygun eşanlamlı olmadığında, biri nasıl adlandırılır?

Bu problem için en iyi pratik sezgisel tarama olduğunu düşünüyorum. Bunlar, programlama dilleri ve ortamlarının yaratıcıları veya yöneticileri tarafından sağlanabilir. Örneğin, python.org (veya Guido van Rossum), Python'da bununla nasıl başa çıkılacağını söylerse, bu benim kitabımda iyi bir rehber olacaktır. C # ile nasıl başa çıkılacağına dair bir MSDN bağlantısı da iyi olurdu.
Alternatif olarak, yazılım mühendisliği alanındaki ana etkenler tarafından sağlanan kurallar da değerli olmalıdır. Belki Google / Alfabe bize bununla nasıl başa çıkacağımızı öğreten hoş bir stil rehberine sahiptir

İşte sadece bir örnek: C # dilinde, "varsayılan" ayrılmış bir anahtar kelimedir. Bir enum kullandığımda, varsayılan değeri "varsayılan" ("anahtar" ifadelerine benzer) olarak adlandırmak isteyebilirim, ancak yapamıyorum.
(C # büyük / küçük harfe duyarlıdır ve enum sabitleri büyük harfle yazılmalıdır, bu nedenle "Varsayılan" burada açık bir seçimdir, ancak şu anki stil rehberimizin tüm enum sabitlerinin küçük harf olacağını belirttiğini varsayalım.)
"Defaultus" kelimesini düşünebiliriz. ", ama bu En Az Şaşkınlık Prensibi'ne uymuyor . Ayrıca "standart" ve "ilk" i düşünmeliyiz, ancak ne yazık ki "varsayılan", bu durumda amacını tam olarak ileten bir kelimedir.


15
"Default_value" gibi bir şey kullanırdım. Anlamı aynı kalır, ancak birkaç karakter daha yazmanız gerekir.
Mael

26
@Darkhogg Kodumda ikisinden birini bulursam hemen değiştirirdim. Yazım hataları veya adlandırma kuralları ihlalleri kabul edilmez.
MetaFight

26
@MetaFight - Java dışında, sınıfı tutan bir değişkeni çağırmak clazzpratikte fiili bir standarttır. Bu temelde bir platformdur adlandırma bir parçası. Başka bir şey yapmak, başkalarının kodunuzu okuduğuna dair beklentilerin ihlali olur, bu nedenle yalnızca kesinlikle gerekliyse yapılmalıdır.
Periata Breatta

6
enum değeri varsayılan olarak kontrast üretken görünmektedir. Varsayılanı tanımlayan alana özgü bir ad olmalıdır. Yine de varsayılanı döndürecek bir yöntem olmalı.
qwerty_so

18
@AndresF. Katılmıyorum. Java tasarımcılarına karşı çıkmayı genellikle çok kolay buluyorum . Yine de onlara karşı tutmuyorum. Vahşi batıda çalışıyorlardı.
MetaFight

Yanıtlar:


63

Bir enum seçeneği için "title" harfini kullanmalısınız Default. C # büyük / küçük harfe duyarlı olduğundan, ayrılmış anahtar kelimeyle çarpışmaz. Net Adlandırma Kuralları bölümüne bakınız .

Tüm genel üyeler .net'te unvanlı olması ve ayrılmış tüm isimler küçük harf olması nedeniyle, yerel değişkenler (parametreler dahil) dışında bununla gerçekten karşılaşmamalısınız. Yerli halklar genellikle isimler veya isimler olarak adlandırılırlardı, bu yüzden en doğal olanın bir anahtar kelimeyle çarpışması oldukça nadirdir. Örneğin. defaultValuegenellikle daha doğal bir isim olurdu default. Yani pratikte bu büyük bir sorun değil.

C # 'da, @ayrılmış anahtar kelimelerden kaçmak için " " önekini kullanabilirsiniz, böylece bunlar tanımlayıcılar (benzeri @default) olarak kullanılabilirler . Ancak bu, yalnızca gerçekten başka bir seçeneğiniz yoksa, yani tanımlayıcı olarak ayrılmış bir anahtar kelimeleri kullanan bir üçüncü taraf kütüphanesiyle etkileşime giriyorsanız kullanılmalıdır.


Elbette diğer dillerin farklı sözdizimleri ve anahtar kelimeleri var ve bu nedenle de bu problemin farklı çözümleri var.

SQL oldukça fazla sayıda anahtar kelimeye sahiptir, ancak sadece tanımlayıcılardan kaçmak çok yaygındır [Table]. Hatta bazıları, bir anahtar kelimeyle çakışıp çarpışmadıklarına bakılmaksızın, tüm tanımlayıcılar için bile bunu yapar. (Sonuçta, gelecekte bir çarpışma anahtar kelimesi tanıtılabilir!)

Powershell (ve diğer birçok komut dosyası dili), tüm değişkenleri $ gibi bir sigil ile öneklendirir; bu, anahtar kelimelerle asla çarpışmayacakları anlamına gelir.

Lisp’in hiç bir şekilde anahtar kelimeleri yoktur, en azından geleneksel anlamda değildir.

Python'un PEP-8'de resmi olarak tanınan bir sözleşmesi var :

Her zaman sınıf yöntemlerine ilk argüman için cls kullanın.

Bir işlev bağımsız değişkeninin adı ayrılmış bir anahtar kelimeyle çakışırsa, genellikle bir kısaltma veya yazım bozulması kullanmak yerine tek bir izleyen alt çizgi eklemek daha iyidir. Böylece class_ clss'den daha iyidir. (Belki de daha iyisi eş anlamlı kullanarak bu tür çatışmalardan kaçınmaktır.)

Brainfuck veya Whitespace gibi bazı diller kelimeleri tanımlamaktan kaçınır ve problemi zarif bir şekilde engeller.

Kısacası, sorunuza dilden bağımsız bir cevap yoktur, çünkü bu, belirli bir dilin sözdizimine ve kurallarına bağlıdır.


2
Bununla birlikte, yalnızca büyük / küçük harf duyarlılığına güvenmemelisiniz. Uygulamada bir sorun olması muhtemel olmasa da, tüm .NET dilleri büyük / küçük harf duyarlı değildir, bu nedenle bir noktada beklenmedik sorunlarla karşılaşabilirsiniz.
Vivelin

6
@Vivelin: Diğer durumlarda sorunlara yol açabileceğinden, sadece durum için farklı olan herkese açık üyeleriniz veya türleriniz olmamalıdır. Ancak, anahtar kelimeler tanımlayıcı olmadığından (ve diğer dillerin başka anahtar kelimeleri olacaktır) önerdiğim şeyle ilgisi yoktur.
JacquesB

@ Sözdizimi mevcut olsa bile, IMHO, birinin farklı anahtar kelimeler içeren yazılı diller ile etkileşime girmesi gereken senaryolar için en iyi şekilde ayrılmıştır. Orada bile, bir dil özelliğine sahip olmanın daha iyi olabileceğini düşünüyorum #define, ancak sağ işlenen her zaman büyük / küçük harf duyarlı bir tanımlayıcı olarak yorumlanır. Bu, birçok tür adlandırma ihtilafının çözülmesine izin verir (büyük küçük harf duyarlı diller için, küçük harf hariç özdeş olan sembollerin içe aktarılması dahil).
supercat,

@Vivelin tüm .NET dilleri büyük / küçük harf duyarlı değildir - VB.NET ve Powershell'i biliyorum; başka var mı
Zev Spitz

@ ZevSpitz OP'yi özellikle C # olarak adlandırdı, bu yüzden Vivelin'in bunu örnek olarak kullandığını düşünüyorum, ancak VB.NET'in büyük / küçük harfe duyarlı olmadığını söylediğiniz için . Tüm diller aynı ayrılmış kelimelere sahip değildir
Shaggy13spe

22

Bir alt çizgi eklerdim (default_)

Artıları:

  • basit
  • açık (neden başka bir alt çizgi eklesin?)
  • tutarlı, istikrarlı
  • kullanımı kolay
  • bildiğim tüm modern dillerde çalışıyor
  • mantıksal seçeneğe en yakın

Neden diğer çözümleri sevmiyorum:

Eşanlamlı sözcük:

  • bulması zor
  • genellikle aynı anlamı değil (nüanslar)

Kelime Ekleme / Hazırlama:

  • tutarsız (defaultValue, defaultItem)
  • artan okunabilirlik olmadan artan ayrıntı

Harfleri değiştirme (sınıf yerine clazz):

  • tutarsız (clazz, klass, klazz)

Bir numara ekleme (varsayılan1):

  • default2 sorusunu gündeme getiriyor

Mektup Ekleme / Hazırlama:

  • açık değil (programcının isim kodlaması için kullanıldığını tahmin etmesi gerekir, başka bir şey için kısayol değil)

Anahtar Kelimeden Çıkma (@default (c #), `default` (scala))

  • sadece bazı dillerde mümkündür
  • nadiren kullanılan özellik, özellikle diğer dillerle uyumluluk için
  • api'nizin kullanıcıları için kullanımını zorlaştırır (nasıl yapacaklarını ve nasıl yapılacağını bilmeleri gerekir)

Ne zaman kullanmayacağım:

  • Mevcut, yaygın olarak kullanılan diğer kongre
  • Ben zaten uygun bir eş anlamlı biliyorum
  • Enum durumunuzda @ JacquesB cevap izlerdim

7
Bu Python'da sıklıkla kullanılan bir çözümdür. En zarif olarak savunmuyorum, ama işe yarıyor.
fralau

1
@ fralau Python ist özellikle kötü - "input" gibi tanımlayıcılardan gerçekten nefret ediyorum
Christian Sauer

Bir çok dilde , ayrılmış bir kelimenin klassolduğu bir değişken classgörülür. Hiç görmedim defawltama aynı fikir. Ben tercih ederim default_(ve muhtemelen class_bunu yaparak herhangi bir kurulu sözleşmeleri aşmak değilse).
nigel222

Anahtar kelimeden kaçma seçeneğini dahil etmediniz.
KodlarInChaos

1
Geçerli, mantıklı argümanlar yaparsınız, ancak alt çizginin neden kullanıldığının açık olduğundan emin değilim. Çalıştıkları dilin tüm anahtar kelimelerini bilen köpüklerle nadiren çalıştım!
Koruyucu bir,

18

"Varsayılan" muhtemelen yararlı bir enum değeri değildir. Kullanıldığı içeriğe bağlı olarak değişebilecek bir davranışı temsil eder.

Diliniz büyük / küçük harf duyarlıysa, o zaman kelime için farklı bir harf kullanın. (Varsayılan vs varsayılan)

Veya daha iyisi, birkaç harf daha yazmak için fazladan çaba gösterin ve buna DefaultValue adını verin.


3
Katılıyorum. "Varsayılan", değerin ne olduğuna dair bir gösterge vermez. enum ErrorHandlingLevel { Default = 0, ... }Vs düşünün enum ErrorHandlingLevel { None = 0, ... }. İkinci örnekte, Nonevarsayılanın olduğu gerçeği , enum değerini 0'a ayarlayarak, xmldoc kullanarak veya açıkça kodla bilinir. Bir nesnenin ErrorHandlingLevelayarlandığı zaman ne anlama geldiğini bilmenin avantajını elde edersiniz None. Bunu, ErrorHandlingLevelvarsayılan olarak ayarlanmış bir nesneyi incelemekle karşılaştırın .
Harrison Paine,

9

Adlandırma kurallarını yerel olarak değiştirmemenizi (veya anlamsız karakterler eklememenizi) (diğer mesajlarda belirtildiği gibi) kesinlikle tavsiye ederim. Eğer niyet belli değilse ve neden bu şekilde adlandırıldığına dair sorular sorabilir. Onsuz çözülebilir.

Her durumda, eş anlamlı anlamdaki bir kelimeyi kullanmak veya ismi daha belirgin (veya hatta ayrıntılı) yapmak mümkün olmalıdır. Bağlamın tekrarını getirse bile daha iyi bir çözüm olabilir.

Örneğin, Modedurumunuzda olduğu gibi varsayılan bir değeri göstermesi gereken bir numaralandırma olduğunu varsayalım . Adlandırma default_mode, tekrarlama nedeniyle en iyi görünmeyebilir, ancak istenen anlamı iletirken belirsizliği önler.


Geçerli bir noktaya değiniyorsunuz, ama hala daha fazla kafa karışıklığı yaratan şeyin ne olduğundan emin değilim: sürekli eklenmiş bir parçaya sahip olmak veya her durum için farklı kelimeler kullanmak. Tabii ki, eski seçeneğe karşı, ilk etapta kullanılacağı durumların (umarım) o kadar nadir olduğuna dair bir durum var ki, tutarlılık mevcut koddan çıkarılamaz.
Koruyucu bir

3

Açık veya net bir şekilde farklı ya da değiştirilmiş kelimeler kullanmanız gerekecektir.
Yani bu genellikle ya demektir

  • tamamen farklı bir kelime
  • önek
  • sonek

Belirlenecek diğer bir faktör, birden fazla kelimenin nasıl birleştirileceği ve seçeneklerin genellikle

  • allonewordnoseparators
  • words_with_underscores-or- dashes ( snake_case )
  • CapitalizationForClarityAndReadability ( CamelCase )

Önerim bir önek veya sonek kullanmak ve örneğin alt çizgiler / kısa çizgiler kullanmaktır.

local_default, my_default, a_default, domain_specific_default
default_local, default_me, default_a, default_domain_specific

local_defaultTüm yerlilerin hizalı olması ve bu nedenle hızlı bir şekilde öne çıkması avantajına sahiptir, ancak benzersiz bir ad almak için her zaman ikinci bölüme okumanız dezavantajıdır. default_localbenzersiz değişken adının hızlı bir şekilde görülmesi, ancak yerlilerin görsel olarak her zaman bu kadar kolay gruplandırılmaması konusundaki avantajına sahiptir.

Domain_specific yaklaşımı için gördüğüm birkaç örnek şöyle: vehicle_modelbunun yerine modelayrılmış bir kelime; room_tableBir SQL tablosu tableiçin ayrılmış bir kelimedir.

Dilleri veya komut dosyalarını kullandığım diğer iki seçenek şunlardır:

  • değişken adlarını çevrelemek ve böylece ayrılmış kelimelerin kullanılmasına izin vermek için tırnak işaretleri veya ipuçları. Buna benzer bir şekilde bazı dillerin bir geri adım gibi özel bir karakterin bir addan kaçmasına izin verebileceğini hayal edebiliyorum.
  • değişken isimlerindeki boşluklar.

Küçük belki de ilginç bir not olarak: Alt çizgi kullanırken ve tireyi kullanırken words_with_underscores-or-dashesiki isimle atıfta bulunduğumu gördüm . İkincisini komik buldum. snake_casekebab-case
VLAZ

2

Açıkçası, bu durumdan kaçınmak için elinizden geleni yapın. 1970'lerin sonlarından beri yazılımlar yazıyorum ve gerçekten, gerçekten ayrılmış bir kelimeyi atlatmak zorunda kaldığım zamanlar, muhtemelen beşte beşin altında, onun altında.

İlk veya son harfi ( reservedd) iki katına çıkarmak veya öncü veya sondaki alt çizgiyi ( reserved_) eklemek gibi yapabileceğiniz birçok şey var . Uygun olan, özellikle lider veya izleyen alt çizgiler için yazdığınız dilin sözleşmelerine büyük ölçüde bağlı olacaktır. Ayrıca, insanlar tarafından yanlış okunabilecek durumlarla da şeyler yapmamaya çalışın (örneğin, Reservedfarklı olduğunda kullanın reserved).

Bir şey seçtikten sonra, kodlama kurallarınıza koyun, insanların bunu bildiğinden ve sürekli kullanıldığından emin olun. Hatırlatıcı yorum eklemek için o kadar ileri gittim ki okuyucular bir yazım hatası olduğunu düşünmüyorlar ve tekrar göreceklerini biliyorlar:

int ccase;  // Name dodges a reserved word

10
Downvoter değil, "ilk ya da son mektubu iki katına çıkar" önerisi
omurgamı titretti.

@WillemvanRumpt Ben de yapmaktan hoşlanmıyorum, ama çok fazla kafa çizmeye neden olan ayrılmış bir kelimeden kaçınmak veya jimnastik yapmak arasında bir seçim yapmak ya da sadece çok az şey isteyen garip görünümlü bir tanımlayıcı kullanmak arasında seçim yapmak .
Blrfl

6
Karar vermek amaçlanmadı, sadece ....
üşütüyor, üşütüyor

1
Bir alt çizgi göndermek, iki katına çıkan bir son harften daha iyidir. (Herhangi bir oy için classs?)
nigel222

1
Kodlama kuralları! Sahip olmak güzel olurdu! İyi bir nokta.
Koruyucu bir

2

C # 'da, @ ile bir tanımlayıcının adını hazırlayabilirsiniz . Bu, derleyiciye adı olası bir anahtar kelime olarak değil bir tanımlayıcı adı olarak davranmasını söyler.

enum @default {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 

3
sadece bir zaten yapılmış (ve çok daha iyi sundu) noktasını tekrarlar bu "cevabını" yukarı oy vereceğini merak edecek üst cevap olarak bir önceki gün
sivrisinek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.