it-swarm-id.com

Apakah buruk menggunakan karakter Unicode dalam nama variabel?

Saya baru-baru ini mencoba menerapkan algoritma peringkat, AllegSkill, untuk Python 3.

Seperti apa matematika itu:

alt text

Tidak, sungguh.

Inilah yang saya tulis:

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

Saya benar-benar berpikir sangat disayangkan Python 3 tidak menerima atau ² sebagai nama variabel.

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

Apakah saya keluar dari pikiran saya? Haruskah saya menggunakan versi ASCII saja? Mengapa? ASCII hanya versi di atas yang lebih sulit untuk divalidasi untuk kesetaraan dengan rumus?

Pikiran Anda, saya mengerti beberapa mesin terbang Unicode terlihat sangat mirip satu sama lain dan beberapa seperti (atau apakah itu ▗▖) atau ╦ tidak bisa masuk akal dalam kode tertulis. Namun, ini hampir tidak berlaku untuk Matematika atau mesin terbang panah.


Per permintaan, versi ASCII hanya akan menjadi sesuatu di sepanjang baris:

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

... per setiap langkah algoritma.

84
badp

Saya merasa sangat bahwa hanya mengganti σ dengan s atau sigma akan menjadi bodoh, berbatasan dengan mati otak.

Apa potensi keuntungannya? Baiklah, mari kita lihat ...

  • Apakah ini meningkatkan keterbacaan? Tidak, tidak sedikit pun. Jika demikian, formula asli pasti akan menggunakan huruf Latin juga.

  • Apakah ini meningkatkan kemampuan menulis? Pada pandangan pertama, ya. Tetapi pada yang kedua, tidak. Karena rumus ini tidak akan pernah berubah (yah, “tidak pernah”). Biasanya tidak perlu mengubah kode, atau memperpanjangnya menggunakan variabel-variabel ini. Jadi kemampuan menulis - hanya sekali ini - bukan masalah.

Secara pribadi, saya pikir bahasa pemrograman memiliki satu keunggulan dibandingkan rumus matematika: Anda dapat menggunakan pengidentifikasi ekspresif yang bermakna. Dalam matematika, ini biasanya tidak demikian, jadi kami menggunakan variabel satu huruf, terkadang membuatnya menjadi bahasa Yunani.

Tetapi bahasa Yunani bukanlah masalahnya. Pengidentifikasi satu huruf non-deskriptif adalah.

Jadi simpan notasi aslinya ... setelah semua, jika bahasa pemrograman tidak mendukung Unicode dalam pengidentifikasi, jadi tidak ada hambatan teknis. Atau gunakan pengidentifikasi yang bermakna. Jangan hanya mengganti mesin terbang Yunani dengan mesin terbang Latin. Atau yang Arab, atau yang Hindi.

54
Konrad Rudolph

Secara pribadi, saya akan benci melihat kode di mana saya harus membuka peta karakter untuk mengetiknya lagi. Meskipun unicode sangat cocok dengan apa yang ada dalam algoritme, itu benar-benar menyakiti kemampuan membaca dan kemampuan untuk mengedit. Beberapa editor bahkan mungkin tidak memiliki font yang mendukung karakter itu.

Bagaimana dengan alternatif dan hanya memiliki top _ //µ = u dan menulis semuanya dalam ascii?

34
TheLQ

Argumen ini menganggap Anda tidak memiliki masalah dengan mengetikkan unicodes atau membaca huruf yunani

Inilah argumennya: Anda ingin pi atau circular_ratio?

Dalam hal ini, saya lebih suka pi ke circular_ratio karena saya sudah belajar tentang pi sejak saya masih di sekolah dasar dan saya bisa berharap definisi pi sudah tertanam dengan baik untuk setiap programer yang bernilai garam. Karena itu saya tidak keberatan mengetik π berarti circular_ratio.

Namun, bagaimana dengan itu

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

atau

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

Bagi saya, kedua versi sama-sama buram, sama seperti pi atau π adalah, kecuali Saya tidak belajar rumus ini di sekolah dasar. winner_sigma dan Wwin tidak ada artinya bagi saya, atau bagi siapa pun yang membaca kode, dan tidak menggunakan σw tidak membuatnya lebih baik.

Jadi, menggunakan nama deskriptif, mis. total_score, winning_ratio, dll akan meningkatkan keterbacaan jauh lebih baik daripada menggunakan nama ascii yang hanya melafalkan huruf yunani . Masalahnya bukan bahwa saya tidak dapat membaca huruf Yunani, tetapi saya tidak dapat mengaitkan karakter (Yunani atau tidak) dengan "makna" dari variabel.

Anda tentu memahami masalahnya sendiri ketika berkomentar: You should have seen the paper. It's just eight pages.... Masalahnya adalah jika Anda mendasarkan penamaan variabel Anda pada kertas, yang memilih nama satu huruf untuk keringkasan daripada keterbacaan (terlepas apakah mereka Yunani), maka orang harus membaca kertas untuk dapat mengaitkan surat-surat dengan "berarti"; ini berarti Anda menempatkan penghalang buatan bagi orang untuk dapat memahami kode Anda, dan itu selalu merupakan hal yang buruk.

Bahkan ketika Anda hidup di dunia khusus ASCII, keduanya a * b / 2 dan alpha * beta / 2 adalah rendering yang sama-sama buram dari height * base / 2, rumus area segitiga. Ketidak terbaca menggunakan variabel huruf tunggal tumbuh secara eksponensial karena formula tumbuh dalam kompleksitas, dan formula AllegSkill tentu bukan formula yang sepele.

Variabel huruf tunggal hanya dapat diterima sebagai penghitung loop sederhana, apakah itu huruf tunggal Yunani atau huruf tunggal ascii, saya tidak peduli; tidak ada variabel lain yang hanya terdiri dari satu huruf. Saya tidak peduli jika Anda menggunakan huruf yunani untuk nama Anda, tetapi ketika Anda menggunakannya, pastikan saya dapat mengaitkan nama-nama itu dengan "makna" tanpa perlu membaca kertas yang sewenang-wenang di tempat lain.

Ketika di sekolah dasar, saya pasti tidak akan keberatan melihat ekspresi matematika menggunakan simbol seperti: +, -, ×, ÷, untuk aritmatika dasar dan √ () akan menjadi fungsi akar kuadrat. Setelah saya lulus sekolah dasar, saya tidak keberatan dengan penambahan simbol baru yang mengkilap: ∫ untuk integrasi. Perhatikan trennya, ini semua operator. Operator jauh lebih banyak digunakan daripada nama variabel, tetapi mereka lebih jarang digunakan kembali untuk makna yang sama sekali berbeda (dalam kasus di mana ahli matematika menggunakan kembali operator, makna baru sering masih memiliki beberapa sifat dasar dari makna lama; ini bukan kasus untuk ketika menggunakan kembali nama variabel).

Kesimpulannya, tidak, itu tidak buruk untuk menggunakan karakter Unicode untuk nama variabel; Namun, selalu buruk untuk menggunakan nama huruf tunggal untuk nama variabel, dan diizinkan untuk menggunakan nama Unicode bukan lisensi untuk menggunakan nama variabel huruf tunggal.

31
Lie Ryan

Apakah kamu mengerti kodenya? Apakah semua orang yang perlu membacanya? Jika demikian, tidak ada masalah.

Secara pribadi saya akan senang melihat bagian belakang kode sumber ASCII saja.

14
user4051

Ya, Anda tidak waras. Saya pribadi akan merujuk nomor kertas dan formula dalam komentar, dan menulis semuanya dalam ASCII lurus. Kemudian, siapa pun yang tertarik akan dapat mengkorelasikan kode dan rumusnya.

9
zvrba

Saya akan mengatakan menggunakan nama variabel Unicode adalah ide yang buruk karena dua alasan:

  1. Mereka adalah PITA untuk mengetik.

  2. Mereka sering terlihat hampir sama dengan huruf bahasa Inggris. Ini adalah alasan yang sama mengapa saya benci melihat huruf Yunani dalam notasi matematika. Coba ceritakan selain dari hal. Ini tidak mudah.

5
dsimcha

Dalam satu kasus ini, rumus matematika yang rumit, saya akan mengatakan untuk itu.

Saya dapat mengatakan dalam 20 tahun saya tidak pernah harus kode sesuatu yang kompleks dan huruf yunani ini tetap dekat dengan matematika asli. Jika Anda tidak dapat memahaminya, Anda seharusnya tidak memeliharanya.

Mengatakan itu, jika saya harus memelihara μ dan σ dalam kode standar rawa yang Anda mewariskan saya, saya akan mencari tahu di mana Anda tinggal ...

4
gbn
  • Pro: kelihatannya bagus
  • Con: karakter unicode dan seluruh artinya mungkin hilang dalam rantai alat (editor, pemformat kode, kontrol versi, kompiler lama)

Seberapa besar risikonya bagi Anda? Apakah keuntungan melebihi risiko?

3

Suatu saat dalam waktu yang tidak terlalu lama, kita semua akan menggunakan editor teks/IDE/browser web yang membuatnya mudah untuk menulis teks edit termasuk karakter Yunani Klasik, dll. (Atau mungkin kita semua akan belajar menggunakan ini "disembunyikan "fungsionalitas dalam alat yang saat ini kami gunakan ...)

Tetapi sampai itu terjadi, karakter non ASCII dalam kode sumber program akan sulit ditangani oleh banyak programmer, dan karenanya merupakan ide yang buruk jika Anda menulis aplikasi yang mungkin perlu dikelola oleh orang lain .

(Kebetulan alasan Anda dapat memiliki karakter Yunani tetapi tidak tanda akar kuadrat dalam Python pengidentifikasi sederhana. Karakter Yunani diklasifikasikan sebagai Unicode Letters, tetapi tanda akar kuadrat adalah bukan huruf; lihat http://www.python.org/dev/peps/pep-3131/ )

2
Stephen C

Anda tidak mengatakan bahasa/kompiler apa yang Anda gunakan, tetapi biasanya aturan untuk nama variabel adalah mereka harus mulai dengan karakter alfabet atau garis bawah, dan hanya berisi alfanumerik dan garis bawah. Unicode √ tidak akan dianggap alfanumerik, karena itu adalah simbol matematika dan bukan huruf. Namun σ mungkin (karena itu dalam alfabet Yunani) dan á mungkin akan dianggap alfanumerik.

2
tcrosley

Saya memposting pertanyaan yang sama pada StackOverflow

Saya pasti berpikir bahwa itu layak menggunakan unicode dalam masalah yang berhubungan dengan matematika berat, karena memungkinkan untuk membaca rumus secara langsung, yang tidak mungkin dengan ASCII biasa.

Bayangkan sesi debugging: tentu saja Anda selalu dapat menulis sendiri rumus yang harus dihitung kode untuk melihat apakah itu benar. Tapi sembilan puluh persen dari waktu, Anda tidak akan repot dan bug dapat tetap tersembunyi untuk waktu yang lama. Dan tidak ada yang pernah mau melihat formula 7-line muskil ini, polos ASCII. Tentu saja, menggunakan unicode tidak sebagus formula yang diberikan tex, tapi ini jauh lebih baik .

Alternatif menggunakan nama deskriptif panjang tidak dapat dilakukan karena dalam matematika, jika pengenalnya tidak pendek, rumusnya akan terlihat lebih rumit (mengapa Anda berpikir orang, sekitar abad XVIII, mulai mengganti "tambah" dengan "+" dan "minus" dengan "-"?).

Secara pribadi, saya juga akan menggunakan beberapa subskrip dan superskrip (saya hanya menyalin-tempel dari halaman ini ). Misalnya: (memiliki python diizinkan √ sebagai pengidentifikasi)

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

Di mana saya menggunakan superskrip karena tidak ada yang setara dengan subscript di unicode. (Sayangnya, rangkaian karakter subscript unicode sangat terbatas. Saya berharap suatu hari, subscript dalam unicode akan dianggap sebagai diakritik, yaitu kombinasi satu char untuk subscript, dan char lain untuk surat yang disandikan)

Satu hal terakhir, saya pikir percakapan tentang penggunaan karakter non-ASCII ini pada dasarnya bias, karena banyak programmer tidak pernah berurusan dengan "notasi matematika intensif rumus". Jadi mereka berpikir bahwa pertanyaan ini tidak begitu penting, karena mereka tidak pernah mengalami bagian kode yang signifikan yang akan memerlukan penggunaan pengidentifikasi non-ASCII. Jika Anda salah satu dari mereka (dan saya baru-baru ini), pertimbangkan ini: anggaplah bahwa huruf "a" bukan bagian dari ASCII. Maka Anda akan memiliki ide yang cukup bagus tentang masalah tidak memiliki huruf Yunani, subskrip, superskrip ketika menghitung rumus matematika non-sepele.

1
Bérenger

secara pribadi saya termotivasi untuk mempertimbangkan bahasa pemrograman sebagai alat untuk matematikawan dalam konteks ini, karena saya tidak benar-benar menggunakan matematika yang terlihat seperti itu dalam hidup saya. : D Dan tentu saja, mengapa tidak menggunakan ɛ atau σ atau apa pun - dalam konteks itu, sebenarnya lebih banyak dapat dibaca.

(Meskipun, saya harus mengatakan, preferensi saya adalah mendukung nomor superskrip sebagai panggilan metode langsung, bukan nama variabel. Misalnya 2² = 2 ** 2 = 4, dll.)

0
roberto

Apakah kode ini hanya untuk proyek pribadi Anda? Jika demikian, gila, gunakan apa pun yang Anda inginkan.

Apakah kode ini dimaksudkan untuk digunakan orang lain? mis., dan semacam aplikasi sumber terbuka? Jika demikian, Anda mungkin hanya meminta masalah karena programmer yang berbeda menggunakan editor yang berbeda, dan Anda tidak dapat memastikan bahwa semua editor akan mendukung unicode dengan benar. Ditambah lagi, tidak semua shell perintah akan menampilkannya dengan benar ketika file kode sumber diketik/cat'd, dan Anda dapat mengalami masalah jika Anda perlu menampilkannya dalam html.

0
GrandmasterB