zoukankan      html  css  js  c++  java
  • 谜题17:嗯?

    下面的是一个合法的Java程序吗?如果是,它会打印出什么呢?

    
    u0070u0075u0062u006cu0069u0063u0020u0020u0020u0020
    
    u0063u006cu0061u0073u0073u0020u0055u0067u006cu0079
    
    u007bu0070u0075u0062u006cu0069u0063u0020u0020u0020
    
    u0020u0020u0020u0020u0073u0074u0061u0074u0069u0063
    
    u0076u006fu0069u0064u0020u006du0061u0069u006eu0028
    
    u0053u0074u0072u0069u006eu0067u005bu005du0020u0020
    
    u0020u0020u0020u0020u0061u0072u0067u0073u0029u007b
    
    u0053u0079u0073u0074u0065u006du002eu006fu0075u0074
    
    u002eu0070u0072u0069u006eu0074u006cu006eu0028u0020
    
    u0022u0048u0065u006cu006cu006fu0020u0077u0022u002b
    
    u0022u006fu0072u006cu0064u0022u0029u003bu007du007d
    

    这当然是一个合法的Java程序!这不是很显而易见吗?它会打印Hello World。噢,可能是不那么明显。事实上,该程序根本让人无法理解。每当你没必要地使用了一个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");
    
      }
    
    }
    

    这个谜题的教训是:仅仅是因为你可以不以应有的方式去进行表达。或者说,如果你这么做会造成损害,那么就请不要这么做!更严肃地讲,这个谜题是对前面三个教训的补充:Unicode转义字符只有在你要向程序中插入用其他任何方式都无法表示的字符时才是必需的,除此之外的任何情况都不应该避免使用它们。Unicode转义字符降低了程序的清晰度,并且增加了产生bug的可能性。

    对语言的设计者来说,也许使用Unicode转义字符来表示ASCII字符应该被定义为是非法的。这样就可以使得在谜题14、15和17(本谜题)中的程序非法,从而消除了大量的混乱。这个限制对程序员并不会造成任何困难。

  • 相关阅读:
    redis 操作使用
    sublime 设置像IDE一样的 ctrl+鼠标左键 跳转到定义方法
    tensorflow进阶篇-5(反向传播2)
    tensorflow进阶篇-5(反向传播1)
    Linux后台进程管理以及ctrl+z(挂起)、ctrl+c(中断)、ctrl+(退出)和ctrl+d(EOF)的区别(转)
    mysql基础知识(3)
    mysql基础知识(2)
    tensorflow进阶篇-4(损失函数3)
    tensorflow进阶篇-4(损失函数2)
    mysql基础知识(1)
  • 原文地址:https://www.cnblogs.com/yuyu666/p/9840398.html
Copyright © 2011-2022 走看看