Bir dilde duyarsız anahtar kelimeleri vaka [kapalı]


31

Özel bir betik dili yazmaya çalışıyoruz. Büyük / küçük harfe duyarsız anahtar kelimeler sunarak dili bağışlama konusunda bir öneride bulunuldu .

Şahsen bu fikri sevmiyorum, ama ekibimde son kullanıcı mutlu edeceğini söyleyen birkaç kişi var. FORTRAN, BASIC, SQL gibi dillerin örnekleri, bunların büyük / küçük harf duyarlı olmadığını söyleyerek verilmektedir.

Bu iyi bir fikir mi?


4
Peki, Visual Basic genellikle büyük / küçük harf duyarlı değildir, bu sorunuza cevap veriyor mu? ; P
yannis


3
Kullanıcıları ASCII karakter kümesiyle sınırlandırmadığınız sürece, tanımlayıcıları büyük / küçük harflere duyarsız hale getirmenin çok zor olduğunu unutmayın.
Simon Richter

2
@MainMa: C ++ atleast doğrudan değil. Bu tanımlayıcı içinde uygulanması tanımlı karakterler verir, ama ne garanti sadece a-zA-Z, 0-9(başlangıçta hariç) ve _.
Xeo

2
VB6 aslında bir çeşit karma yaklaşım kullanıyor: Anahtar sözcükleri ve tanımlayıcıları istediğiniz şekilde yazabilirsiniz ve IDE bunları hemen depolanan yola dönüştürür. (Hatta "endif" yazabilirsiniz ve "End If" e dönüştürülür.)
Felix Dombek

Yanıtlar:


42

Kendinize son kullanıcının kim olduğunu sorun. C veya Javscript'te programlama tecrübesi olan veya Unix'te BT tecrübesi olan biri tarafından yazılmak isteniyorsa, büyük / küçük harf duyarlılığı muhtemelen yapılacak en doğru şeydir, çünkü kullanıcının beklediği şey budur. Ancak çoğu son kullanıcı ve hatta güç kullanıcıları için bu kafa karıştırıcı olacaktır.

VB / VBA / VBScript büyük / küçük harfe duyarsızdır ve bu, programcı olmayanların dilin kolayca anlaşılmasını sağlamak için verilen bir karardı. Excel formülleri, tam olarak komut dosyaları değil, birçok kullanıcı eline ulaştığında, büyük / küçük harf duyarlı değildir. Çoğu yazılarda durum seçimi metnin az çok profesyonel ve cilalı görünmesine neden olabilir, ancak durum kendini kelimelerin anlamsal anlamını değiştirmez . Bu yüzden geliştiricilerin büyük küçük harf duyarlı bir komut dosyası dili ile karıştırılmayacağına inanıyorum.

Yine, bu teknik bir seçim değil. Hedef kitleyi iyi bilen insanlar tarafından yapılması gereken bir ürün yönetimi seçeneğidir.


Programlama dillerine bakmadan önce hangi dosya sistemlerinin büyük / küçük harf duyarlı olduğunu düşünün. Windows için FAT / NTFS ve MacOS X için HFS + her ikisi de büyük / küçük harf duyarlı değildir, Unix için UFS / NFS büyük / küçük harf duyarlıdır. Güçlü kullanıcılar, dosyaları / değişkenleri küçük farklarla ayırt etme becerisi kazanırken, çoğu kullanıcı işleri daha sezgisel tutmayı tercih eder. Avner’in dediği gibi, fark ürün yönetimi tercihi.
Michael Shopsin

4
Bir betik dili olduğu için, hiç akıllıca olmaz - büyük küçük harf duyarlılığı gitmenin yoludur. Neden büyük / küçük harfe duyarlı olmalısınız? Cevap "C ve Java gibi olmak" ise, bu gerçekten iyi bir neden mi?
Ben

15
@ Ben Python, Ruby, bash, Lua ve Perl, büyük / küçük harfe duyarlı komut dizileri dillerinin örnekleridir. Büyük / küçük harf duyarsız diller, Delphi ve SQL gibi girişimsel dilleri (ve eğer sayıyorsanız COBOL IIRC) içerir. Neden betik dili yazmak hiç akıllıca değil ve neden dünyanın en büyük betik dili tasarımcıları aynı fikirde değil?

2
Bir betik dili olduğu için hiç akıllıca olamaz - ilgili soru şudur: senaryoyu kim yapıyor ve onlar için en iyi seçenek nedir? (Ben de muhtemelen tutarlı olması gerektiğini diyecekler: Anahtar kelimeleriniz harf duyarsız ise, lütfen tanımlayıcılar harf duyarlı yapmazlar ...)
comingstorm

@delnan Büyük / küçük harfe duyarlılığın yerleşik olduğu işletim sistemini hedefleyen komut dosyası dilinin de büyük / küçük harf duyarlı olması gerektiğini düşünüyorum.
Artemix

16

Sunmak istediğiniz kullanıcı deneyimine dayanarak karar vermelisiniz, ne kadar kolay ya da zor değil.

Kullanıcılarınızın büyük / küçük harf duyarlılığına sahip olmamasını kolaylaştıracaksa, uygulamanız gereken budur.

Bir noktada SQL, büyük / küçük harf duyarlı değildir. Bu etkileşimli bir ortamda kullanımı çok kolaylaştırır.

Bu bakmak için başka bir yol yoktur hiç arasında bir fark olacaktır keywordve Keywordkendi dilinizde ve bu fark kullanıcıya anlamlı olacak? Bir betik dili için cevabın "hayır" olduğunu söyleyebilirim.


3
"Bu fark kullanıcı için anlamlı olur mu" için +1. Kullanıcı her şeyden önemli.
Ben

SQL, büyük küçük harf duyarlılığı nedeniyle etkileşimli bir ortamda neden daha kolay kullanılır? Yanlışlıkla Caps Lock'u açıp not almamanız için mi?
Kaz

@Kaz - Çok fazla.
ChrisF

11

Programlama dilleri büyük / küçük harfe duyarlı olmalıdır. İnsanlar bunu çok kolay bir şekilde ayarlayabilirler: basitçe çoğunlukla küçük harflerle çalıştıklarını ve mevcut API'lerde karma durumdaki veya tümü büyük harf tanımlayıcılarına dikkat etmeleri gerektiğini hatırlatmaları gerekir.

Bir zamanlar dilleri büyük-küçük harf duyarlı hale getirmek açıktı. Bunun nedeni, küçük harflerin tüm bilgisayar sistemlerinde ve bunların G / Ç aygıtlarında (klavyeler, yazıcılar ve ekran aygıtları) bulunmamasıdır. Programlama dili uygulamaları, yalnızca gösterilebilecek veya yazdırılabildiğinden büyük harfle yazılmış programları kabul etmek zorunda kaldı. Ve bunun için büyük / küçük harf duyarsız olmaları gerekiyordu, çünkü büyük harfleri kabul etmek ve aynı zamanda büyük / küçük harf duyarlı olmak, küçük harfleri reddetmek anlamına geliyor. Küçük harf, programcıların istediği bir şeydi ancak her zaman olamazdı. Hiç kimse gerçekten büyük harfle bağıran programlarla çalışmak istemedi; sadece bir donanım sınırlamasıydı.

Bir süre, terminallerde kılıf katlama yapılması bile yaygındı. Bir terminal yalnızca büyük harf gösterebilirse, ancak büyük ve küçük harfleri destekleyen bir hesaplama sistemine giriş yapmanız gerekiyorsa, terminal küçük harfleri büyük harfe katlar. Sence bu çok mu uzun zaman önceydi? "Apple II'de olduğu gibi, Apple II Plus'da da küçük harf işlevi yoktur." (http://en.wikipedia.org/wiki/Apple_II_Plus) İlk Apple bilgisayarlarının kullanıcıları karışık içerikli bir BBS'ye çevrildiğinde, terminal emülatörü (veya ana bilgisayar) hepsini büyük harfe katlamak zorunda kaldı. Tüm büyük harflerle yazılmış mesajlar o günlerde ilan panolarında yaygındı. Bu işlevsellik hala Linux çekirdeği gibi Unix benzeri işletim sistemlerinde bulunur. Örneğin,stty olcuc kabuk isteminize şunu yazın.Unix tty çizgi disiplini, küçük harfleri çıkışta üste doğru ve büyük harfleri girişe kadar düşürebilir. Bu, küçük harf programlama dilinde, küçük harf olmayan bir terminal üzerinde çalışmanıza izin verir.

Büyük / küçük harfe duyarsızlık, modernize edilmiş bilgisayarların modern dünyasında çok iyi çalışmayan eski bir bilgisayar çağından kalma modası geçmiş bir kavramdır. Bunu diğer dillere mi genişletiyorsun? Peki ya Fransızca: È ve è'nin eşdeğer olduğunu düşünüyor musunuz? Veya Japonca? Hiragana ve katakana'nın sadece vakalar olduğunu düşünüyor musunuz, böylece フ ァ イ ル ve ふ ぁ い る aynı tanımlayıcılar mı? Bu tür bir aptallık desteği, tüm Unicode alanı için büyük / küçük harf eşdeğer haritalarına sahip olacak olan sözcük çözümleyicinizi büyük ölçüde karmaşıklaştıracak.

Matematiğin büyük / küçük harfe duyarlı olduğunu unutmayın. Örneğin, büyük harf sigması toplamı, küçük harf sigması ise standart sapma gibi başka bir şeyi belirtir. Bu, aynı formülde herhangi bir zorluk yaratmadan meydana gelebilir. (Programlama dili Σ ve σ'ye eşdeğer mi olur?)

İngilizce yazım duyarlıdır. Örneğin, birçok uygun isim, sıradan isimlere ve hatta konuşmanın diğer kısımlarına karşılık gelir. "may" bir fiildir, ancak "May" bir ay veya bir kadının adıdır. Ayrıca, bir kısaltma veya kısaltma küçük harfle yazılmışsa, kafa karıştırıcı olabilir. SAT, skolastik yetenek testi anlamına gelirken, "oturmak", "oturmak" için geçmiş zaman katılımcısıdır. Akıllı insanlar, ayrıntıya dikkat etmeye ve düzgün şekilde büyük harf kullanmaya özen gösterir.

Temel olarak, 1985'ten beri oluşturulan ve büyük / küçük harfe duyarlı olmayan herhangi bir yeni programlama dili, E-POSTALARDA VE İKİNCİ BİR DÜŞÜNCÜ OLMADAN POSTA'DA NEREYE GİDİLECEĞİNDİR?

Diliniz kodu başka bir dile çevirmek için bir kod oluşturma hedefi olarak kullanılmışsa ve diğer dilin büyük / küçük harf duyarlı olması durumunda ne olur? Ayrımı yakalamak için bir şekilde tüm isimleri dönüştürmeniz gerekecek. (Yani bunun teknik bir karar olmadığını ve hedef kitlenin sadece duygusal tercihlerinin meselesi olduğunu iddia etmek saçma).

Dosyalar başka bir işletim sisteminden alındığında, Windows'ta durum ele almanın neden olduğu rahatsız edici sorunlara bakın. Bu teknik bir mesele. Büyük küçük harf duyarlı dosya sistemleri, büyük küçük harf duyarlı olmayanların sahip olmadığı yabancı verilerle ilgili bir sorun yaşamaktadır.

Common Lisp ideal yaklaşıma değindi: sembol adları büyük / küçük harf duyarlıdır ancak belirteçler okunduğunda büyük harfe katlanırlar. Bu araçlar bu belirteçleri foo, fOO, FOOve Footüm göstermektedirler aynı sembol: adı karakter dizesi olarak depolanır sembolü "FOO". Ayrıca, bu davranış yalnızca varsayılan okuma tablosu yapılandırmasıdır. Okuyucu harfleri büyük harfe, küçük harfe, büyük harfe çevirebilir veya koruyabilir. Son iki seçenek büyük / küçük harf duyarlı bir lehçeye yol açar. Bu sayede kullanıcılar maksimum esnekliğe sahiptir.


1
"Peki ya Fransızca: È ve è'nin eşdeğer olduğunu mu düşünüyorsunuz? Veya Japonca? Hiragana ve katakana'nın sadece davalar olduğunu düşünüyor musunuz, böylece フ ァ イ ル ve ふ ぁ い る aynı tanımlayıcılar?" Bu sorunun cevabı "evet" dir ve başkalarının kültürlerinin aptalca olduğunu düşünürseniz aptalca olur.
Ben

Küçük kafanıza patlamaya hazır olun, çünkü diğer insanların kültürlerinin aptalca olduğunu sanmıyorum (dünyanın şu anki olaylarıyla ilgili bazı istisnalar dışında), ancak aynı zamanda フ ァ イ ル ve diğerlerinin de tedavi edilmesinin tamamen mobik olduğunu düşünüyorum. Language same い る bir programlama dilinde aynı tanımlayıcı olarak.
Kaz

@ Bahsedilen kültürleri biliyor musunuz? Kaz'ın ne hakkında konuştuğunu bilseydin, ona aptal diyemezsin.
David Cowden

1
@DavidCowden, Kaz aptallığı denilen hiçbir noktada yok. Birinin tanımlayıcı kullandığı her yerde aynı davayı kullanması gerektiğine katılıyorum. Kana farkı, vaka farkından daha önemlidir, tıpkı aksan farkı, vaka farkından daha önemlidir. Bununla birlikte, sadece duruma göre farklılık gösteren iki tanımlayıcının olması aptalca olduğu gibi, sadece kana veya vurgu ile farklılık gösteren iki tanımlayıcıya sahip olması da saçmadır. Yalnızca kana veya aksan ile farklı olan tanımlayıcıları aynı şekilde ele almaktan farklı kılanları yasaklamak daha mantıklı, ancak onları farklı olarak değerlendirmek çok az mantıklı.
Ben

Yalnızca durum, aksan, kana veya her neyse farklı olan tanımlayıcıları yasaklarsanız, aynı olduklarını (ama yalnızca tutarlılık konusunda ısrar ediyorlar) titizlikle kabul ediyorsunuz. Bu tür şeyleri yasaklamamak ve kodlama sözleşmesi yapmak için kullanıcılara bırakmamak daha iyidir. Daha iyi bir fikir, programın bunu eş anlamlı ya da farklı olarak kabul edebileceği foove Fookabul edeceği bir bildirim sistemine sahip olmak olacaktır . Böyle bir bildirim olmadan, her ikisinin de gerçekleşmesi bir hatadır. Ve bildiri uzatmadığından FOO, o FOOzaman hala yasaktır; eklenmeli.
Kaz

6

Asıl belirleyici faktör, ne kadar sıklıkla aynı ada sahip birden fazla şeye sahip olmak isteyeceksinizdir. Büyük / küçük harf duyarsızlığı SQL'de çalışır, çünkü genellikle bir sütun istemezsiniz SELECT. Java'da can sıkıcı olurdu, çünkü diğer tüm satırlar Object object = new Object()aynı adın bir sınıfa, bir örneğe ve bir yapıcıya başvurmasını istediğiniz yere benziyor .

Başka bir deyişle, büyük / küçük harf duyarlılığı, bir adı aşırı yüklemek için çoğunlukla yararlıdır ve aşırı yükleme, büyük, karmaşık projelerde çoğunlukla yararlıdır. Bir kodlama dili gibi daha seyrek kullanım için, büyük / küçük harf duyarlılığı programlamayı çok daha basit hale getirebilir.

Bir keresinde, tanımlayıcıların sadece büyük / küçük harfe duyarsız olmadığı, beyaz boşluktan duyarsız olduğu bir kural dili yapmıştım. Ayrıca, aynı tanımlayıcıya atıfta bulunan diğer adların oluşturulmasına izin verdim. Örneğin, ProgrammersStackExchange, programcı yığını değişimi ve PSE'nin hepsi aynı sembole çözümlendi ve birbirlerinin yerine kullanılabilir.

Etki alanım için çok iyi çalıştı, çünkü etki alanı aynı şeyi ifade etmek için çok iyi bilinen bir yol kullanıyordu ve isimlendirme çatışmaları nadirdi. Hiç kimse bir isim kullanarak bir sorgu yazarak ve sonucun bir başkasını kullanmasıyla şaşırmaz. Dil desteğinin sağlanması, etki alanı ile programlama dili arasında çeviri yapmayı çok kolaylaştırdı. Bununla birlikte, bir değişkene yapılan tüm referansları bulmak gibi bazı işleri daha da zorlaştırdı. Neyse ki, benim durumumda bu tür durumlar nadiren ortaya çıkıyor ya da yardımcı olacak araç desteği oluşturmak için oldukça kolaydı, ancak kendi durumunuzu hesaba katmanız gerekiyor.


İsimler için anahtar kelimeleri yeniden kullanmak istemenin sorun olduğunu sanmıyorum. SQL, Visual Basic ve C # (eski iki büyük küçük harf duyarlı ve son büyük küçük harf duyarlı) her ikisi de tanımlayıcıları belirtmenin bir yolunu sağlayarak çözer: "double quotes"(veya [brackets]MS SQL'de) SQL'de, [brackets]VB.net'te ve @atsignC #'da.
Random832 24:12

"ne sıklıkta aynı isimde birden fazla şey yapmak isteyeceksiniz?" Büyük / küçük harf duyarsızlığı, aksi durumda ele alınacak adları netleştirmek için bir miktar ek eklemeniz gerektiği anlamına gelir (örneğin, 'üye' nin unprefix özellik adından ayırt edilmesi için bir ön ek olarak).
nwahmaet 24:12

Neden bir nesne nesnesini adlandırıyorsun? Bu sadece sorun istiyor.
Ben

@Ben, bir kapsayıcı nesneyi uyguladığınızı varsayalım, parametreyi add yönteminize başka ne söyleyeceksiniz?
Winston Ewert

@ WinstonEwert, ben arardım o. Gerçekten bir parametre adı olduğu için ne dediğiniz önemli değil. Saldırgan veya yasadışı olmadığı veya karışıklığa neden olabileceği sürece .
Ben

5

Komut dilinizin büyük / küçük harfe duyarlı olacağı varsayılmıştır - değişken adını veya anahtar kelimesini yanlış durumda kullanarak yazım hatası yapıp kullanmadığını söyleyen bir derleyici veya sözdizimi denetleyicisi mi oluşturacaksınız? Olmazsa, bu dil olayını duyarsız hale getirmek için çok güçlü bir argüman olacaktır.


İyi nokta, ama bir cevap değil.

@delnan: belki Avner Shahar-Kashtan'dan (+1 verdiğim) gelen cevap kadar iyi bir cevap değil, muhtemelen OP için yardımcı.
Doktor Brown

3
Evet, yorum olarak yardımcı olur;)

Öyleyse bu, kullanıcıyı büyük / küçük harfe duyarlılık konusunda uyarırsanız bunun iyi bir fikir olduğunu söylemek gerekirse, bir cevap olur mu? Bana göre, bu varsayıldı.
JeffO

Hayır, o zaman cevap olarak ifade edilen soruyu yanıtlayan zor bir nokta olurdu. BENİM NACİZANE FİKRİME GÖRE.

4

Değişkenleri anında bildirir misiniz? Öyleyse, büyük / küçük harfe duyarlı olmama karşı savunuculuğa neden olurdum.

ATypo = 42; 

aksine

Atypo = 42; 

Gereksiz yere hata ayıklama süresi istiyor, iki ifadenin eşdeğeri olması hayatı kolaylaştırıyor.


2
IMHO da okumayı kolaylaştırıyor. Ne de olsa bir cümleyi başlattığınızda, ilk kelimeyi büyük harf yaparsınız, fakat anlamını değiştirmezsiniz. Aynı kod için olmalı!
NWS

2
@delnan - okunabilirliği istedin, aynı alfabeyi kullanıyor, büyük / küçük harf değiştirirken neden anlamını değiştirmelisin?
NWS

1
@delnan, Amerika Birleşik Devletleri Yüksek Mahkemesine göre, bilgisayar dilleri hem bilgisayarlar hem de insanlar tarafından anlaşılmak üzere tasarlanmış bir ifade dilidir (bilgisayar kodunun ilk değişiklik tarafından korunmasına karar verdiğinde). İngilizce değiller, fakat onlar bir dil ve “BOB” un “bob” dan farklı olduğunu söylemek “Bob” dan farklı, insanlar tarafından kullanılması amaçlanan herhangi bir dilde aptalca. Evet, bununla başa çıkmayı öğrenebiliriz, ancak bu hiçbir şekilde mazeret değildir.
Ben

2
@Ben Bir benzetme yapmama izin verin. Matematiksel gösterim, programlama dillerinin aksine, sadece insanlar içindir. Dava duyarsızlığının, eski bilgisayarların tarihi bir eseri olduğu genel argümanı burada geçerli değildir. Yine de, herhangi bir matematikçinin, bunun değiştirilebilir ave Adeğiştirilebilir olması gerektiğini savunacağından şüpheliyim . İstisnasız, sürekli dava açıyorlar. Örneğin, bazı durumlarda büyük harfler kümeler için kullanılırken küçük harfler küme üyeleridir. Başka bir örnek, elektrik mühendisliği alt durum oluştuğunda olmanın zamana bağlı ve büyük harf olmak zamandan bağımsız ...

2
@Ben ... bu ve diğer bağlamlarda, büyük / küçük harf duyarlılığını bir kısıtlama olarak görmüyorum. Başka araçların yanı sıra, büyük harflerle anlam ifade eden sözleşmelerle, daha verimli bir şekilde kullanılmak üzere fazladan sembolleri serbest bırakmak olarak görüyorum. Herhangi bir kısa süreli etki alanına özgü gösterimde olduğu gibi, bu meslekten olmayan kişiye görünebilir, ancak uzmanların daha iyi ve daha hızlı iletişim kurmasını sağlar.

2

FORTRAN, BASIC, SQL gibi dillerin örnekleri, bunların büyük / küçük harf duyarlı olmadığını söyleyerek verilmektedir.

FORTRAN ve SQL (ve COBOL) 'un küçük harf duyarsız olmasının nedeni, normal karakter kümelerinin yalnızca büyük harflere sahip olduğu makinelerde kullanılmak üzere tasarlandıklarıdır. Bu dillerdeki büyük küçük harf duyarlılığı (en azından), bir dil tasarım seçiminden çok daha eski bir eserdir.

Şimdi, daha fazla affedici olanın duyarsızlığının olduğunu iddia edebilirsin, ama bunun ters tarafı, vaka duyarlılığının, daha okunabilir bir kodla sonuçlanabileceğidir;


4
"X iyidir, Y ilgili Z'yi zorlar, bu nedenle Y, X'i zorlayarak iyi yapar" argümanından bıktım (örneğin akıllı kodlama stili / Python / ofsayt kuralı). Hiçbir iyi programcı izin verilse bile okunabilirliği ciddi şekilde etkileyecek şekilde büyük harf kullanmaz. Kötüye kullanım davalarına duyarsızlık yapanlar da büyük / küçük harfe duyarlı bir ortamda tutarsız bir şekilde büyük harf kullanmaktadırlar (ve yüz başka vahşet işliyorlarsa), tek bir ismin her kullanımı için aynı kötü büyük harf kullanmak zorunda kalıyorlar. Kötü programcılar Fortran'ı herhangi bir dilde yazabilir. (Feragatname: Büyük / küçük harf duyarlılığı hayranıyım!)

Bil bakalım ne oldu. Kendi özel stil kurallarını geliştirebilecekleri kadar iyi programcılar olduklarını düşünen kötü programcılar tarafından yazılmış kodları okumaktan bıktım. (Feragatname: FORTRAN ve COBOL günlerinde program yapmayı öğrendim ve o döneme ait dava duyarsızlığı ve diğer dilsel vahşetten de korkuyorum.)
Stephen C

Büyük / küçük harfe duyarsız bir dilde herhangi bir şekilde büyük harf kullanımı duyarsızlığın kötüye kullanılmasıdır.
Kaz

@Kaz - erm ... bunu bir milyon SQL programcısına anlatmaya çalışın.
Stephen C

1

Büyük küçük harf duyarlılığı zararlı olarak kabul edildi.

Yaşam büyük / küçük harfe duyarlı değildir ve kullanıcılar veya programcılar da değildir.

Büyük / küçük harfe duyarlı diller, büyük / küçük harfe duyarlı olmayan karşılaştırmaları zorlaştıran kısıtlı sistemlerin tarihi bir kazasıdır. Bu handikap artık yok, bu yüzden bir daha büyük küçük harf duyarlı bilgisayar sistemi yapmak için hiçbir sebep yok.

Büyük küçük harf duyarlılığının kötü olduğunu söyleyecek kadar ileri giderdim , çünkü bilgisayarın rahatlığını kullanıcınınkinden daha önce gösteriyor.

(İlgili, birkaç yıl önce hatırladım, bazı dahi, kredi kartı faturasını ödemeyi reddetti, çünkü adı büyük harfliydi, ancak karışık dava yazdı. Ödeme için geçerli bir talep: Hakim, iddiaya hak ettiği gibi davrandı.


Büyük / küçük harf duyarlılığı, bilgisayarın rahatlığını kullanıcınınkinden daha önce koymaz. Büyük / küçük harfe duyarlı ve büyük / küçük harf duyarlı diller kullandım ve tek fark birkaç yerde ek bir işlev çağrısı. Ayrıca, diğer cevaplar durumda olduğunu söylemek de -Hassasiyet nedeniyle sınırlı karakter kümelerine bir tarihi eser olduğunu - Teorin çelişen, öyle değil mi?

Unicode bunu başka bir alemin içine koyar.
DeadMG

3
Bu blog neden C’de, sadece Python veya PHP’de kötü olduğu konusunda bir haklı göstermiyor ve OP büyük / küçük harf duyarlı tanımlayıcılardan, sadece anahtar kelimelerden bahsetmiyor . Bu bağlantının kesinlikle bu konuda söyleyecek hiçbir şeyi yok.
DeadMG

1
@Ben Editörler, dilin kurallarından bağımsız olarak yazarken kasayı düzeltebilir (ve yapabilir). Yine de kaymasına neden olan hatalara izin vermek (örneğin elinizin altında bir fantezi editörünüz olmadığı için) yardımcı olmaz. Düzeltmek için şikayet etmek yerine, etrafta bir problem bırakmak anlamına gelir. Dahası, tutarlı bir büyük harf kullandığımda, durum bakımından farklı olan birden fazla tanımlayıcıya sahip olabilirim, ancak çok farklı şeyleri belirtip, bağlam ve büyük harf kullanımı sayesinde, belirsizlik olmadan insanlar için ayrıştırılması kolay olabilir.

2
@Ben: Bazı dillerde çok katı sözlükbilimi gelenekleri ve hatta kuralları vardır. C ve C ++ 'da kapaklar bir makrodur ve karmaşayı önlemek için makrolar kapaklar olarak kalmalıdır. Bazı dillerin, ilk kapağı olan veya olmayan simgeler için farklı anlamları vardır (ve karşılık gelen büyük ve küçük harflere sahip olmayan çeşitli dillerde ne kadar iyi yaptıklarını bilmiyorum). Bunun gibi kurallarınız veya kurallarınız varsa, farklı ad alanlarının etkisinden bir şey alırsınız ve farklı ad alanlarındaki tanımlayıcı adlarını çoğaltmak genellikle işe yarar.
David Thornley

1

Kişisel deneyimime göre, büyük / küçük harfe duyarlı ve duyarsız diller arasında büyük bir fark görmüyorum.

Daha da önemlisi, bir programcının kodunda tutması gereken ve derleyici ya da çözümleyici olmayanlar tarafından kontrol edilmesi gereken adlandırma ve yapısal kurallardır. Bazı kurallara sadık kalırsanız, kolayca uygun bir isim bileceksiniz (değişken checkOut veya CheckOut değişkenini seçtiğinizi düşünmezsiniz) ve kodunuz büyük / küçük harf duyarlı ve okunması kolay olacaktır.

Kişi aynı şekilde CheckOut ve checkOut ve checkout ve cHeCkOuT ve CHECKOUT kullanmamalı. Okunabilirliğe zarar verecek ve bu tür kodların daha acı verici bir şekilde anlaşılmasını sağlayacaktır (ancak kodun okunabilirliğini yok etmek için yapılabilecek daha kötü bir şey vardır).

Bir tür kural kullanırsanız, örneğin göreceksiniz:

CheckOut.getInstance () - checkOut.calculate () adında bir sınıfın statik yöntemidir - değişken veya genel alanda _checkOut.calculate () adı verilen bir nesnenin yöntemidir - CHECKOUT adlı özel alanda tutulan bir nesnenin yöntemi - bu bir son statik veya sabit alan / değişken

diğer bazı dosyaları veya dosyanın parçalarını kontrol etmeden. Daha hızlı okuma kodu yapar.

Benzer kuralları kullanan pek çok geliştirici görüyorum - sıklıkla kullandığım dillerde: Java, PHP, Action Script, JavaScript, C ++.

Nadir bir durumda, büyük / küçük harf duyarsızlığı konusunda öfkeli olabilir - örneğin, bir sınıf adı için CheckOut kullanmak ve bir değişken için checkOut kullanmak istediğinizde ve birbiriyle çarpıştığı için olamaz. Ancak, hassasiyeti korumak ve onu adlandırma kurallarında kullanmak için kullanılan bir programcının sorunu. Birinin büyük / küçük harf duyarlı olmayan bir dilde standart önek veya sonek ile kuralları olabilir (VB'de programlamıyorum ancak birçok VB programlayıcısının bu tür adlandırma kurallarına sahip olduğunu biliyorum).

Birkaç kelimeyle: Büyük / küçük harf duyarlılığını daha iyi görüyorum (sadece nesne yönelimli diller için) çünkü geliştiricilerin çoğu büyük / küçük harf duyarlı dilleri kullanıyor ve çoğu büyük küçük harf duyarlılığına dayalı adlandırma kuralları kullanıyor, böylece büyük / küçük harf duyarlı olmak için daha iyi bir dil istiyorlar. Bir tür değişiklik yapmadan kendi kurallarına sadık kalabiliyorum. Ancak bu, oldukça dini bir argümandır - nesnel bir değil (gerçek dezavantajlara veya dava duyarlılığının iyi yanlarına dayanmaz) - çünkü iyi bir geliştiriciye gelince, bir bAd DeVeLoPeR söz konusu olduğunda, kabusun kodunu üretebilecek bir şey göremiyorum. Büyük küçük harf duyarlılığı olsa bile, bu büyük bir fark değil.


1

Programlama dilleri büyük / küçük harf duyarlı olmamalıdır.

Bu günlerde birçok dilin ana nedeni büyük / küçük harf duyarlıdır, basitçe kargo kültü dil tasarımıdır: "C böyle yaptı ve C inanılmaz derecede popüler, bu yüzden doğru olmalı." Ve diğer pek çok şeyde olduğu gibi, C de bunu belirgin bir şekilde yanlış yaptı.

Bu aslında C ve UNIX'in ardındaki itici felsefenin bir parçasıdır: Uygulanması kolay olan kötü bir çözüm ile uygulanması daha zor olan iyi bir çözüm arasında bir seçeneğiniz varsa, kötü çözümü seçin ve etrafınızdaki çalışma yükünü zorlayın Kullanıcı. Bu snark gibi gelebilir, ama kesinlikle doğru. "En kötüsü daha iyi ilke" olarak bilinir ve son birkaç on yılda milyarlarca dolarlık zarardan doğrudan sorumludur, çünkü C ve C ++, aksaklık ve güvensiz yazılım yazmayı çok kolay hale getirmiştir.

Bir dil vakasını duyarsız hale getirmek kesinlikle daha kolaydır; Herşeyin büyük / küçük harfe duyarsız bir şekilde eşleşmesini sağlamak için ek iş yapmak zorunda kalmadan, lexer, parser ve sembol tablolarına ihtiyacınız yoktur. Ancak iki nedenden ötürü de kötü bir fikir:

  • Öncelikle, özellikle bir betik dili oluşturuyorsanız, bir yerde bir yerde "myObject" ve diğerinde "MyObject" olarak adlandırdığınız, açıkça aynı nesneye atıfta bulunduğunuz ancak büyük harfle biraz tutarsızlaştığınız basit bir yazım hatası , bir çalışma zamanı hatasına dönüşmez. (Bu Python gibi yanlış anlayan betik dillerinde büyük bir acı noktası olarak rezildir.)
  • İkincisi, büyük / küçük harfe duyarlılığa sahip olmamak , büyük / küçük harf değiştirmek suretiyle büyük / küçük harf duyarlılığının , aynı kelimenin aynı kapsamdaki iki farklı şeyi ifade etmesiyle kötüye kullanılamadığı anlamına gelir . Eğer bir C ortamında Windows koduyla çalışmak zorundaysanız ve bunun gibi çirkin bildirimlere maruz kaldıysanız HWND hwnd;, tam olarak neden bahsettiğimi anlayacaksınız. Böyle yazması gerekenler dışarı atılıp vurulmalı ve dili büyük / küçük harfe duyarsız hale getirmek büyük / küçük harf duyarlılığı kötüye kullanımının kodunuza girmesini önler.

Öyleyse doğru yapmak için ekstra çaba gösterin. Sonuçta ortaya çıkan kod daha temiz, okunması kolay, daha az paramparça olacak ve kullanıcılarınızı daha üretken kılacak, ve bu herhangi bir programlama dilinin asıl amacı değil mi?


Programlama dilleri, çalışma zamanından önce bu tür hatayı yakalamak için sözcüksel kapsamda olmalıdır (aksi halde oldukça dinamik olsalar bile). Common Lisp oldukça dinamik bir dildir, ancak derleyiciler bize sözcüksel bağlantısı olmayan ve genel olarak dinamik bir değişken olarak tanımlanmayan bir değişken kullandığımızı söyler. Bunun için büyük / küçük harfe duyarsızlığa güvenemezsiniz, çünkü sadece da dahil olmak üzere tüm yazım hatalarını yakalamak istiyorsunuz.
Kaz

Önemli değil HWND hwnd;. Bu, vaka duyarlılığının iyi çalıştığı bir örnektir. Tüm kapaklar "Indian Hill" kongre türü olsa da saçma. hwnd_t hwnddaha iyi. Hepsi yüzünden olduğundan şüpheleniyorum FILE. Sürüm 6 Unix I / O kütüphane başlık dosyasında bu vardı bir zamanlar: #define FILE struct _iobuf. Tüm kapaklardaydı çünkü bir makroydu. ANSI C'de bir typedef haline geldiğinde, tüm büyük harf yazımları korunurdu. Ve ALL_CAPS_TYPE kongresinin icat edildiğini ve Bell Laboratuvarı "Hint Tepesi Tarz Rehberi'nde kodlandığını düşünüyorum. (Orijinali!)
Kaz

Eğer şimdi "Indian Hill Style Guide" için google’a gidecekseniz, çoğu zaman tüm büyük harflerle typedef adlarını tevbe eden Bell Labs’tan 1990’a ait bir belge buluyorsunuz: bu tür bir öneri bulunmuyor. Ancak orijinal sürüm gibi şeyler tavsiye etti typedef struct node *NODE. Microsoft'un bu konuda bilgi topladığı yerin burası olduğuna eminim. Bu yüzden, Bell Labs'ı suçluyorsun HWND.
Kaz

1

Birisinin "büyük küçük harf duyarlılığının kod okumayı kolaylaştırdığını" söylediğine inanamıyorum.

Kesinlikle hayır! Bir iş arkadaşının omzuna Şirket ve şirket (halka açık değişken Şirket, özel değişken şirket ile eşleşmiş şirket) adı verilen değişkenlere baktım ve yazı tipi ve renk seçimi, ikisi arasındaki farkı söylemeyi zorlaştırıyor - birbirlerinin yanındayken bile.

Doğru ifade, "karma harf, okuma kodunu kolaylaştırır" olmalıdır. Bu çok daha açık bir gerçektir - örneğin, şirket ismi yerine Şirket Adı ve Şirket Adresi olarak adlandırılan değişkenler. Ancak bildiğim hiçbir dil sizi yalnızca küçük harfli değişken isimleri kullanmaz.

Bildiğim en çılgınca kongre "büyük, küçük, özel". Sadece sorun istiyor!

Benim hatam benim "birşeyin sessizce başarısız olmaktan ziyade en kısa sürede başarısız olması ve başarılı görünmesi daha iyi" dır. Ve derleme zamanından daha erken olamaz.

Büyük harf kullanmak istediğinizde yanlışlıkla bir küçük harf değişkeni kullanırsanız , aynı sınıfa atıfta bulunuyorsanız , genellikle derlenir . Bu nedenle, hem derleme hem de çalışma zamanında başarılı olmuş gibi görünüyorsunuz, ama ustaca yanlış bir şey yapıyor olabilirsiniz ve belki de uzun süredir bulamıyorsunuzdur. Yanlış bir şey olduğunu tespit ettiğinde

Özel değişkenin sonekinin olduğu bir sözleşmeyi kullanmak çok daha iyi - örneğin, Şirket genel değişkeni, ŞirketP özel değişkeni. Hiç kimse yanlışlıkla ikisini karıştırmayacak ve birlikte istihbaratta ortaya çıkacaklar.

Bu, insanların önceden tanımlanmış bir özel değişken olan pCompany'in intellisesne'de iyi bir yerde görünmeyeceği Macar gösterisine itiraz etmesiyle karşı çıkan bir itiraz ile çelişmektedir.

Bu kongre, korkunç büyük / küçük harf konvansiyonunun tüm avantajlarına sahiptir ve sakıncaları yoktur.

İnsanların değişkenler arasında ayrım yapmak için büyük / küçük harf duyarlılığına itiraz etme ihtiyacı duymaları gerçeği, bence hem hayal gücü eksikliği hem de sağduyu eksikliği olduğunu göstermektedir. Ya da ne yazık ki, insan koyunu bir kongre izlemeyi alışkanlık gibi çünkü "her zaman böyle yapılır"

Birlikte çalıştığınız şeyleri, birbirleriyle alakalı olsalar bile, birbirlerinden açıkça ve açıkça farklı yapın!


1
Tamam, öyleyse companyName == companyname. Bu mantıklı gözüküyor, ama yerelleri nasıl idare ediyorsunuz? Programınızı dünyanın farklı yerlerinde derlemek, PHP'de olduğu gibi farklı anlamlara neden olur mu? Tamamen Anglo merkezli olacak ve sadece tanımlayıcılardaki ASCII yazdırılabilir setini destekleyecek misiniz? Büyük küçük harf duyarlılığı çok az ekstra kazanç için çok fazla bir karmaşıklıktır.
Phoshi

0

Bunu yapmak için çok iyi bir neden olmadan büyük küçük harf duyarsızlığı yaratmamalısınız. Örneğin, Unicode ile vaka karşılaştırmalarıyla başa çıkmak bir orospu olabilir. İhtiyaçlarının çok farklı olması nedeniyle, eski dillerin durum duyarlılığı (veya eksikliği) önemsizdir .

Bu dönemde programcılar büyük / küçük harf duyarlılığı bekliyorlar.


1
Vaka karşılaştırmaları o kadar zor değil. Sadece tanımlayıcılarını parçala. E = '= E' = e. Unutmayın, hangi dava kurallarının izleneceğini hala seçebilirsiniz ve İngilizce makul bir seçimdir. (anahtar kelimeleriniz de İngilizce ise kesinlikle)
MSalters

2
Evet, tüm Unicode alanı boyunca "bu kadar zor".
Kaz

1
"Bu dönemde programcılar büyük / küçük harf duyarlılığı bekliyorlar"? Yalnızca, C ailesi ile uzun süre çalışmış olan Stockholm Sendromu varsa.
Mason Wheeler

Şey, C ailesi sadece dillerin ve kodların çok büyük bir kısmını oluşturur. Ayrıca, bence bu iyi bir şey ve yorumunuz neden olmasın diye bir sebep önermiyor.
DeadMG

0

Büyük küçük harf duyarlılığı kodu daha okunaklı hale getirir ve programlamayı kolaylaştırır.

  • İnsanlar karışık durumun uygun kullanımını okumayı daha kolay buluyorlar .

  • CamelCase'e, farklı harflerle aynı kelimenin ilgili şeylere atıfta bulunabileceği şekilde izin verir / teşvik eder: Car car; Böylece adlandırılan değişken cartürden yaratılır Car.

  • ALL_CAPS_WITH_UNDERSCORES, birçok dilde sözleşmeye göre sabitleri belirtir

  • all_lower_with_underscores üye değişkenler veya başka bir şey için kullanılabilir.

  • Tüm modern programlama araçları (kaynak kontrolü, editörler, diff, grep, vb.) Büyük / küçük harf duyarlılığı için tasarlanmıştır. Sonsuza dek büyük / küçük harf duyarsız bir dil yaparsanız, programcıların alması gereken araçlarla ilgili sorunlar yaşıyorsanız sonsuza dek yaşayacaksınız.

  • Dil yorumlanacaksa, kodun duyarsız ayrıştırılması durumunda performans cezası olabilir.

  • İngilizce olmayan karakterlerden ne haber? Şimdi, Kıpti, Çince ve Hintçe'yi asla desteklemeyeceğine mi karar veriyorsun? Dilinizi her şeyi UTF-8 olarak varsayılan olarak ayarlamanızı şiddetle tavsiye ediyorum ve bu, büyük veya küçük harf eşdeğeri olmayan karakterleri olan bazı dilleri destekliyor. Bu karakterleri anahtar kelimelerinizde kullanmayacaksınız, ancak çeşitli araçlardaki büyük harf duyarlılığını kapatmaya başladığınızda (örneğin, dosyalardaki şeyleri bulmak için), bazı gerçeküstü ve muhtemelen hoş olmayan deneyimler yaşarsınız.

Fayda ne? Bahsettiğiniz 3 dil, 1970'lerden veya daha önceki dillerden. Hiçbir modern dil bunu yapmaz.

Öte yandan, son kullanıcıyı gerçekten mutlu eden her şey dünyaya biraz ışık tutuyor. Kullanıcı mutluluğunu gerçekten etkileyecekse, o zaman yapmanız gerekir.

Son kullanıcılar için gerçekten kolaylaştırmak istiyorsanız, büyük / küçük harfe duyarlılık / duyarsızlıktan daha iyisini yapabilirsiniz - Scratch'a bir göz atın ! Birkaç tane daha az karikatür kedi ve daha fazla iş dostu renkler ve şimdiye kadar gördüğüm en cana yakın dilin var - ve hiçbir şey yazmanıza gerek yok! Sadece bir düşünce.


1
"Büyük-küçük harfe duyarsızlık bir kabustur" demek istediğini düşünüyorum. Japonların bir vakası var: hiragana ve katakana, bir nevi farklı vakalardır. Aynen A ve a gibi belli bir şekilde "aynı" dır, yani あ ve ア. Katakana bazen vurgu için kullanılır, aynı şekilde roma alfabesini kullanan dillerdeki büyük harf. Söylemeye gerek yok, hiragana ve katakana'ya programlama dili tanımlayıcılarında olduğu gibi davranmak aptallık olur.
Kaz

Teşekkürler - bu zenginleştirici! Görevimi biraz temizledim.
GlenPeterson

1
Car car;büyük / küçük harfe duyarlılığa karşı en iyi argümanlardan biridir : çirkin ve diliniz büyük / küçük harf duyarlı değilse, büyük / küçük harf duyarlılığını bu şekilde kötüye kullanamazsınız.
Mason Wheeler

1
Mi Car myCar;çok daha iyi?
GlenPeterson

@Mason Wheeler: Dil yapılarımızı kötüye kullanamayacaklarımızla sınırlandırırsak, fazla bir şey yapamayacağız, değil mi? Büyük / küçük harf duyarlılığını kötüye kullananlara tavsiyem "Yapma" dır.
David Thornley
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.