次のようなコードスニペットがあります。
double Δt = lastPollTime - pollTime;
double α = 1 - Math.exp(-Δt / τ);
average += α * (x - average);
Java識別子でUnicode文字を使用するのはどれほど悪い考えですか?それともこれは完全に受け入れられますか?
次のようなコードスニペットがあります。
double Δt = lastPollTime - pollTime;
double α = 1 - Math.exp(-Δt / τ);
average += α * (x - average);
Java識別子でUnicode文字を使用するのはどれほど悪い考えですか?それともこれは完全に受け入れられますか?
さまざまな理由から、これは悪い考えです。
多くの人のキーボードはこれらの文字をサポートしていません。そのコードをqwertyキーボード(またはギリシャ文字のない他のキーボード)で維持する場合は、それらの文字を常にコピーして貼り付ける必要があります。
一部の人のエディタまたは端末は、これらの文字を正しく表示しない場合があります。たとえば、一部のエディタは(残念ながら)デフォルトでISO-8859(ラテン)バリアントを使用しています。ASCIIが依然として普及している主な理由は、ASCIIがほぼ常に機能することです。
文字を正しくレンダリングできたとしても、混乱を招く可能性があります。太陽からまっすぐ(強調鉱山):
同じ外観の識別子はまだ異なる場合があります。たとえば、単一文字のLATIN CAPITAL LETTER A(A、\ u0041)、LATIN SMALL LETTER A(a、\ u0061)、GREEK CAPITAL LETTER ALPHA(A、\ u0391)、CYRILLIC SMALL LETTER A(a、 \ u0430)とMATHEMATICAL BOLD ITALIC SMALL A(a、\ ud835 \ udc82)はすべて異なります。
..。
Unicode複合文字は、分解された文字とは異なります。たとえば、LATIN CAPITAL LETTER A ACUTE(Á、\ u00c1)は、ソート時にLATIN CAPITAL LETTER A(A、\ u0041)の直後にNON-SPACING ACUTE(´、\ u0301)が続くものと同じであると見なすことができます。 、ただし、これらは識別子が異なります。
これは決して架空の問題ではありません。α(U + 03b1 GREEK SMALL LETTER ALPHA)と⍺(U + 237a APL FUNCTIONAL SYMBOL ALPHA)は異なる文字です。
どの文字が有効かを判断する方法はありません。コードの文字は機能しますが、FUNCTIONAL SYMBOL ALPHAを使用すると、Javaコンパイラが「不正な文字:\9082」について文句を言います。このコードでは機能記号の方が適切ですが。を尋ねる 以外に、どの文字が受け入れられるかについての確固たる規則はないようCharacter.isJavaIdentifierPart()
です。
コンパイルしてもらえるかもしれませんが、すべてのJava仮想マシンの実装がUnicode識別子で厳密にテストされているかどうかは疑わしいようです。これらの文字がメソッドスコープの変数にのみ使用される場合はコンパイルされますが、クラスメンバーの場合は.class
ファイルにも含まれるため、バグのあるJVM実装でプログラムが破損する可能性があります。
正しい記号を使用しているので見栄えがしますが、チームの何人がそれらの記号のキーストロークを知っていますか?
入力しやすくするために、英語の表現を使用します。また、PCに設定された記号をサポートする文字セットを持っていない人もいます。
そのコードは読むのは問題ありませんが、維持するのは恐ろしいです-私は次のような平易な英語の識別子を使用することをお勧めします:
double deltaTime = lastPollTime - pollTime;
double alpha = 1 - Math.exp(-delta....
それがあなたのワーキンググループで受け入れられるならば、それは完全に受け入れられます。ここでの答えの多くは、誰もが英語でプログラムするという傲慢な仮定に基づいています。英語以外のプログラマーは、最近では決して珍しいことではなく、加速する速度で珍しくなりつつあります。完全に優れた言語を自由に使えるのに、なぜ彼らは英語版に制限する必要があるのでしょうか。
英語圏の傲慢さはさておき、英語以外の識別子を使用する正当な理由は他にもあります。たとえば、数学パッケージを作成している場合、ターゲットが数学者の仲間であれば、ギリシャ語を使用しても問題ありません。誰もが「Δ」を理解し、より迅速に入力できるのに、なぜ人々はあなたのワークグループに「デルタ」を入力する必要があるのでしょうか。ほとんどすべての問題のあるドメインには独自の専門用語があり、その専門用語がラテンアルファベット以外で表現されることもあります。いったいなぜあなたはすべてをASCIIに詰め込もうとするのでしょうか?
それは素晴らしいアイデアです。本音。当時は簡単に実行できませんでした。今後も参考にしていきましょう。プログラムコードの一部として、三角形、円、正方形などを表示したいと思います。しかし、今のところ、Crozinが示唆しているように、書き直してみてください。
なぜだめですか?そのコードに取り組んでいる人々がそれらを簡単に入力できれば、それは許容できます。
しかし、神はユニコードを表示できない人、またはそれらを入力できない人を助けます。
完璧な世界では、これが推奨される方法です。
残念ながら、プレーンな7ビットASCII文字の外側に移動すると文字エンコードに遭遇します(UTF-8はISO-Latin-1とは異なり、UTF-16とは異なります)。つまり、最終的に問題が発生します。これは、WindowsからLinuxに移行するときに私に起こりました。私たちの国のスカンジナビアのキャラクターはその過程で壊れましたが、幸いなことに文字列だけでした。次に、それらすべてに\uエンコーディングを使用しました。
たとえば、ファイルに適切なBOMが含まれている場合など、決してそのような問題に遭遇することは絶対にないと確信できる場合は、必ずこれを実行してください。コードが読みやすくなります。少なくとも疑念が最も少ない場合は、そうしないでください。
(「英語以外の言語を使用する」は別の問題であることに注意してください。私は文字の代わりに記号を使用することを考えています)。