it-swarm.dev

Değişken adlarında Unicode karakterleri kullanmak kötü mü?

Geçenlerde Python 3) bir sıralama algoritması AllegSkill uygulamaya çalıştım.

Matematik şu şekilde görünüyor:

alt text

Hayır, gerçekten.

O zaman ben yazdım:

t = (µw-µl)/c  # those are used in
e = ε/c        # multiple places.
σw_new = (σw**2 * (1 - (σw**2)/(c**2)*Wwin(t, e)) + γ**2)**.5

Aslında Python 3 kabul etmemenin talihsiz olduğunu düşündüm veya ² değişken adları olarak.

>>> √ = lambda x: x**.5
  File "<stdin>", line 1
    √ = lambda x: x**.5
      ^
SyntaxError: invalid character in identifier

Aklımdan çıkmış mıyım? ASCII sürümü için başvurmuş muydum? Neden? ASCII sadece yukarıdaki sürümün formüllerle denkliğini doğrulamak daha mı zor?

Unutmayın, bazı Unicode glifleri birbirine çok benziyor ve bazıları (veya bu is) veya ╦ gibi yazılmış kodlarda anlam ifade edemiyor. Ancak, Matematik veya ok glifleri için bu pek de zor değildir.


İstek başına, ASCII yalnızca sürüm şu satırlarda bir şey olacaktır:

winner_sigma_new = ( winner_sigma ** 2 *
                    ( 1 -
                     ( winner_sigma ** 2 -
                       general_uncertainty ** 2
                     ) * Wwin(t,e)
                    ) + dynamics ** 2
                   )**.5

... algoritmanın her adımı için.

84
badp

Ben sadece σ ile s veya sigma aptalca olacak, beyin ölüleriyle sınırlanacak.

Potansiyel kazanç nedir? İyi, görelim bakalım …

  • Okunabilirliği artırır mı? Hayır, en ufak değil. Öyle olsaydı, orijinal formül şüphesiz Latin harflerini de kullanırdı.

  • Yazılabilirliği geliştiriyor mu? İlk bakışta evet. Ama ikincisinde, hayır. Çünkü bu formül asla değişmeyecek (iyi, “asla”). Normalde kodu değiştirmeye veya bu değişkenleri kullanarak genişletmeye gerek yoktur. Yani yazılabilirlik - sadece bir kez - bir sorun değil.

Şahsen, programlama dillerinin matematiksel formüllere göre bir avantajı olduğunu düşünüyorum: anlamlı, anlamlı tanımlayıcılar kullanabilirsiniz. Matematikte bu normalde durum böyle değildir, bu nedenle tek harfli değişkenlere başvuruyoruz ve bazen onları Yunanca yapıyoruz.

Ama sorun Yunan değil. Açıklayıcı olmayan, tek harfli tanımlayıcılar.

Bu yüzden ya orijinal gösterimi koruyun ... sonuçta, programlama dili yaparsa Tanımlayıcılarda Unicode'u destekliyorsa, teknik bir engel yoktur. Veya anlamlı tanımlayıcılar kullanın. Yunan gliflerini yalnızca Latin glifleri ile değiştirmeyin. Veya Arapça olanlar veya Hintliler.

54
Konrad Rudolph

Şahsen, tekrar yazmak için karakter haritasını getirmek zorunda kodu görmek nefret ediyorum. Unicode algoritmadakilerle yakından eşleşse de, okunabilirliği ve düzenleme yeteneğini gerçekten incitiyor. Bazı editörlerin bu karakteri destekleyen bir yazı tipi bile olmayabilir.

Bir alternatif hakkında ve sadece üst _ //µ = u ve ascii her şeyi yazmak?

34
TheLQ

Bu argüman, unicodes yazarken veya yunanca harf okumada sorun yaşamadığınızı varsayar

İşte argüman: pi veya dairesel_ratio ister misiniz?

Bu durumda, pi'yi dairesel_ratio'ya tercih ederim çünkü pi'yi ilkokuldayken öğrendim ve pi'nin tanımının tuzuna değer her programcıya iyi yerleştiğini bekleyebilirim. Bu nedenle dairesel_ratio demek için π yazmayı düşünmezdim.

Ancak, ne hakkında

winner_sigma_new = ( winner_sigma ** 2 *
                    ( 1 -
                     ( winner_sigma ** 2 -
                       general_uncertainty ** 2
                     ) * Wwin(t,e)
                    ) + dynamics ** 2
                   )**.5

veya

σw_new = (σw**2 * (1 - (σw**2)/(c**2)*Wwin(t, e)) + γ**2)**.5

Bana göre, her iki sürüm de aynı derecede opak, tıpkı pi veya π, hariç İlkokulda bu formülü öğrenmedim. winner_sigma ve Wwin benim için ya da kodu okuyan ve hiçbiri σw daha iyi yapmaz.

Dolayısıyla, açıklayıcı adlar kullanarak, ör. total_score, winning_ratio, vs, okunabilirliği yalnızca yalnızca Yunanca harfleri telaffuz eden ascii adlarını kullanmaktan daha iyi artıracaktır. Sorun, Yunan harflerini okuyamam değil, ancak karakterleri (Yunanca ya da değil) değişkenin "anlamı" ile ilişkilendiremiyorum.

Yorum yaparken sorunu kesinlikle anladınız: You should have seen the paper. It's just eight pages.... Sorun, değişken adınızı okunabilirlik yerine tek harfli isimler (Yunanca olup olmadıklarına bakılmaksızın) için seçen bir kağıda dayandırmanız durumunda, insanların harfleri bir ile ilişkilendirmek için kağıdı okuması gerekir "anlamına gelen"; Bu, insanların kodunuzu anlamaları için yapay bir engel koyduğunuz anlamına gelir ve bu her zaman kötü bir şeydir.

Yalnızca ASCII dünyasında yaşıyor olsanız bile, her ikisi de a * b / 2 ve alpha * beta / 2, height * base / 2, üçgen alan formülü. Formül karmaşıklığı arttıkça ve AllegSkill formülü kesinlikle önemsiz bir formül olmadığından, tek harfli değişkenlerin kullanılmasının okunamazlığı katlanarak artar.

Tek harfli değişken, basit tek döngü sayacı olarak kabul edilebilir, ister Yunan tek harfli ister ascii tek harfli olsun, umrumda değil; başka hiçbir değişken yalnızca tek bir harf içermemelidir. Adlarınız için Yunan harfleri kullanmanız umrumda değil, ancak bunları kullandığınızda, başka bir yerde rastgele bir kağıt okumaya gerek kalmadan bu adları bir "anlam" ile ilişkilendirebileceğimden emin olun.

İlkokuldayken, temel aritmetikler için +, -, ×, ÷ gibi semboller kullanarak matematiksel ifadeler görmeyi kesinlikle umursamıyorum ve √ () kare köklü bir işlev olacaktır. İlkokuldan mezun olduktan sonra, yeni ve parlak bir sembol eklemeye aldım: integration entegrasyon için. Trendlere dikkat edin, bunların hepsi operatör. Operatörler, değişken adlarından çok daha fazla kullanılır, ancak tamamen farklı bir anlam için daha az kullanılırlar (matematikçilerin operatörleri yeniden kullandığı durumlarda, yeni anlam hala eski anlamın bazı temel özelliklerini taşır; bu durum böyle değildir değişken adları yeniden kullanılırken).

Sonuç olarak, hayır, değişken adları için Unicode karakterleri kullanmak kötü değildir; ancak, değişken adları için tek harfli ad kullanmak her zaman kötüdür ve Unicode adlarını kullanmasına izin verilmesi, tek harfli değişken adlarını kullanma lisansı değildir.

31
Lie Ryan

Kodu anlıyor musunuz? Okuması gereken herkes mi? Eğer öyleyse, sorun yok.

Şahsen sadece ASCII kaynak kodunun arkasını görmekten memnuniyet duyarım.

14
user4051

Evet, aklını kaçırmışsın. Ben şahsen bir yorumda kağıt ve formül numarası referans ve her şeyi düz ASCII yazmak istiyorum. Daha sonra, ilgilenen herkes kodu ve formülü ilişkilendirebilir.

9
zvrba

Unicode değişken adları kullanarak iki nedenden dolayı kötü bir fikir olduğunu söyleyebilirim:

  1. Onlar yazmak için bir PITA.

  2. Genellikle İngilizce harflerle neredeyse aynı görünürler. Matematik gösterimlerinde Yunanca harfleri görmekten nefret etmemin nedeni de aynı. Rho'yu p'den ayırmayı deneyin. Kolay değil.

5
dsimcha

Bu durumda, karmaşık bir matematik formülü, bunun için git diyebilirim.

20 yıl içinde bu karmaşık ve yunan harfleri asla orijinal matematiğe yakın tutan bir şeyi kodlamak zorunda olmadığımı söyleyebilirim. Eğer anlayamıyorsanız, sürdürmemeniz gerekir.

Eğer bana miras bıraktığınız bataklık standart kodunda µ ve σ tutmak zorunda kalırsam, ben will nerede yaşadığınızı öğreneceksiniz ...

4
gbn
  • Pro: Güzel görünüyor
  • Con: unicode karakterler ve böylece araç zincirindeki tüm anlam kaybolabilir (editör, kod formatlayıcı, sürüm kontrolü, eski derleyici)

Risk sizin için ne kadar büyük? Kazanç riske ağır basar mı?

3

Çok uzak olmayan bir gelecekte, hepimiz Klasik Yunan karakterleri de dahil olmak üzere düzenleme metni yazmayı kolaylaştıran metin editörleri/IDE'ler/web tarayıcıları kullanacağız (Ya da belki hepimiz bunu "gizli" "şu anda kullandığımız araçlarda işlevsellik ...)

Ancak bu gerçekleşene kadar, program kaynak kodunda olmayan ASCII karakterlerin çoğu programcının işlenmesi zor olacaktır ve bu nedenle başka biri tarafından korunması gereken uygulamalar yazıyorsanız kötü bir fikirdir. .

(Bu arada = Python tanımlayıcılarında karekök işaretine sahip olmamanızın nedeni Yunanca karakterlere sahip olmanızın nedeni basittir. Yunanca karakterler Unicode Harfler olarak sınıflandırılır, ancak karekök işareti bir harf değildir; bkz. http://www.python.org/dev/peps/pep-3131/ )

2
Stephen C

Hangi dili/derleyiciyi kullandığınızı söylemediniz, ancak genellikle değişken adları için kural, alfabetik bir karakter veya alt çizgi ile başlaması ve yalnızca alfasayısal ve alt çizgi içermesi gerektiğidir. Bir Unicode al alfasayısal olarak kabul edilmez, çünkü harf yerine matematiksel bir semboldür. Ancak σ (Yunan alfabesinde olduğu için) olabilir ve muhtemelen alfasayısal olarak kabul edilir.

2
tcrosley

Ben de aynı tür bir soru yayınladım StackOverflow

Kesinlikle matematikle ilgili ağır problemlerde unicode kullanmaya değdiğini düşünüyorum, çünkü formülü doğrudan okumayı mümkün kılıyor, bu da düz ASCII ile imkansız.

Bir hata ayıklama oturumu düşünün: Elbette kodun hesaplaması gereken formülü her zaman doğru yazıp yazdığınızı kontrol edin. Ama zamanın yüzde doksanı, rahatsız etmeyeceksin ve böcek uzun, uzun bir süre gizli kalabilir. Ve hiç kimse bu abstruse 7 satırlı, düz ASCII formülüne bakmak istemiyor. Tabii ki, unicode kullanmak tex ile işlenmiş bir formül kadar iyi değil, ama çok daha iyi .

Uzun açıklayıcı isimler kullanmanın alternatifi uygun değildir, çünkü matematikte tanımlayıcı kısa değilse, formül daha da karmaşık görünecektir (XVIII yüzyıl civarında insanlar neden "artı" yı "+" ile değiştirmeye başladığını düşünüyorsunuz? ve "-" tarafından "eksi"?).

Şahsen, bazı abonelikleri ve üstyazıları da kullanırım (sadece kopyala-yapıştır bu sayfa ). Örneğin: (python tanımlayıcı olarak izin verildi had)

√ = math.sqrt #function alias
c² = c**2
σʷ² = σʷ**2
γ² = γ**2
σ′ʷ = √(σʷ² * (1 - (σʷ²/c²)*Wʷⁱⁿ(t, e)) + γ²)

Üst kodları kullandığım yerde, çünkü unicode'da eşdeğer bir alt simge yok. (Ne yazık ki, unicode alt simge karakter seti çok sınırlıdır. Umarım bir gün, unicode aboneliği aksan olarak kabul edilir, yani alt simge için bir karakter ve abonelikli mektup için başka bir karakter kombinasyonu olarak kabul edilir)

Son bir şey, ASCII olmayan karakter kullanma hakkındaki bu konuşmanın öncelikle önyargılı olduğunu düşünüyorum, çünkü birçok programcı asla "formül yoğun matematik gösterimleri" ile ilgilenmiyor. Bu nedenle, bu sorunun o kadar önemli olmadığını düşünüyorlar, çünkü ASCII olmayan tanımlayıcıların kullanılmasını gerektiren önemli bir kod kısmı hiç yaşamadılar. Eğer onlardan biriyseniz (ve yakın zamana kadar), şunu düşünün: "a" harfinin ASCII'nin bir parçası olmadığını varsayalım. O zaman önemsiz olmayan matematik formülleri hesaplanırken hiçbir Yunan harfine, aboneliğine, üstyazısına sahip olmama sorunu hakkında oldukça iyi bir fikre sahip olacaksınız.

1
Bérenger

kişisel olarak programlama dillerini bu bağlamda matematikçiler için bir araç olarak görmeye motive oldum, çünkü aslında hayatımda böyle görünen hiçbir şeyi matematik kullanmıyorum. : D Ve emin olun, neden ɛ veya σ veya başka bir şey kullanmıyorsunuz - bu bağlamda aslında daha fazla okunaklı.

(Bununla birlikte, tercihim, üst simge numaralarını değişken adları değil, doğrudan yöntem çağrıları olarak desteklemek olacaktır. Ör. 2² = 2 ** 2 = 4, vb.)

0
roberto

Bu kod sadece kişisel projeniz için mi? Eğer öyleyse, deli olun, ne istersen onu kullan.

Bu kod başkalarının kullanması içindir mi? yani ve bir çeşit açık kaynak uygulaması? Öyleyse, büyük olasılıkla sadece sorun istiyorsunuz çünkü farklı programcılar farklı editörler kullanıyor ve tüm editörlerin unicode'u doğru bir şekilde destekleyeceğinden emin olamazsınız. Ayrıca, kaynak kod dosyası yazıldığında/cat'd olduğunda tüm komut kabukları doğru şekilde gösterilmez ve html içinde görüntülemeniz gerekiyorsa sorunlarla karşılaşabilirsiniz.

0
GrandmasterB