web-dev-qa-db-ja.com

変数名にUnicode文字を使用するのは悪いことですか?

私は最近、Python 3。

数学は次のようになります。

alt text

いいえ、本当に。

これが私が書いたものです:

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

私は実際にPython 3を受け入れないのは残念だと思ったまたは²を変数名として。

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

頭がおかしいのですか?ASCIIのみのバージョンを使用する必要がありますか?なぜですか? ASCII上記のバージョンのみ、式との等価性を検証するのが難しいですか?

ちなみに、一部のUnicodeグリフは互いに非常によく似ており、some(またはthat)やlikeのようなものもあり、作成されたコードではまったく意味がありません。ただし、これは数学や矢印のグリフには当てはまりません。


リクエストごとに、ASCIIバージョンのみが次のようになります。

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

...アルゴリズムの各ステップごと。

84
badp

σ with sまたはsigmaは、頭がおかしい、頭がおかしいでしょう。

潜在的な利益は何ですか?さて、見てみましょう...

  • 読みやすさは向上しますか?いいえ、少しではありません。もしそうなら、元の式は間違いなくラテン文字も使用したでしょう。

  • 書き込み可能性が向上しますか?一見すると、はい。しかし、2番目は違います。この式は変更しない(まあ、「絶対に」)なので、通常、コードを変更したり、これらの変数を使用してコードを拡張したりする必要はありません。したがって、書き込み可能性は–今回だけ–問題ではありません。

個人的には、プログラミング言語には数式よりも利点が1つあると思います。意味のある表現力豊かな識別子を使用できるということです。数学ではこれは通常は当てはまりません。そのため、1文字の変数を使用して、時々それらをギリシャ語にします。

しかし、ギリシャ語は問題ではありません。非説明的な1文字の識別子です。

結局のところ、プログラミング言語doesが識別子でUnicodeをサポートしている場合は、元の表記法を維持するか、技術的な障壁はありません。または、意味のある識別子を使用します。ギリシャ文字をラテン文字に置き換えるだけではありません。またはアラビア語のもの、またはヒンディー語のもの。

54
Konrad Rudolph

個人的には、文字コードをもう一度入力する必要があるコードを見るのは嫌です。ユニコードはアルゴリズムの内容と厳密に一致していますが、読みやすさと編集機能を本当に損なっています。一部のエディターは、その文字をサポートするフォントさえ持っていない場合があります。

代替案についてはどうですか?//µ = uの上位を取得し、すべてをASCIIで記述してください。

34
TheLQ

この引数は、ユニコードの入力やギリシャ文字の読み取りに問題がないことを前提としています

引数は次のとおりです。piまたはular_ratioが必要ですか?

この場合、私は円の比率よりも円周率を好むと思います。私は小学校の頃から円周率について学んでいて、円周率の定義が彼の塩の価値があるすべてのプログラマーにしっかりと根付いていると期待できるからです。したがって、πと入力して、circular_ratioを意味することを気にしません。

しかし、どうですか

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

または

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

私にとって、piまたはπと同様に、両方のバージョンは不透明ですexcept小学校でこの式を学びませんでした。 winner_sigmaWwinは、私にとっても、コードを読んでいる他の人にとっても何の意味もありません。どちらのσwを使用しても、コードは改善されません。

したがって、説明的な名前を使用します。 total_scorewinning_ratioなどは、ギリシャ語の文字を発音するだけのascii名を使用するよりもはるかに読みやすくなります。問題は、ギリシャ文字が読めないことではありませんが、文字(ギリシャ語かどうか)を変数の「意味」に関連付けることができません。

あなたがコメントしたとき、あなたは確かにあなた自身で問題を理解しました:You should have seen the paper. It's just eight pages...。問題は、変数の名前を紙に基づいており、読みやすさよりも簡潔にするために1文字の名前を選択する場合(ギリシャ語であるかどうかに関係なく)、人々はその文字を"意味";これは、人々があなたのコードを理解できるように人為的な障壁を課していることを意味し、それは常に悪いことです。

ASCIIのみの世界に住んでいる場合でも、a * b / 2alpha * beta / 2はどちらも、三角形の領域式であるheight * base / 2の不透明なレンダリングです。式が複雑になるにつれて、1文字の変数を使用することの読みやすさは指数関数的に増加し、AllegSkillの式は確かに簡単な式ではありません。

単一の文字の変数は、ギリシャ語の1文字かASCIIの1文字かに関係なく、単純なループカウンターとしてのみ使用できます。他の変数が1文字だけで構成されてはなりません。名前にギリシャ文字を使用してもかまいませんが、使用する場合は、他の場所で任意の論文を読む必要なく、それらの名前を「意味」に関連付けることができることを確認してください。

小学校のときは、基本的な算術演算に+、-、×、÷などの記号を使用した数式が表示されても問題ありません。√()は平方根関数になります。小学校を卒業した後、光沢のある新しい記号を追加してもかまいません。統合のための∫です。傾向に注意してください、これらはすべて演算子です。演算子は変数名よりもはるかに頻繁に使用されますが、まったく異なる意味で再利用されることはあまりありません(数学者が演算子を再利用する場合、新しい意味は依然として古い意味のいくつかの基本的な特性を保持していることが多く、これは当てはまりません。変数名を再利用する場合)。

結論として、いいえ、変数名にUnicode文字を使用することは悪くありません。ただし、変数名に1文字の名前を使用することは常に悪いことであり、Unicode名の使用を許可することは、1文字の変数名を使用するためのライセンスではありません。

31
Lie Ryan

コードを理解していますか?それを読む必要のある他のすべての人はいますか?その場合は問題ありません。

個人的には、ASCIIのみのソースコードの裏を見て嬉しいです。

14
user4051

はい、あなたはあなたの心の外にいます。私は個人的にコメントで論文と式の番号を参照し、すべてをまっすぐなASCIIで記述します。そうすれば、興味のある人なら誰でもコードと式を関連付けることができます。

9
zvrba

Unicode変数名を使用することは、2つの理由から悪い考えです。

  1. 入力するPITAです。

  2. 彼らはしばしば英語の手紙とほとんど同じように見えます。これは、数学表記でギリシャ文字を見ることを嫌うのと同じ理由です。ローとpを区別してみてください。簡単ではない。

5
dsimcha

この1つのケースでは、複雑な数学の公式です。

20年で、この複雑でギリシャ文字が元の数学に近いものをコーディングする必要がなかったと言えるでしょう。あなたがそれを理解できないなら、あなたはそれを維持するべきではありません。

と言って、もし私があなたに後押しした沼地の標準コードでµとσを維持する必要があるなら、私はwillあなたが住んでいる場所を見つけます...

4
gbn
  • プロ:見栄えがいい
  • 短所:Unicode文字など、ツールチェーン(エディター、コードフォーマッター、バージョン管理、古いコンパイラ)で全体の意味が失われる可能性があります。

あなたにとってのリスクはどのくらいですか?利益はリスクを上回りますか?

3

それほど遠くない将来、私たちはみな、古典的なギリシャ文字などを含む編集テキストを簡単に作成できるテキストエディター/ IDE/Webブラウザーを使用します(または、おそらくこの「非表示"現在使用しているツールの機能...)

しかし、それが発生するまで、プログラムのソースコード内のASCII文字以外の文字は、多くのプログラマが処理するのが難しいため、他の誰かが保守する必要のあるアプリケーションを作成している場合は悪い考えです。 。

(ちなみに、Python識別子でギリシャ語の文字は使用できるが平方根の記号は使用できない理由は簡単です。ギリシャ語の文字はUnicode文字として分類されますが、平方根の記号は文字ではありません。 http://www.python.org/dev/peps/pep-3131/

2
Stephen C

どの言語/コンパイラを使用しているかは言いませんでしたが、通常、変数名の規則は、それらがアルファベット文字またはアンダースコアで始まり、英数字とアンダースコアのみを含む必要があるということです。 Unicode√は、文字ではなく数学記号であるため、英数字とは見なされません。ただし、σは(ギリシャ語のアルファベットであるため)であり、áはおそらく英数字と見なされます。

2
tcrosley

同じ種類の質問を StackOverflow に投稿しました

数学に関連する重い問題でユニコードを使用する価値があると思います。これは、式を直接読み取ることができるためです。これは、プレーンASCIIでは不可能です。

デバッグセッションを想像してください。もちろん、コードが計算するはずの数式をいつでも手書きして、正しいかどうかを確認できます。しかし、時間の90%は気にならず、バグは長い間隠されたままになる可能性があります。そして、誰もこのひどい7行の単純なASCII数式を見ても構わないと思っています。もちろん、Unicodeを使用することはtex-rendered数式ほどよくありませんが、それははるかに優れています。

数学では、識別子が短くない場合、式はさらに複雑に見えるため、長い説明的な名前を使用する代わりの方法は現実的ではありません(なぜ、18世紀ごろ、人々は「プラス」を「+」に置き換え始めたと思いますか?および「-」による「マイナス」?)。

個人的には、下付き文字と上付き文字も使用します(これらを このページ からコピーして貼り付けます)。例:(python識別子として許可された√を持っていた)

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

Unicodeに対応する下付き文字がないため、上付き文字を使用しました。 (残念ながら、Unicodeの添え字の文字セットは非常に制限されています。ある日、Unicodeでの添え字は発音区別符号と見なされます。つまり、添え字の1つの文字と下付きの文字の別の文字の組み合わせです)

最後に、ASCII以外の文字の使用に関するこの会話は主に偏っていると思います。なぜなら、多くのプログラマーは「式を多用する数学的表記」を扱っていないからです。したがって、非ASCII識別子の使用を必要とするコードの大部分を経験したことがないため、この質問はそれほど重要ではないと彼らは考えています。あなたがそれらの1つである場合(そして最近まで私はそうでした)、これを考慮してください。「a」という文字がASCIIの一部ではないとします。そうすれば、重要な数式を計算するときに、ギリシャ文字、下付き文字、上付き文字がまったくないという問題がかなりよくわかります。

1
Bérenger

個人的には、プログラミング言語をこのコンテキストの数学者のためのツールとして考えるように動機付けられています。私は実際には私のようなものに似た数学を使用していないからです。 :Dそして、確かに、whyやσなどを使用しないでください。そのコンテキストでは、実際にはmore読みやすいです。

(私は言わなければなりませんが、私の好みは、変数名ではなく直接メソッド呼び出しとして上付き数字をサポートすることです。たとえば、2²= 2 ** 2 = 4など)

0
roberto

このコードはあなたの個人的なプロジェクトのためだけですか?もしそうなら、ナッツに行き、あなたが好きなものを使ってください。

このコードは他の人が使用するためのものですか?つまり、ある種のオープンソースアプリですか?もしそうなら、プログラマーごとに異なるエディターを使用しているため、問題が発生する可能性が高く、すべてのエディターがUnicodeを正しくサポートしているとは確信できません。さらに、ソースコードファイルがtyped/cat'dされている場合、すべてのコマンドシェルがそれを正しく表示するわけではなく、html内に表示する必要がある場合は問題が発生する可能性があります。

0
GrandmasterB