Programming languages 为什么有些语言需要分号?

Programming languages 为什么有些语言需要分号?,programming-languages,Programming Languages,我知道分号在Java等语言中表示一行的结尾,但为什么 其他人经常问我这个问题,我真的想不出比使用换行符或空白更好的方法来解释它的工作原理。它们不表示行结束,而是表示语句结束 有些语言不需要它们,但是这些语言不允许在一行上有多个语句,或者一个语句跨越多个文件行(没有像VB的uu信号这样的其他信号) 为什么有些语言允许一行有多个语句?其原理是空格是不相关的(行尾字符是空格)。这允许灵活地设置代码的格式,因为格式不是语义的一部分。许多语言允许您随意设置间距。这允许您控制代码的外观 考虑: Strin

我知道分号在Java等语言中表示一行的结尾,但为什么


其他人经常问我这个问题,我真的想不出比使用换行符或空白更好的方法来解释它的工作原理。

它们不表示行结束,而是表示语句结束

有些语言不需要它们,但是这些语言不允许在一行上有多个语句,或者一个语句跨越多个文件行(没有像VB的uu信号这样的其他信号)


为什么有些语言允许一行有多个语句?其原理是空格是不相关的(行尾字符是空格)。这允许灵活地设置代码的格式,因为格式不是语义的一部分。

许多语言允许您随意设置间距。这允许您控制代码的外观

考虑:

 String result = "asdfsasdfs"
               + "asdfs"
               + "asdfsdf";
因为您可以插入额外的换行符,所以可以将该行拆分为多行而不会出现问题。语言仍然需要知道行结束了,这就是为什么需要分号。

简短回答:

因为其他人都这么做

理论上,语言的语句是语言设计者在解析文件时能够从语法上解释的内容。因此,如果语言设计者不想使用分号,他们可以使用句点、破折号、空格、换行符或其他表示语句分隔的符号

语言设计者经常使语法易于理解,从而使其变得流行

因此,如果某个语言设计师创造了一种使用“:-)”来表示语句结尾的语言,那么它将:1)很难阅读;2) 不受已经习惯使用“;”的人的欢迎


echo“小心”:-

语言会这样做,因为它表示
语句的结尾,而不是
行的结尾,这意味着可以压缩代码,使其更小,占用更少的空间

采用C++代码(<代码>包含< /代码>):

for(int i=0;i<5;++i){

有些编程语言使用它来表示语句的结束,从而使语言从语句的角度看不到空格。在mid中需要注意的一点是,如果在编译时检查新行或分号,然后必须评估几种不同的“情况”编译器可能会得到您想要做的错误,并且需要更长的时间来查找这些情况,而不是简单地在语句末尾查找分号。一些高级语言试图减少分号的使用或完全删除分号,以节省一些击键,这些语言更倾向于comfor程序员的t,通常伴随着各种语法糖;有人可能会说不使用分号是一种语法糖。 语言中分号的使用或不应根据语言所要达到的目的,C语言和C++语言主要是关于性能的,java和C++在抽象意义上比C和C++高一点,然后我们有了像斯卡拉、Python和Ruby这样的东西,它们主要是为了使编程更舒适。性能成本(Ruby公开承认这一点,在Python上非常明显)。 那么为什么有些语言“需要”分号呢

  • 使编译更容易
  • 语言的设计者认为它更加一致
  • 历史原因(java、C++和C++也是C的子)
最后一件事是Javascript实际上在编译期间或IIRC之前添加了分号,所以它实际上不是无分号的

简短答复:

因为其他人都这么做

不是,也不是所有人。此外,许多流行语言,如Python、Ruby或Visual Basic,不使用分号作为语句结尾,而是使用换行符。许多,不是“所有人”,仍然使用分号,因为历史原因,而不是理性的论证:分号在第一个计算时代曾在取代穿孔卡片格式方面发挥了重要作用,但今天它可以被完全抛弃

事实上,有两种指定语句结尾的常用方法:

  • 使用分号
  • 保持原样。这会使编译器读取一个换行符作为语句的结尾。当您想将语句扩展到多行时,只需使用一个特殊字符(如Python中的
    \
    )来表示语句尚未完成

  • 为了使代码更具可读性,使用特殊字符来指定语句结尾应该是一个例外,而不是规则。

    首先,分号是语句分隔符,而不是行分隔符。有些语言使用新行字符作为语句分隔符,但忽略所有空白的语言倾向于使用分号朗

    为什么语言忽略空白? 一种语言忽略空白,允许程序员按照自己的喜好格式化源代码

    if (welcome)
        System.out.println("hello world");
    

    这不是因为在语言的语法中,每一个都有一个单独的大小写,而是因为空格被忽略了

    为什么编程语言需要语句分隔符?

    这是问题的核心。为了理解它,让我们考虑一个没有任何语句分隔符的小语言。它包含以下语句类型:

    var x = foo()
    y[0, 1] = x
    bar()
    
    这里,
    y
    是一个二维数组,
    x
    被写入
    y
    的一个条目

    现在让我们看看这些语句,就像编译器看到它们一样:

    var x = foo() y[0, 1] = x bar()
    
    因为没有语句分隔符,编译器必须自己识别每个语句的结尾,才能理解输入。编译器能够做到吗?我想在上面的例子中,编译器可以做到

    if (welcome) System.out.println("hello world");
    
    var x = foo()
    y[0, 1] = x
    bar()
    
    var x = foo() y[0, 1] = x bar()
    
    [x, y] = ["hello", "world"]
    
    foo()
    [x, y] = [1, 2]
    
    foo() [x, y] = [1, 2]
    
    foo()[x, y] = [1, 2]