Kısaltmalar | CamelCase [kapalı]


243

CamelCase hakkında bir şüphem var. Farz edin ki bu kısaltmanız var:Unesco = United Nations Educational, Scientific and Cultural Organization.

Yazmalısınız: unitedNationsEducationalScientificAndCulturalOrganization

Ama ya kısaltmayı yazmanız gerekiyorsa? Gibi bir şey:

getUnescoProperties();

Bu şekilde yazmak doğru mu? getUnescoProperties() OR getUNESCOProperties();


2
Bu programcılar üzerinde olmamalı.
Pacerier

5
Snake_case'e dönüştürülen IMO en iyi çözümü ortaya çıkarır. Do you like get_unesco_propertiesveya get_u_n_e_s_c_o_properties?
jchook


Yanıtlar:


195

Microsoft'un yazdığı bazı yönergelercamelCase şunlardır:

Kısaltmalar kullanırken, iki karakterden daha uzun kısaltmalar için Pascal kasası veya deve kasası kullanın. Örneğin, HtmlButtonveya öğesini kullanın htmlButton. Ancak, System.IOyerine iki karakterden oluşan kısaltmaları büyük harfle yazmalısınız System.Io.

Tanımlayıcılarda veya parametre adlarında kısaltmalar kullanmayın. Kısaltmalar kullanmanız gerekiyorsa, kelimenin standart kısaltmasıyla çelişse bile, ikiden fazla karakterden oluşan kısaltmalar için deve durumunu kullanın.

Özetliyor:

  • İki karakter uzunluğunda bir kısaltma veya kısaltma kullandığınızda, hepsini büyük harflerle yazın;

  • Kısaltma iki karakterden uzunsa, ilk karakter için büyük harf kullanın.

Yani, sizin durumunuzda, getUnescoProperties()doğrudur.


11
Sanırım IDbunun yerine kullanmaya başlamalıyım Id(her yerde kullanıyorum / görüyorum)
jasonscript

30
Teknik olarak "ID" bir kısaltma değildir ("tanımlayıcı" veya "tanımlama" nın bir kısaltmasıdır), ancak bu kılavuzun buna nasıl yardım edip etmeyeceğini gerçekten bilmiyorum. : - \
bryant

64
Bunun iyi bir standart olduğunu düşünmüyorum. Normal kısaltmaları, iki harfli kısaltmaları ve normal kelimeleri ayırt etmek aşırı karmaşık ve tutarlı bir adlandırma kuralına sahip olma fikrine aykırı görünüyor.
Sam

40
Ayrıca, Microsoft tarafından belirtilmesi bir şeyi "doğru" yapmaz.
Sam

48
Kendi yönergelerini takip ettiklerini bilmek güzel: XMLHttpRequest()aslen Microsoft'tan geldi.
Makyen

315

Kabul edilen yanıttan Microsoft tavsiyesine ilişkin meşru eleştiriler vardır .

  • Karakter sayısına bağlı olarak kısaltmaların / başlatmaların tutarsız tedavisi:
    • playerIDvs playerIdvs playerIdentifier.
  • İki harfli kısaltmaların, tanımlayıcının başında görünürlerse yine de büyük harfle yazılması gerekip gerekmediği sorusu:
    • USTaxes vs usTaxes
  • Çoklu kısaltmaların ayırt edilmesinde zorluk:
    • yani USIDvs usId(veya parseDBMXMLWikipedia örneğinde).

Bu yüzden bu cevabı kabul edilen cevaba alternatif olarak göndereceğim. Tüm kısaltmalar tutarlı bir şekilde ele alınmalıdır; kısaltmalar diğer kelimeler gibi ele alınmalıdır. Wikipedia alıntısı :

... bazı programcılar kısaltmalara küçük harfmiş gibi davranmayı tercih ediyor ...

Yani: OP'nin sorusu, kabul edilen cevaba katılıyorum; doğru:getUnescoProperties()

Ancak bu örneklerde farklı bir sonuca varacağımı düşünüyorum:

  • US TaxesusTaxes
  • Player IDplayerId

İki harfli kısaltmalara diğer kısaltmalar gibi davranılması gerektiğini düşünüyorsanız, bu cevaba oy verin.

Deve Örneği bir şartname değil, bir sözleşmedir. Bu yüzden sanırım popüler fikir kuralları.

( DÜZENLEME: @Brian David'in dediği gibi oyların bu soruna karar vermesi gerektiği önerinin kaldırılması; Stack Overflow bir "popülerlik yarışması" değildir ve bu soru "görüş tabanlı" olarak kapatılmıştır.)

Birçoğu kısaltmaları başka bir kelime gibi tedavi etmeyi tercih etse de, daha yaygın uygulama kısaltmaların tümüyle büyük harflere konulması olabilir ("iğrençliklere yol açsa bile))

Diğer kaynaklar:

  • Bazı kişilerin kısaltma ve kısaltmalar arasında ayrım yaptığını unutmayın
  • Not Microsoft yönergeleri iki karakterli kısaltmalar ile "iki karakterden uzun kısaltmalar" arasında ayrım yapar
  • Bazı kişilerin kısaltmalardan / kısaltmalardan tamamen kaçınmasını önerdiğini unutmayın
  • Bazı kişilerin CamelCase / PascalCase'den tamamen kaçınmasını önerdiğini unutmayın
  • Bazı insanların "tutarlılık" ı "içsel olarak tutarsız görünen kurallar" olarak ayırt ettiğini unutmayın (yani, üç karakterli kısaltmalardan farklı iki karakterli kısaltmaların işlenmesi); bazı insanlar "tutarlılığı" "aynı kuralı tutarlı bir şekilde uygulamak" olarak tanımlar (kural dahili olarak tutarsız olsa bile)
  • Çerçeve Tasarımı Yönergeleri
  • Microsoft Yönergeleri

26
1) Tutarsızlık yoktur. "Id" bir kısaltmadır , kısaltma değildir. 2) Tanımlayıcının bağlamına, yani sınıf, arabirim, öznitelik, numaralandırma türü, statik alan, parametre, yöntem, özellik veya olaya bağlıdır. Tanımlayıcıya ilişkin kılavuz PascalCase kullanıyorsa, USTaxesve PlayerId; camelCase: usTaxesve playerId. 3) Bu olurdu USIdPascalCase içinde, usIdCamelCase içinde ve parseDbmXmlCamelCase içinde.
Frederik Krautwald

6
Haklısın, bu bir kısaltma. Demek istediğim bu UsTaxes olmalı, UsId. İki harfli "kısaltma veya kısaltma", üç harfli veya diğer "normal kelimeler" den farklı şekilde ele alınmamalıdır. @ Eonil'in cevabından gelen diğer tavsiyeler, kısaltıcılardan tamamen kaçınmaktır. unitedStatesTaxes veya playerIdentifier.
Kızıl Bezelye

3
Ha ha. Karışıklığın çok fazla ortaya çıkacağından şüpheliyim, ancak yönergeler olası karışıklığı önlemek için yönergelerdir. Bilim bağlamında onaylanmış (kötü) bir kısaltma örneği: InIN(item)vs InIn(item)(ipucu: IN inçtir (inç)). Ya da, IDById(id)vs IdById(id), bağlam bilimi (ipucu: İD enfeksiyöz hastalıktan anlamına gelir). "İki karakter uzunluğunda" - hangi bağlamda?
Frederik Krautwald

2
At Microsoft bağlantısını "... Pascal dava veya kısa ad için deve harf kullanın ikiden fazla karakter uzunluğunda .... Ancak, oluşan kısaltmalar yararlanmamız gereken sadece iki karakter ..." Ben çağırır parçası "tutarsız ". Daha iyi karakterizasyon "istisnadır". Ve en azından iki harfli kısaltmaların neden daha karışık olabileceğini rasyonelleştirdiniz. Ama sanırım "CanCan" içeren programlar şanssız; Dans hamlesi mi, yoksa Cercle de l'Aviron de Nantes'in Topluluk Alanı Ağı mı?
Kızıl Bezelye

18
Sermaye Saldırısı: CamelCase'de Kısaltmalar Nasıl Ele Alınır? Yazarken "abomination" terimini doğru bir şekilde çağırır: "[büyük harf kısaltmaları kullanarak] basit durumlarda çalışırken, bir kısaltma diğerini takip ettiğinde abominasyonlara yol açar: HTTPURLConnection, XMLIDREF"
kghastie

21

İlk olarak, ana dili İngilizce olan biri olmadığımı açıklığa kavuşturmak zorundayım , bu yüzden İngilizce dilbilgisi ile ilgili iddiam yanlış olabilir. Bu tür hataları fark ederseniz, lütfen bana bildirin, çok minnettar olacağım.


Kısaltma için en iyi uygulama, kısaltmalardan mümkün olduğunca kaçınmak olacaktır. Her neyse, durum böyle değil çünkü kısaltma UNESCOtam addan daha tanıdık UnitedNationsEducationalScientificAndCulturalOrganization.

O zaman, bence UNESCOdaha mantıklı Unescoçünkü gerçek yaşam formuna çok daha tanıdık geliyor. Kelimenin Unescogerçekte ne anlama geldiğini anlamakta zorlandım .

Başka bir örnek olarak düşünün Arc. Bu, bir çemberin etrafında bir eğri gibi görünür, ancak Rust'ta bu demektir Atomically Reference Counted. Eğer böyle yazılırsa ARC, en azından okuyucular kelimenin bir tür eğri yerine başka bir şeyin kısaltması olduğunu anlayacaklardır.

Modern programlar esas olarak insan okuyucular için yazılmıştır. Daha sonra bu adlandırma kuralları, makine işleme veya analizinden ziyade insan tarafından okunabilirlik için ayarlanmalıdır .

Bu perspektiften, hiçbir şey kazanmazken Unescofazla kullanarak okunabilirliği kaybediyoruz UNESCO.

Ve diğer tüm durumlar için, basit İngilizce kısaltma kurallarına (veya kurallarına) uymak çoğu durumda en iyi okunabilirlik için yeterli olduğunu düşünüyorum .


4
Yukarıdaki örnekler biraz yanıltıcıdır. "Şimdiye kadar gördüğüm en iyi yaklaşım Apple'ın ... Bu kısaltmalara doğru bir isim gibi davranmak anlamına geliyor ... Yani UNESCO daha mantıklı" - Doğru isimleri böyle yazmıyorsunuz.
Mikko Rantanen

@MikkoRantanen Cevabımı güncelledim.
Eonil

7
Vay be bu cevapta pek kabul edemeyeceğim bir cümle bulamadım :-)
Josef Sábl

Tamamen kısaltmaların / kısaltmaların az ya da çok anlamlı olup olmadığı üzerinde çalıştığınız kodun bağlamına bağlıdır. Örneğin, finans alanında çalışıyorum ve endüstride ve aslında tüm dünyada tekdüze olan çok sayıda benzersiz terim var. Bu şirkette çalışacak herkesin ezbere bildiği kısaltmaları kullanmadan zaman kaybediyor ve gereksiz ayrıntılar yaratacaksınız. Mevcut değer için PV, gelecekteki değer için FV, ortalama için ortalama, üs için exp, vb.
Ediger

@ pm100 Söylediğim bu değil mi? UNESCO, doğru isimleri nasıl yazdığınız değildir.
Mikko Rantanen

17

CamelCase'e dönüştürmek için Google'ın (neredeyse) deterministik Camel vaka algoritması da vardır :

İsmin düzyazı formundan başlayarak:

  1. İfadeyi düz ASCII'ye dönüştürün ve kesme işaretlerini kaldırın. Örneğin, "Müller'in algoritması" "Mueller algoritması" haline gelebilir.
  2. Bu sonucu kelimelere, boşluklara ve kalan noktalama işaretlerine (genellikle kısa çizgiler) bölün.
    1. Önerilen: Herhangi bir kelimenin ortak kullanımda zaten geleneksel bir deve görünümü varsa, bunu bileşen parçalarına bölün (ör. "AdWords" "reklam kelimeleri" haline gelir). "İOS" gibi bir kelimenin gerçekten deve durumunda olmadığını unutmayın; herhangi bir sözleşmeyi reddeder, bu nedenle bu öneri geçerli değildir.
  3. Şimdi her şeyi küçük harflerle (kısaltmalar dahil), sonra yalnızca ilk karakterini büyük harflerle yazın:
    1. … Her kelime, üst deve kasası vermek için, veya
    2. … İlk harf hariç her sözcük daha düşük deve kasası verir
  4. Son olarak, tüm kelimeleri tek bir tanımlayıcıda birleştirin.

Orijinal kelimelerin gövdesinin neredeyse tamamen göz ardı edildiğine dikkat edin.

Aşağıdaki örneklerde, "XML HTTP isteği" doğru bir şekilde XmlHttpRequest biçimine dönüştürülür, XMLHTTPRequest yanlıştır.


17

getUnescoProperties() en iyi çözüm olmalı ...

Mümkün olduğunda sadece saf camelCaseolanı takip edin , kısaltmalarınız varsa, mümkünse büyük harflerle bırakın camelCase.

Genellikle OO programlama değişkenleri küçük harf ( lowerCamelCase) ile başlamalı ve sınıf büyük harf ( UpperCamelCase) ile başlamalıdır .

Şüphe duyduğunuzda sadece saf gidin camelCase;)

parseXMLiyi, parseXmlayrıcacamelCase

XMLHTTPRequestolmalı XmlHttpRequestveya xmlHttpRequestdaha sonraki harf kısaltmaları ile gitmek için hiçbir şekilde, bu kesin tüm test durumları için açık değildir.

örneğin HTTPSSLRequest, bu kelimeyi nasıl okursunuz HTTP + SSL, ya da HTTPS + SL(bu bir şey ifade etmiyor ama ...), bu durumda deve davası kuralını takip edip devam edin httpSslRequestya da httpsSlRequestbelki de artık hoş değil, ama kesinlikle daha açık.


2
HTTPSSLÖrneğimi beğendim , SL hiçbir şey ifade etmese de, HTTPSSHTunnel gibi bir şeye ne dersin? HTTPS + SH (kabuk) veya HTTP + SSH mı? Google sözleşmesi kesinlikle daha az belirsizdir.
L. Holanda

10

Orada JavaScript Stil Rehberi airbnb yıldızlı (~ şu anda 57.5k) hakkında ve kılavuzları bir sürü github en kısaltmalar ki:

Kısaltmalar ve girişimler her zaman büyük harfle yazılmalı veya tümü küçük harfle yazılmalıdır.

Neden? İsimler okunabilirlik içindir, bilgisayar algoritmasını rahatlatmak için değildir.

// bad
import SmsContainer from './containers/SmsContainer';

// bad
const HttpRequests = [
  // ...
];

// good
import SMSContainer from './containers/SMSContainer';

// good
const HTTPRequests = [
  // ...
];

// also good
const httpRequests = [
  // ...
];

// best
import TextMessageContainer from './containers/TextMessageContainer';

// best
const requests = [
  // ...
];

7
" Neden? İsimler okunabilirlik içindir, bir bilgisayar algoritması yatıştırmak için değil " bu yüzden, XMLHTTPRequestokunması çok daha iyi XmlHttpRequest, değil mi?
L. Holanda

2
Neden httpRequestsiyi olduğu düşünülüyor ama HttpRequestskötü. bu prensibi izleyerek XML HTTP İsteği için xmlhttpRequest???
L. Holanda

1
AirBnb stil rehberinden sık sık bahsediyorum, ancak bu durumda katılmıyorum. Özellikle kendi ifadelerine katılmıyorum: "Kısaltmalar ve girişimler her zaman büyük harflerle veya küçük harflerle gösterilmelidir." bence xmlHttpRequestdaha okunabilir XMLHTTPRequest.
Ronan

3

Şu anda aşağıdaki kuralları kullanıyorum:

  1. Kısaltmalar için Sermaye durum: XMLHTTPRequest, xmlHTTPRequest, requestIPAddress.

  2. Kısaltmalar için Deve durum: ID[entifier], Exe[cutable], App[lication].

ID bir istisna, üzgünüm ama gerçek.

Büyük bir harf gördüğümde bir kısaltma, yani her harf için ayrı bir kelime olduğunu varsayıyorum. Kısaltmalar her harf için ayrı kelimeler içermediğinden deve harfini kullanıyorum.

XMLHTTPRequest belirsizdir, ancak nadir bir durumdur ve çok da belirsiz değildir, bu yüzden sorun değil, kurallar ve mantık güzellikten daha önemlidir.


1

JavaScript Airbnb stil rehberi bunun hakkında biraz konuşur . Temelde:

// bad
const HttpRequests = [ req ];

// good
const httpRequests = [ req ];

// also good
const HTTPRequests = [ req ];

Tipik olarak bir sınıf olarak büyük harf okuduğum için bundan kaçınma eğilimindeyim. Günün sonunda, hepsi tercih.


1

@Valex'in söylediklerine ek olarak, bu soruya verilen cevaplarla birkaç şeyi tekrar özetlemek istiyorum.

Bence genel cevap: kullandığınız programlama diline bağlıdır.

C Keskin

Microsoft ,HtmlButton bu durumlar için bir sınıfı adlandırmanın doğru yolu gibi göründüğü bazı yönergeler yazmıştır .

JavaScript

Javascript kısaltmaları olan bazı küresel değişkenlere sahiptir ve hepsini büyük harflerle kullanır (ama her zaman tutarlı olmayan bir şekilde, her zaman tutarlı olmayan) bazı örnekler:

encodeURIComponent XMLHttpRequest toJSON toISOString


Netscape eski, hatta hiçbir camelCase olmayan bazı var onerror.
Eddie

1

Feragatname: İngilizce benim ana tonum değil. Ama uzun zamandır bu sorunu düşündüm, esp, veritabanı alanlarını işlemek için düğüm (camelcase stili) kullanırken tablo alanlarının adı yılanlaştırılmalı, bu benim düşüncem:

Bir programcı için 2 çeşit 'kısaltma' vardır:

  • doğal dilde, UNESCO
  • örneğin, tmc and textMessageContainergenellikle yerel bir değişken olarak görünen bilgisayar programlama dilinde .

Programlama dünyasında, doğal dildeki tüm kısaltmalar kelime olarak ele alınmalıdır , nedenleri:

  1. programlama yaparken, bir değişkeni ya kısaltma tarzında ya da kısaltma olmayan tarzda adlandırmalıyız. Bu nedenle, getUNESCOProperties işlevini adlandırırsak, UNESCO'nun bir kısaltma olduğu anlamına gelir (aksi takdirde tümüyle büyük harfler olmamalıdır), ancak açıkça getve propertieskısaltma değildir. bu nedenle, bu işlevi ya gunescop veya getUnitedNationsEducationalScientificAndCulturalOrganizationProperties olarak adlandırmalıyız , her ikisi de kabul edilemez.

  2. doğal dil sürekli gelişiyor ve bugünün kısaltmaları yarının kelimeleri olacak , ancak programlar bu eğilimden bağımsız olmalı ve sonsuza kadar ayakta kalmalıdır.

Bu arada, en çok oy verilen cevapta, IO bilgisayar dili anlamının kısaltmasıdır (InputOutput anlamına gelir), ancak adı sevmiyorum, çünkü bence kısaltma (bilgisayar dilinde) sadece isim vermek için kullanılmalıdır yerel bir değişken ancak üst düzey bir sınıf / işlev olduğundan, IO yerine InputOutput kullanılmalıdır


"ton" değil, "ton"
Dan Dascalescu

0

UNESCO, UEFA, RADA, BAFTA ve BBC, HTML, SSL gibi bir kısaltma olarak değil, genellikle (İngilizce) bir kelime olarak okunduğundan özel bir durumdur


1
Bu "kısaltmalar" ile sadece "kısaltmalar" arasındaki ayrımdır; bu ayrım tüm tartışma ile ilgili görünmektedir, ancak sunulan cevaplarda neredeyse tamamen anlaşılmıştır.
simon

Her harfi seslendirdiğiniz BBC, HTML, SSL ve diğer kısaltmalar daha doğru bir şekilde başlatma olarak adlandırılır. UNESCO gibi bir kelime olarak telaffuz edilen kelimeler gerçek kısaltmalardır.
Lrdwhyt

-2

Ayrıca, büyük harf ( HTML) veya küçük harf ( ) kullanarak kısaltmaların okunabilirliğini desteklemeye çalışan html, ancak her ikisinden ( Html) kaçınan başka bir deve çantası kuralı vardır .

Yani sizin durumunuzda yazabilirsiniz getUNESCOProperties. unescoPropertiesBir değişken için de yazabilirsiniz veyaUNESCOProperties bir sınıf (sınıflar için kural büyük harfle başlamaktır).

Örneğin XML HTTP İsteği adlı bir sınıf için iki kısaltmayı bir araya getirmek istiyorsanız bu kural zorlaşır. Bu büyük harfe ile başlayacak; fakat bu yana XMLHTTPRequestokunması kolay olmaz (? O XMLH TTP Talebi olması) ve XMLhttpRequestcamelCase kuralına (? O XM Lhttp Talebi olması) kırardı, en iyi seçenek davayı karıştırmak olacaktır: XMLHttpRequest, hangi aslında W3C'nin kullandığı . Ancak bu tür adlandırmaların kullanılması önerilmez. Bu örnek için, HTTPRequestdaha iyi bir isim olurdu.

Resmi İngilizce kimlik / kimlik kelimesi ID gibi göründüğünden, bir kısaltma olmasa da, aynı kuralları orada uygulayabilirsiniz.

Bu sözleşmenin orada oldukça popüler olduğu görülüyor, ancak bu sadece bir sözleşmedir ve doğru ya da yanlış yoktur. Sadece bir kongreye bağlı kalmaya çalışın ve isimlerinizin okunabilir olduğundan emin olun.


3
Bütün bu iş parçacığı inanmıyorum :-) Yani XMLToHtmlConverter ama HTMLToXmlConverter olurdu? Vay be ...
Josef Sábl

1
@ JosefSábl, evet, böyle olurdu. Düşüşünüzle ilgili olarak, bu sözleşmeyi sevdiğimi söylemiyorum, ama kesinlikle var.
Jesús Carrera

1
"Var olan tüm sözleşmeleri listeleyebilir misiniz?" Diye değil, "Deve davasında Accronyms yazmanın iyi bir kuralı nedir?" Bahsettiğiniz sözleşmeyi çok kötü olarak değerlendirdiğim için, :-)
Josef Sábl

Peki soru "Bu şekilde yazmak doğru mu?", Ve sadece bir kongre olduğu için yazmak için birçok "doğru" yol olduğundan ve bu sözleşme oldukça popüler (nasıl değerlendirdiğinize bakılmaksızın), benim cevap çok geçerli :-)
Jesús Carrera
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.