it-swarm.dev

Neden bazı programlama dillerinde hala büyük / küçük harfe duyarlılık var?

Kod programlama dışında, programlama dilinde büyük/küçük harfe duyarlılık için herhangi bir kullanım görmüyorum.

Bunu neden bir programlama dilinde uygulayalım?

Güncelleme:

Görünüşe göre tanıdığınız biri bu konuda bir açıklama yaptı .

44
DavRob60

Vaka katlama İngilizce'de oldukça önemsiz olmakla birlikte, diğer bazı dillerde çok daha azdır. Bir Alman programcı ß değişken adında, büyük harf eşdeğerini ne dikkate alacaksınız? Sadece FYI, "ß" sadece küçük harflerle kullanılır. OTOH, "ss" eşdeğeridir - bir derleyicinin bunlarla eşleşmesi gerektiğini düşünür müsünüz? Unicode'a girdiğinizde, önceden birleştirilmiş aksan işaretleri olan karakterler ve ayrı aksanları birleştiren karakterler gibi daha ilginç sorunlar yaşarsınız. Sonra, iki harf yerine, üç harfin üç ayrı formuyla bazı Arapça senaryolara ulaşırsınız.

Karanlık çağlarda, programlama dillerinin çoğu neredeyse gerekliliğin dışında büyük/küçük harfe duyarsızdı. Örneğin, Pascal, karakter başına yalnızca altı bit (Toplam 64 kod) kullanan Kontrol Verileri ana karelerine başladı. Bu tür makinelerin çoğu, yalnızca büyük harfli karakterler içeren "CDC Scientific" karakter kümesini kullanmıştır. Diğer karakter kümelerine geçebilirsiniz, ancak çoğunda büyük harf veya küçük harf vardı, ancak her ikisi birden yoktu - ancak her ikisi için de aynı kodları kullandı. 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 mevcut olduklarında, büyük/küçük harfe duyarsız olmaları, değiştirilmesinin imkansız olduğu kadar iyice yerleşti. .

Zamanla, büyük/küçük harf duyarsızlığının gerçek zorluğu daha belirgin hale geldi ve dil tasarımcıları çoğunlukla insanlar büyük/küçük harf duyarsızlığı istediğinde/varsa, yardımcı araçlarla daha iyi ele alındığına karar verdiler ("farkına vardılar" muhtemelen daha doğru bir terim olacak) dilin kendisinden daha fazla.

En azından IMO, derleyici tam olarak sunulduğu gibi girdi almalı, "bunu yazdınız, ama gerçekten başka bir şey demek istediğinizi varsayalım." Çevirilerin gerçekleşmesini istiyorsanız, bunları iyi idare etmek için oluşturulmuş araçlarla ayrı ayrı yapmalısınız.

114
Jerry Coffin

Neden kimse duyarsızlık İSTER? Hangi senaryoda tek bir değişkeni bir yerde VARIABLE, başka bir yerde Variable ve üçte birinde variable olarak tanımlamak yararlı olur? Vaka duyarsızlığı bıkkın. Böyle bir durumda yazım hatalarının koduma girmesine izin vermek yerine, yanlışlıkla VAriable yerine Variable yazdığımda derleyici hatası almayı tercih ederim.

Sonuç olarak, birçok programlama dili sadece tarihsel/eylemsiz nedenlerle değil, büyük/küçük harf duyarsızlığının Kötü Bir Fikir olduğu için büyük/küçük harf duyarlılığına sahiptir.

116
nohat

Java büyük/küçük harf duyarlılığı, kodda daha fazla seçenek sunmak için değil, daha çok açık ve tutarlı bir anlamsal anlam için kullanılır. Daha fazla özgürlük SAĞLAMAZ: aksi halde aşırı ayrıntılı bir dilin içine bazı bilgileri kısaca eklemenizi sağlar.

Mucho derleyici ve IDE desteği ile açıkça statik olarak yazılan dillerde), büyük-küçük harf duyarlılığı bilgi (örneğin Java) iletişim kurmak için harika bir yoldur. vakaya duyarsız Ruby denemeye açık olsam da, DAHA FAZLA beklenmedik sonuçlara neden oluyor.

Ben sıkı bir sistem ile büyük/küçük harf duyarlılığı kodu şaşırtmaz ama aslında daha açık hale getirir düşünüyorum. Olası Java kodunu düşünün:

      joe blah = new hUf();

bu oldukça açık, ama ne olacak:

      hUf.WTF();

Java olduğu gibi, bunun ne olduğunu otomatik olarak bilirsiniz. Duyarsız Java durumunda, belirsizdir, bu yüzden başka bir mekanizmaya başvurmanız gerekir. sınıfları paketlerden örneklerden yöntemlerden ayırın. Ve BU mekanizma muhtemelen sizi ne kadar çirkin olduğu konusunda kusturuyor :)

27
Dan Rosenstark

Ben "izin verilen" 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 için fazladan çalışma gerektirir, çünkü büyük/küçük harfe duyarlı olmayan karşılaştırmalar yapmak ve orijinal hata adlarını doğru hata ve uyarı raporlaması için korumak için ek kod eklemeniz gerekir.

Neredeyse kesinlikle C olarak sonuçlandı; kullanılabilirlik pahasına bir derleyici uygulaması kolay olan basit bir dil yapmak istediler. Neden modern dillerin içinde? Çünkü C, elbette, bu yüzden zorunluluk doğru şekilde olun! </ alay modu>

24
Mason Wheeler

Başka bir şey yoksa, 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 harfe duyarlı olmayan ayrıştırmayla, 'myClass' ve 'MyClass' aynı şey olacağından benzersiz tanımlayıcılar kullanmak zorunda kalacaksınız. Alternatif olarak, bağlama göre hangi tanımlayıcının kullanıldığını belirleyebilmeniz için ayrıştırıcınıza karmaşıklık katmanları eklemeniz gerekir.

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

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

XmlWriter sınıfının da "Write" adlı statik bir yöntemi olduğunu varsayalım. Burada uygulanan büyük/küçük harf duyarlılığı yoksa, örneği veya sınıfta mı çağırıyorsunuz?

23
Adam Lear

Kodun daha fazla kendi kendini belgelemesini sağlayan başka bir nedenden dolayı büyük/küçük harfe duyarlılığı seviyorum:

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

Genellikle Python program, ama benim C # gün, ben sınıf örneklerini sınıfla aynı, ama daha düşük (veya deve) durumda (diğerleri söylediler) adlandırmak için çok uygun buldum:

Thing thing = new Thing();

Büyük/küçük harfe duyarlı olmayan dilleri kullanmak, bunun için başka bir kural gerektirir, yani, bir çeşit sigil gibi:

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

Bu "kötü bir şey" dir.

Ben de bir değişkene karşı bir sınıfa referans bulmak için grep (büyük-küçük harf duyarlı) uygun buluyorum. Büyük/küçük harfe duyarlı olmayan bir dilde bu daha az kolay olacaktır. Arama ve değiştirme için aynıdır.

Son olarak, bir programcı olarak, farklı durumlara sahip kelimeler gördüğümde, farklı şeyler olduklarını bana atlar ... Değişken vakaların yanlış olduğu, nadiren bir derleyicinin yardımcı olacağı dinamik, komut dosyası dillerinde bile hatalara sahibim.

13
Hollister

İnsanlar kelimelerin şekillerini okumadan önce dikkat ederler. Büyük/küçük harf duyarlılığı, sembolün şeklini kod boyunca tutarlı tutar. Aynı zamanda, farklı sözleşmelerin farklı sembol türlerini gösterdiğini belirtenlerin üstünde de aynı fikirdeyim. Büyük/küçük harf duyarlılığı ve duyarsızlık kötüye kullanılabilir. Kötü programcılar her zaman kötü kod üretir ... bir yol bulurlar.

Dili örnek olarak alalım. Neden cümlelere başlıyoruz ve başkentlerle bir şeyler adlandırıyoruz ... Bu aynı zamanda unix yüzünden mi?

10
Tjaart

C # ve Java gibi statik olarak yazılmış diller için düşünüyorum, aslında herhangi bir değer katmıyor. Çoğu durumda, sizin için yine de vaka uyumsuzluklarını otomatik olarak düzelten bir IDE var. Bu nedenle, günün sonunda, yanlışlıkla "VAriable" yazarsam, my IDE bunu benim için "Değişken" olarak otomatik olarak düzeltir. Buna _ MyClass myClass; tarzı kuralları ve büyük/küçük harf duyarlılığının mutlaka kötü bir şey olmadığını görebilirsiniz.

Dinamik olarak yazılan diller için, daha fazla argüman olabilir, çünkü bir IDE bir otomatik düzeltmeyi tahmin etmek daha zordur, ancak dinamik olarak yazılan diller söz konusu olduğunda, (yazım hataları açısından) tutarlı bir muhafaza kuralı kullanmanın daha fazla yük getirmeyeceğinden endişe etmek çok daha fazla.

Yani evet, dillerin değil büyük/küçük harfe duyarlı olmamalarının gerçek bir nedeni olmasa da, olması gerekir bunların da olmasının gerçek bir nedeni yoktur.

Scott Hanselman'ın "SignOn" ve "Signon" hakkındaki makalesi dize karşılaştırmaları ve programlama dilleri ile ilgisi yoktu. Kullanıcılar yazıyor dizelerinin her zaman büyük/küçük harfe duyarsız olarak karşılaştırılması gerektiğini kabul ediyorum, ancak bunun bir programlama dilinde tanımlayıcılar için farklı bir top oyunu olduğunu düşünüyorum.

9
Dean Harding

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

  • Olasılık teorisinde, küçük harf f genellikle bir olasılık yoğunluk fonksiyonunu (pdf) temsil ederken, büyük harf F 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şkenler X, karşılık gelen küçük harfler ise $ Pr [X = x]\leq 0.05 $ 'daki gibi gerçekleşmelerini x gösterir.
  • Doğrusal cebirde, genellikle büyük harfleri matrislere atıfta bulunurken, küçük harfler genellikle sayılara atıfta bulunmak için kullanılır, örneğin, $ A = [a_ {ij}] $.
  • Birim sembolleri, litre (L) ve bir kişinin adından türetilen birimler (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 önek sembolleri büyük harfle yazılır (mega için M (milyonlar)) ve bir milyondan az olanlar küçük harftir (mil için m (binde bir)).
6
A. N. Other

Ben sadece Unix ve C - olduğunu düşündüm ama bu tür bir tavuk ve sadece moruklar düzgün cevap verebilir Yumurta sorunu.

"Paskalya Tavşanı Kasabaya Geliyor" daki Tavukların, Yumurtalardan önce gelip gelmedikleri sorulduğunda kullandıkları mantığı kullanıyorum. Nuh'un Gemisinde tavuklar olduğu için önce tavuklar geldi. Bu nedenle, GCC Unix üzerinde çalıştığı için, Unix önce geldi, bu nedenle Unix, kasa, C ve tüm varyantları ve torunları için çok önem verdiği için, evet kıvırcık kaşlı ayraçlar uygulayan, dava için umurunda olan.

Kıvırcık parantezler ve büyük/küçük harf duyarlılığı arasında da bir bağlantı vardır.

3
Peter Turner

"Büyük/küçük harf duyarlı" teknik kişilerin belirsizliği azaltması için her zaman daha iyidir. Dosya adını örnek olarak alalım. Windows dosya adıyla uğraşmak Unix dosya adından daha zordur, çünkü Windows'daki dosya adı büyük/küçük harfe duyarlı değildir, Unix'teki dosya adı büyük/küçük harfe 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ı zorunlu kılmaz. Bazen "yansıma" yapmak için basitlik amacıyla, "Büyük/küçük harfe duyarlı" adını, dönüşüm olmadan veya aynı adla ancak farklı bir durumda sorunu ele almadan başka bir veri kaynağına bağlamak için kullanabiliriz.

2
linquize

Şimdiye kadar verilen mükemmel cevaplara ek olarak, büyük/küçük harf duyarlılığının size ek "ad alanları" verdiğini belirtmek isterim. Örneğin Perl, normal koddan farklı zamanlarda çalışan BEGIN ve END gibi bazı özel bloklara sahiptir (derleme zamanında BEGIN, normal program sona erdikten sonra END) ve bunların hepsi büyük harflerin öne çıkmasını sağlar ve küçük harfli değişkenlerin ayrılmış kelimeler olmadığı anlamına gelir.

Daha da ileri gidebilir ve tüm büyük harfleri dilin ileride kullanılmak üzere ayırabilir ve genellikle KODUNDA GÖSTERMEYEN normal programcılara herhangi bir zarar vermez.

2
moritz

Bu rant beni şaşırttı. Artık kimse bir alt çizgi veya bir m_ C # alan adında, ben sadece deve durumda kullanıyorum ve alan adı bir ortak özellik adı ile aynı ise, sadece kamu mülkiyet adı Pascal durumda ve destek alan deve durumda, ben rakam, "öyle olsun" - genel olarak programlama topluluğunun istediği şey budur. Şimdiye kadar herhangi bir soruna yol açmadı.

1
Scott Whitlock

Özellikle bazı programcılar BASIC'in ilk günlerinden gelmektedir ve değişken adın sadece 2 karakter uzunluğunda olabilmektedir.

Ve böylece, herhangi bir sayıda karakter olabildiğinde, çok mutlu olurlar. Ve büyük/küçük harfe duyarlılık ile birlikte - çünkü SomeName 'ın yanlışlıkla SOMENAME' e eşit olmasını ummak istemiyorlar ve bunun gibi bir hataya neden oluyorlar.

0
Michael W