知识点:
在程序中,最后禁止使用Unicode转义字符表示ANSII字符。
问题:
牛B的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
// 期望结果:我不相信你能看懂
// 实际结果:还有意义吗??
// 代码的翻译
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");
}
}
程序的解读:
这个谜题的教训是:仅仅是因为你可以不以应有的方式去进行表达。或者说,如 果你这么做会造成损害,那么就请不要这么做!更严肃地讲,这个谜题是对前面 三个教训的补充:Unicode 转义字符只有在你要向程序中插入用其他任何方式都 无法表示的字符时才是必需的,除此之外的任何情况都不应该避免使用它们。 Unicode 转义字符降低了程序的清晰度,并且增加了产生 bug的可能性。 |
解决方法:
不说了,在程序中还是不用用Unicode转义字符表示ANSII字符了,否则,后果很严重。
总结:
对语言的设计者来说,也许使用Unicode 转义字符来表示ASCII字符应该被定义 为是非法的。这样就可以使得在谜题 14、15和 17(本谜题)中的程序非法,从 而消除了大量的混乱。这个限制对程序员并不会造成任何困难。 |