Bazı programlama dillerinde neden hala büyük / küçük harf duyarlılığı var?


44

Bir programlama dilinde küçük harf duyarlılığı için herhangi bir kullanım göremiyorum, gizleyici kod dışında.

Neden bunu bir programlama dilinde uyguladınız?

Güncelleme:

Bu konuda bir açıklamada bulunduğunu bildiğiniz birine benziyor .


28
Neden bazı programlama dillerinde hala küçük harf duyarsızlığı var?
Thomas Eding,

1
İngilizce bile genel olarak büyük / küçük harf duyarlıdır. Yaygın alıntı yapılan örnek lehçe ve Lehçe olup, yazılı biçimleri sadece durumunda farklı olan ve farklı telaffuz ve anlamları olan iki farklı terimdir. IMO, programlama dilinin bu konuda zekice davranmaması ve programcıların uygun yazılı sözleşmelere girmelerine izin vermesi açısından daha iyidir. Örneğin, Person person = new Person()“kişi” sembolünün geçici bir nesne olduğu ve “Kişi” nin bir sınıf türü olduğu OO dilinde bir şeyler yazmak oldukça yaygındır .
Brandin

Yanıtlar:


113

Vaka katlama İngilizce'de oldukça önemsiz olsa da, diğer bazı dillerde çok daha az. Bir Alman programcı ßdeğişken bir isim kullanıyorsa , büyük harf eşdeğeri olarak ne düşüneceksiniz? Sadece FYI, "ß" sadece küçük harflerle kullanılır. Otoh, "ss" olduğunu eşdeğer - Onları maç için yükümlü bir derleyici düşünürdünüz? Unicode'a girdiğinizde, önceden birleştirilmiş diakritik işaretlere sahip karakterler ve ayrı bir birleştirme isyancıları gibi daha ilginç problemler elde edersiniz. Ardından, sadece iki değil, üç ayrı harf formundan oluşan bazı Arapça senaryolara girersiniz.

Karanlık çağlarda, programlama dillerinin çoğu, neredeyse gerek kalmadan büyük / küçük harf duyarsızdı. Örneğin, Pascal karakter başına sadece altı bit kullanan (64 kod, toplam) Kontrol Verileri ana bilgisayarlarında başladı. Bu tür makinelerin çoğu, sadece büyük harf içeren "CDC Scientific" karakter setini kullandı. Diğer karakter kümelerine geçebilirsiniz, ancak çoğunda büyük veya küçük harf vardı, ancak her ikisine de sahip değilsiniz - ancak her ikisi için de aynı kodları kullanıyorlardı. Aynı şey eski Baudot kodları için de geçerliydi ve COBOL, FORTRAN, BASIC, vb. Başlangıç ​​günlerinde standart olarak kabul edildi. Daha yetenekli donanımlar yaygın olarak bulunabildiklerinde, büyük küçük harf duyarlılığı o kadar iyice kötüydü ki değiştirmenin imkansız olduğu .

Zaman içinde, vaka duyarsızlığının asıl zorluğu daha belirgin hale geldi ve dil tasarımcıları, insanlar gerçekten de vaka duyarsızlığı istediklerinde, bunun yardımcı araçlar tarafından daha iyi ele alınmasını istediklerinde daha doğru bir terim olduğuna karar verdiler. dilin kendisinden daha.

En azından IMO, derleyici tam olarak sunulduğu gibi girdi almalı, "bunu yazdın, ama gerçekten başka bir şey demek istediğini varsayacağım" kararını vermemeli. Tercümelerin gerçekleşmesini istiyorsanız, bunları iyi yapmak için oluşturulmuş araçlarla ayrı ayrı yapmaktan daha iyi olursunuz.


26
+1, benzer bir şey söyleyecekti, deneyimlerime göre, bu konuda sızlanan insanların çoğu diğer dilleri / karakter setlerini düşünmeyenlerle aynı.
Jeremiah Nunn

5
Benim büyük sorum da, eğer derleyici farklı yazımlar farketmeye başlayacaksa, keyfi olarak alt çizgi veya başka bir "sözcük ayırıcı" içine alt çizgi koymanıza izin vermeli mi? Bir tanımlayıcıyı yanlış yazdığınızda "beklediğiniz şeyi yapmayı" deneyebilir mi? Ne kadar ileri gidecek? (BTW, Ada, netlik sebepleriyle sayılar içinde keyfi olarak alt çizgi çizilmesine izin verir .)
dash-tom-bang

3
@Barry: İkisi hemen hemen aynıdır - dünyadaki hemen hemen her dilin ASCII'de bulunmayan karakterleri gerektirmesi. Bu konuda, bir nevi yoldan atmamıza rağmen, İngilizce için bile oldukça kısıtlı - örneğin, “işbirliğini” “işbirliği” olarak yazmaya zorlar. Neyse ki, daktilolar, bilgisayarların gelmesinden çok önce insanların bu tür kısıtlamalara alışmalarını sağladı, hatta birkaç kişinin gerekli gördüğü tüm karakterleri kullanma olasılığını bile düşündüğü noktaya kadar.
Jerry Coffin

2
@ dash-tom-bang: böyle şeyler yapmaya çalışan derleyiciler yazılmıştır (doğru heceleme ve neyin yapılmaması). Deneyim, derleyicinin daha hızlı çalışmasını ve daha iyi hata mesajları üretmesini sağlamanın genellikle daha iyi olduğunu gösterir.
Jerry Coffin

2
@ phresnel Veya "SZ". Her ikisi için de iyi argümanlar yapılabilir.
Vatine

114

Neden birisi istemeyen bir duyarsızlığı İSTEMEZ? Hangi senaryoda, tek bir değişkene VARIABLEbir yerde, bir Variablediğerinde ve variableüçte birinde olduğu gibi atıfta bulunmak faydalı olabilir mi? Vaka duyarsızlığı yorucu. Yanlışlıkla böyle bir yazım hatası yapıp koduma girmesine izin vermek VAriableyerine yazarken derleyici hatası almayı tercih ederim Variable.

Sonuç olarak, birçok programlama dili yalnızca tarihsel / ataletsel nedenlerden dolayı büyük / küçük harf duyarlılığına sahip değildir;


12
İçine bakıyorsun. Evet, birden fazla yazımla aynı değişkene atıfta bulunmak can sıkıcı olabilir, ancak aynı durumda, sadece durumda farklı olan iki farklı şeyden bahseden iki farklı tanımlayıcıya sahip olmak kadar kötü değildir. Büyük küçük harf duyarlılığı iyi bir şey çünkü bunu engelliyor. (Ayrıca, basit bir yazım hatası sözdizimi hatası olmaktan alıkoyar; sorudaki Jeff'in konuyla ilgili yazısına verilen bağlantıya bakın.)
Mason Wheeler

88
Ama basit yazım hataları sözdizimi hataları olmak istiyorum! Kodumda basit yazım hataları istemiyorum ve derleyicimin onları bulmama yardım etmesini istiyorum. Büyük küçük harf duyarlılığı onları bulmayı zorlaştırıyor. Büyük küçük harf duyarsızlığı, özensiz kodlamanın bahanesi gibi görünüyor.
hayır,

4
@nohat: Yazmayı düşündüğünüzden başka bir şey yazdığınızda, sözdizimi hatası iyi bir şeydir.
Tim Goodman

13
@Mason Wheeler, ben var makaleyi okuyun ve ben sadece daha fazla katılmıyorum olabilir. Birçok büyük harf duyarsız dil kullandım ve sürekli olarak büyük harflerle yazıldım.
nohat

11
Kesinlikle hayır ile aynı fikirde olun - büyük küçük harf duyarsızlığı saçma bir fikir - ve genellikle taraftarlar hala eski güzel VB / Temel günler için özlenen insanlardan geliyor.
Tim,

27

Java durumunda, kodda daha fazla seçenek sağlamak için DEĞİL duyarlılık kullanılmaz, bunun yerine çok açık ve tutarlı bir anlamsal anlam kullanılır. ClassesLookLikeThis. objectsLookLikeThis. methodsLookLikeThis (). STATIC_VARIABLES_LOOK_LIKE_THIS. Classes.WithInnerClassesLookLikeThis. Daha fazla özgürlük sunmaz: bazı bilgileri aşırı derecede ayrıntılı bir dilin ne olduğuna tam olarak sığdırmanıza izin verir.

Açıkça statik olarak yazılmış, mucho derleyici ve IDE desteğine sahip dillerde, büyük / küçük harfe duyarlılığın bilgi iletmek için harika bir yol olduğunu düşünüyorum (örneğin, Java). Ruby gibi dillerde, büyük / küçük harf duyarlılığı büyük olasılıkla beklenmedik sonuçlara neden olur, ancak büyük / küçük harf duyarlı Ruby'yi denemeye açık olurum.

Sıkı bir sisteme sahip olan büyük küçük harf duyarlılığının kodu engellemediğini, ancak aslında daha net hale getirdiğini düşünüyorum. Mümkün Java kodunu düşünün:

      joe blah = new hUf();

Bu oldukça açık, ama ne hakkında:

      hUf.WTF();

Java olduğu gibi, bunun ne olduğunu otomatik olarak bilirsiniz. Büyük / küçük harf duyarlı Java'da belirsizdir, bu nedenle sınıfları yöntemlerden paketlerden yöntemlerden ayırmak için başka bir mekanizmaya başvurmanız gerekir. Ve bu mekanizma muhtemelen sizi ne kadar çirkin olduğuna kusturacaktı :)


2
Hayıııırrrrr! DAHA FAZLA AŞAĞIDAKİ !! int package_class_method_var_name? !!
Michael K

2
@Michael, hiç kimsenin alt çizginin yazmanın zor olduğunu farketmediği garip.
Dan Rosenstark

2
klavyenize bağlıdır. Benim için (Fransızca klavye kullanarak), _ yazın kolaydır, {} çok daha zordur (AltGr kullanarak onlara ulaşmak için).
PhiLho

6
Ah, öyleyse büyük / küçük harf duyarlılığı yeni Macar gösterimidir.
David Thornley

1
Derleyici bunu zorlarsa sadece " çok açık ve tutarlı bir anlamsal anlam " söz konusudur. Şimdi, sınıf adlarının büyük harfle başlamasını gerektiren bir derleyici ve küçük harfli yöntem adları büyük / küçük harf duyarlılığına sahip olmanın ilginç bir nedeni olabilir.
Ross Patterson

24

Bunun "izin verildiği kadar" "uygulandığını" sanmıyorum. Büyük / küçük harf duyarlılığı, dize karşılaştırmalarının varsayılan durumudur; derleyici mühendisinin bir dil büyük / küçük harf duyarsız hale getirmesi fazladan çalışma gerektiriyor, çünkü büyük / küçük harf duyarlı olmayan karşılaştırmalar yapmak için ekstra kod eklemeniz ve orijinal hata adlarını doğru hata ve uyarı raporlaması için saklamanız gerekiyor.

Neredeyse kesinlikle bu yüzden C ile sonuçlandı; kullanılabilirlik pahasına derleyici uygulaması kolay olan basit bir dil yapmak istediler. Neden modern dilbilgilerinde? O C olduğundan, elbette, bu yüzden olmalı bunu yapmak için doğru yolu! </ alaycı modu>


3
Ayrıca, 60'lı ve 70'li yıllarda programlama dilleri icat edilirken, alan ve hızın çok önemli olduğunu düşünüyorum. Küçük-büyük harf-karşılaştırmalı karşılaştırmalar için bu ekstra talimatları ve alanı sağlayamıyoruz. Modern dillerde "her zaman böyle yapılır" probleminden daha fazlası. Yeni dillerin (C # gibi) bunu yapması için hiçbir sebep yok.
Jay

1
@Jay: Yine de, ne sebeple olursa olsun, C'yi önleyen ve tasarımını etkileyen Pascal büyük / küçük harfe duyarsız ve hala daha hızlı bir şekilde derleniyor. ;)
Mason Wheeler

@Mason: Pascal'in C'yi etkilediğini düşünmedim ... Bakmam gerekti. Temel olarak hepsi Algol / Fortran'dan geliyor! people.mandriva.com/~prigaux/language-study/diagram.png
Jay

1
@Matt: Umm ... Bunu nereden aldın? Gördüğüm tüm kaynaklar Pascal'dan 1970'e ve C'den 1972'ye kadar çıkıyor.
Mason Wheeler

16
Bugünlerde çocuklar. Benim zamanıma, küçük bir vakamız olmadı ve hoşuma gitti. 6 bit yeterliydi. Tabii ki, şimdi hepimiz SHOUTING'den sağırız.
KeithB

23

Başka bir şey değilse, ayrıştırmayı basitleştirir ve değişken / sınıf adları için daha fazla kombinasyon sağlar.

Büyük / küçük harf duyarlı ayrıştırma işleminde, 'sınıfım' ve 'Sınıfım' aynı olacağı için benzersiz tanımlayıcıları kullanmak zorunda kalacaksınız. Alternatif olarak, bağlamda hangi tanımlayıcının kullanılacağını belirleyebildiğinizden emin olmak için ayrıştırıcınıza karmaşıklık katmanları eklemeniz gerekir.

Böyle bir durum düşünün:

XmlWriter xmlWriter = new XmlWriter();
xmlWriter.Write("blah");

XmlWriter sınıfının "Yaz" olarak adlandırılan statik bir yöntemi olduğunu varsayalım. Burada büyük / küçük harf duyarlılığı yoksa, onu sınıfta veya sınıfta mı çağırıyorsunuz?


14
Bu kötü adlandırma kuralı olsa. Eğer Birini boğmak istiyorum writeve Writeiki tamamen farklı yöntemler vardı.
TheLQ,

5
Bu konuda TheLQ ile aynı fikirdeyim. Bazı C kütüphanelerinde çalışırken beni deli ediyor ve "HWND hwnd;" gibi bildirimler görüyorum. Bunun gibi büyük / küçük harf duyarlılığını kötüye kullanan herkes çıkarılmalı ve vurulmalıdır.
Mason Wheeler

4
@TheLQ yöntemleri aynı durumda. Örnek olarak sınıf / değişken adlarında farklı durumlar kullanıyordum.
Adam Lear

6
@Anne Lear, bunun kötü bir örnek olduğunu düşünüyorum. Büyük / küçük harf duyarsız bir dilde, hangi yöntemin çağrılacağı konusunda endişelenmenize gerek kalmaz, çünkü değişken adı için bir sınıf adı kullanmaya çalışırken zaten bir sözdizimi hatası alırsınız.
Matt Olenik

5
@Matt sentaks vurgulama olmadan kodlamamalısınız . Bir IDE olmadan anlayabilirim, ancak bir editöre sözdizimi vurgulamadan kodlama ... neden birileri bunu kendilerine yapsın?
Davy8

13

Başka bir nedenden ötürü, kodu daha fazla kendi kendine belgeleyen hale getirirse, büyük / küçük harf duyarlılığını seviyorum:

this is a CONSTANT
this is a ClassName
this is a methodName
this is a local variablename

Genellikle Python'da programlarım, ancak C # günlerime geri döndüğümde, sınıf örneklerinin sınıfla aynı şekilde adlandırılmasını çok daha uygun buldum, ancak daha düşük (veya deve) durumunda (diğerlerinin söylediği gibi):

Thing thing = new Thing();

Büyük / küçük harf duyarlı dilleri kullanmak, bunun için başka bir kural gerektirir, yani, bir tür sigil benzeri:

Thing oThing = new Thing()
Thing instanceOfThing = new Thing()

Hangi "kötü bir şey".

Bir değişkenin kullanımına karşı bir sınıfa referans bulmak için grep'i (büyük-küçük harfe duyarlı) da uygun buluyorum. Büyük küçük harf duyarlı bir dille, bu daha az kolay olacaktır. Arama ve değiştirme için aynı.

Son olarak, bir programcı olarak, farklı durumlara sahip kelimeler gördüğümde, farklı şeyler oldukları bana atlıyor ... Değişken vakaların yanlış olduğu yerlerde, bir derleyicinin yardım edeceği dinamik, betikli dillerde bile nadiren hata yaşıyorum.


10

İnsanlar gerçekten onları okumadan önce kelimelerin şekline dikkat ederler. Büyük küçük harf duyarlılığı, kod boyunca tutarlı bir sembol şeklini tutar. Ayrıca, farklı sözleşmelerin farklı sembol türlerini ifade ettiğini belirten yukarıdakilerle aynı fikirdeyim. Büyük küçük harf duyarlılığı ve duyarsızlığı kötüye kullanılabilir. Kötü programcılar her zaman kötü kod üretecek ... bir yolunu bulacaklar.

Dili örnek olarak al. Neden cümle kurar ve başlıkları olan şeyleri adlandırırız ... Ayrıca unix yüzünden mi?


@JUST Yorumlar, uzun tartışmalar için değil, açıklama arayışı içindir. Bir çözüm varsa, bir cevap bırakın. Çözümünüz zaten yayınlandıysa, lütfen geçersiz kılın. Başkalarıyla Bu yanıtı görüşmek isterseniz, kullanın lütfen sohbet . Daha fazla bilgi için SSS bölümüne bakın .
Adam Lear

9

C # ve Java gibi statik olarak yazılmış diller için, aslında herhangi bir değer katmadığını düşünüyorum. Çoğu durumda, sizin için her durumda sizin için dava uyumsuzluğunu otomatik olarak düzeltecek bir IDE'niz vardır, bu nedenle günün sonunda, yanlışlıkla "VAriable" yazarsam, IDE bunu otomatik olarak düzeltir " Değişken "benim için. Buna ek olarak MyClass myClass;stil kurallarını ekleyin ve büyük küçük harf duyarlılığının mutlaka kötü bir şey olmadığını görebilirsiniz.

Dinamik olarak yazılmış diller için, bir IDE'nin bir otomatik düzeltme tahmin etmesi daha zor olduğu için, daha fazla argüman olabilir, ancak dinamik olarak yazılmış diller söz konusu olduğunda, zaten endişelenecek çok şey var. yazım hataları) Tutarlı bir muhafaza konvansiyonu kullanmanın bu kadar fazla yük getirmeyeceği anlamına geliyor.

Bu nedenle, evet, dillerin büyük / küçük harfe duyarsız olmamasının gerçek bir nedeni olmasa da, dillerinden birinin de böyle olması gerektiğinin gerçek bir nedeni yoktur .

Scott Hanselman'ın "SignOn" ve "Signon" ile ilgili yazdığı makale, dize karşılaştırmaları ve programlama dilleriyle ilgisi hakkında değildi. Kullanıcıların yazdıkları dizgelerin her zaman büyük / küçük harf duyarlılıkla karşılaştırılmaması gerektiğine katılıyorum , ancak bunun bir programlama dilinde tanımlayıcılara göre farklı bir kod adı olduğunu düşünüyorum.


1
"Davanın uyumsuzluğunu otomatik olarak düzelten IDE" den bahsettiği için +1
DavRob60

3
IDE'ler wimps içindir. Kurşun kalem ve kağıt ile programlarım ve sonra kodu
okudum

6

Bir dil büyük / küçük harfe duyarlı olduğunda, matematik ve fen bilimlerinde geleneksel vaka kullanımını yeniden üretmek için ondan yararlanırım. Bazı dava sözleşmelerinin bir listesi (ayrıntılı değildir):

  • Olasılık teorisinde, küçük harf fgenellikle bir olasılık yoğunluk fonksiyonunu (pdf) Ftemsil ederken, büyük harf karşılık gelen kümülatif dağılım fonksiyonunu (cdf) temsil eder.
  • Ayrıca olasılık teorisinde, büyük harfler rasgele değişkenleri belirtirken X, karşılık gelen küçük harfler de bunların gerçekleşme xoranlarını $ Pr [X = x] \ leq 0.05 $ olarak gösterir.
  • Doğrusal cebirde, büyük harf genellikle matrislere gönderme yapmak için kullanılırken, küçük harfler genellikle sayılara işaret etmek için kullanılır, örneğin, $ A = [a_ {ij}] $.
  • Birim sembolleri, litre (L) ve bir kişinin adından türetilen birimler (örneğin, Watt için W, Pascal için Pa, Newton için N, vb.) Hariç, küçük harflerle (örneğin, metre için m) yazılır.
  • Bir milyon veya daha fazla anlamına gelen öneklerin sembolleri büyük harfle yazılır (mega için M (milyonlarca)) ve bir milyondan az olanlar küçük harflerdir (mili için m (binde)).

3
Geçerli bir nokta, ancak hemen hemen her ortak programlama diline ait kodlama kurallarını ihlal ediyor olursunuz, bu da kendi amaçları için büyük küçük harf duyarlılığı kullanır ..
Ken Bloom

3

Sadece Unix ve C yüzünden olduğunu düşündüm - ama bu bir tavuk ve sadece kuşların uygun şekilde cevaplayabileceği yumurta problemi.

Yumurtaların gelip gelmediği sorulduğunda, “Paskalya Tavşanı Şehre Geliyor” ta kullanılan Tavukların gerekçesini kullanırım. Çünkü Nuh'un Gemisinde tavuklar vardı, önce tavuklar geldi. Bu nedenle, GCC Unix üzerinde çalıştığından, Unix ilk sırada yer aldı, bu nedenle Unix durum için çok önem veriyor, C ve tüm değişkenleri ve soyundan gelenler, evet, kıvrımlı parantez takan her şey, durum için umurunda.

Kıvrımlı parantez ile büyük / küçük harf duyarlılığı arasında da muhtemelen bir bağlantı vardır.


Unix, GCC'den yıllar önce geldi, ancak orijinal BCPL derleyicisi Unix'ten önce geldi ve genellikle "C sözdizimini" yarattı.
Ross Patterson

2

Şimdiye kadar verilen mükemmel cevaplara ek olarak, vaka duyarlılığının size ek "ad alanları" verdiğini de belirtmek isterim. Örneğin Perl gibi bazı özel blokları vardır BEGINve ENDnormal kod farklı zamanlarda bu çalışma (END normal program tamamlandıktan sonra da derleme zamanında BEGIN) ve tüm kapaklar olarak sahip olanlar bunları öne yapar ve bahsedilen alt durumda olduğu değişkenler kelimeleri saklamaz.

Kişi daha da ileri gidebilir ve dilin ileride kullanması için tüm büyük harf adlarını saklayabilir ve genellikle kendi kodlarında AÇMAYAN normal programcılara zarar vermez.


2

Teknik uzmanlar için belirsizliği azaltmak için "büyük / küçük harf duyarlı" her zaman daha iyidir. Örnek olarak dosya adını alın. Windows dosya adıyla başa çıkmak, Unix dosya adından daha zordur, çünkü Windows'taki dosya adı büyük / küçük harf duyarlıdır, Unix dosya adı büyük / küçük harf duyarlıdır.

Programlamaya geri dön. Sınıf adı, yöntem adı, değişken adı için çoğu dil adlandırma stili kuralını zorlamaz. Bazen "yansıma" yapmak için basitlik uğruna, basitçe "Büyük küçük harf duyarlı" adını, dönüşüm olmadan başka veri kaynaklarına bağlamak veya aynı addaki ancak farklı durumda olan sorunla başa çıkmak için kullanabiliriz.


Saçmalık. Belirsizliği azalttığı görülüyor, çünkü büyük / küçük harf duyarlı davranışı zaten bekliyorsunuz.
Ross Patterson

1

Bu rant tarafından şaşırdım. Şimdi kimse m_C # ' da bir alt çizgi veya bir alan adı kullanmanı istemediğine göre , sadece deve kasası kullanıyorum ve alan adı ortak mülk adıyla aynıysa, yalnızca ortak mülk adı Pascal kasasıdır. ve destek alanı deve davasıdır, "öyle olsun" diye düşünürdüm - programlama topluluğunun istediği gibi görünüyor. Şimdiye kadar herhangi bir soruna neden olmadı.


0

Özellikle bazı programcılar, değişken bir ismin sadece 2 karakter uzunluğunda olabileceği BASIC'in ilk günlerinden geliyor.

Ve böylece, herhangi bir sayıdaki karakter olduğunda, çok mutlu olurlar. Ve büyük / küçük harf duyarlılığı ile birlikte - çünkü buna benzer şeyler nedeniyle SomeNameyanlışlıkla eşit olmak SOMENAMEve böceğe neden olmakla da ilgilenmek istemiyorlar .

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.