JAva解惑-Hello world(続き)

1812 ワード

麺は合法的なJavaプログラムですか?もしそうなら、何が印刷されますか?
\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020
\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079
\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020
\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063
\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028
\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020
\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074
\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020
\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b
\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d

これはもちろん合法的なJavaプログラムです!これは明らかではないでしょうか.ハローワールドが印刷されます.ああ、そんなに明らかではないかもしれません.実際、このプログラムはまったく理解できません.Unicodeエスケープ文字を使用する必要がないたびに、プログラムの理解性が失われ、プログラムはこのようなやり方を極めて発揮します.気になる場合は、Unicodeエスケープ文字が表す文字に変換された後のプログラムの様子を見てみましょう.
public 
class Ugly
{public
static
void main(
String[]
args){
System.out
.println(
“Hello w”+
“orld”);}}

次に、フォーマットして整理した様子を示します.
public class Ugly {
  public static void main(String[] args){
     System.out.println("Hello w"+"orld");
  }
}

このパズルの教訓は、あなたがあるべき方法で表現できないからだ.あるいは、もしあなたがこのようにして損害をもたらすならば、それではこのようにしないでください!より厳粛に言えば、このパズルは前の3つの教訓に対する補足です.Unicodeエスケープ文字は、プログラムに他の方法では表現できない文字を挿入する場合にのみ必要であり、それ以外の場合は使用を避けるべきではありません.Unicodeエスケープ文字はプログラムの解像度を低下させ,バグが発生する可能性を増加させた.
言語の設計者にとって、Unicodeエスケープ文字を使用してASCII文字が不正と定義されるべきであることを示すかもしれません.これにより、パズル14,15,17(本パズル)におけるプログラムを不正にし、大量の混乱を解消することができる.この制限はプログラマーにとって何の困難もありません.