Syntax 什么使语言可读或不可读?

Syntax 什么使语言可读或不可读?,syntax,language-design,whitespace,readability,Syntax,Language Design,Whitespace,Readability,我听说人们说一年后他们可以理解python代码,但不能理解XYZ代码。为什么?我不知道python语法的优点是什么,也不知道另一种语法的缺点是什么。我喜欢C#,但我觉得VB.NET代码更容易阅读。我在做语言设计,所以你觉得代码/语法/语言可读还是不可读?当一个字符就足够时需要一个词-Pascal和VB花园中的一块石头 比较: Block () Begin // Content End vs 它需要额外的大脑处理来阅读一个单词,并在心理上将其与一个概念联系起来,而单个符号会立即被其图像识别出

我听说人们说一年后他们可以理解python代码,但不能理解XYZ代码。为什么?我不知道python语法的优点是什么,也不知道另一种语法的缺点是什么。我喜欢C#,但我觉得VB.NET代码更容易阅读。我在做语言设计,所以你觉得代码/语法/语言可读还是不可读?

当一个字符就足够时需要一个词-Pascal和VB花园中的一块石头

比较:

Block ()
Begin
  // Content
End
vs

它需要额外的大脑处理来阅读一个单词,并在心理上将其与一个概念联系起来,而单个符号会立即被其图像识别出来


这与自然语言、普通文本语言和带有象形文字的符号语言(亚洲组)的区别是一样的。第一组的处理速度较慢,因为基本上文本被解析为一组概念,而象形文字则表示概念本身。将其与您已经知道的内容进行比较—从XML进行序列化/反序列化是否比在二进制格式上进行自定义搜索更快?

体验

在我看来,重要的事情之一是显著的空白。块缩进有很长的路要走,像Python和F#这样提供大量空白的语言有助于提高可读性


像Java和C这样的代码往往是结构化的,可读性成为它如何开始编码的焦点,而不是语言本身的焦点。

我试着说,代码的简单性使其可读

你必须第一眼看到它的作用和目的。为什么要写一千行代码,而只有少数代码可以完成所需的工作


例如,这就是像F#这样的函数式语言的精髓。

这就是干净的代码

保持它的小型、简单、命名良好和格式化

class ShoppingCart { 
  def add(item) {
    println "you added some $item"
  }

  def remove(item) {
    println "you just took out the $item"
  }
}

def myCart = new ShoppingCart()

myCart.with {
  add "juice"
  add "milk"
  add "cookies"
  add "eggs"
  remove "cookies"
}

对我来说,这主要是语言是否允许你开发更具可读性的抽象,从而避免在细节中迷失方向的问题。

这就是OOP在隐藏细节方面非常方便的地方。如果我可以将任务的详细信息隐藏在具有共同概念(即C++中的迭代器)行为的接口后面,我通常不必阅读实现细节。

通常认为Python可读的是它强制标准化缩进。这意味着您永远不会被迫怀疑自己是否处于if块或函数中,这一点非常清楚。因此,即使编写得很糟糕的代码也变得显而易见

<> P>一个我通常认为难以阅读的语言是PHP,因为同样的原因(或者相反,它是相反的)。由于程序员可以随意缩进,并将变量存储在任何地方,因此它可能会很快变得复杂。此外,由于PHP历史上没有区分大小写的函数名(我相信PHP<4.4.7),这意味着核心语言的实现也不一致。。。(别误会我的意思,我喜欢这种语言,但一个糟糕的程序员真的会把事情搞得一团糟)

JavaScript对于没有纪律的开发人员也有很多问题。您会发现自己想知道变量是在哪里定义的,您在什么范围内。代码不会放在一个整合的地方,而是分布在多个文件中,并且经常潜伏在意外的地方

动作脚本3稍微好一点。一般来说,大家都在使用类似的语法,Adobe甚至定义了自己的标准,并使其易于访问和通用。盈利公司支持的ECMAScript实现如何优于通用的ECMAScript实现并不需要太多时间。

我认为,语言设计(针对普通语言,而不是brainfuck:)并不重要。要使代码可读,您应该遵循标准、代码约定,并且不要忘记重构

我听说人们说一年后他们可以理解python代码,但不能理解XYZ代码。为什么?

首先,我不认为人们仅仅根据语法来说。还有许多其他因素需要考虑,仅举几个例子:

  • 事实上,一些语言倾向于只推广一种正确的方式来做某事(比如Python),而其他语言则推广多种不同的方式(例如,据我所知,Ruby[免责声明:我不是Ruby程序员])
  • 该语言拥有的库。更好的设计往往非常容易理解,不需要文档,这也有助于记忆。因此,拥有良好库的语言将使事情变得更容易
  • 话虽如此,我个人对Python的看法是,许多人将其称为“可执行伪代码”。它支持各种各样的东西,这些东西往往出现在伪代码中,作为扩展,它是思考问题的标准方式

    此外,Python的非C类语法(许多人不喜欢它的特性之一)也使Python看起来更像伪代码


    嗯,这就是我对Python可读性的看法。

    嗯,计算机语言越像口语,它的可读性就越强。举个极端的例子,比如J、空格或Brainfuck。。。未经训练的眼睛完全看不懂


    但一种类似英语的语言更容易理解。正如COBOL所证明的那样,这并不是说它是最好的语言。

    我认为它更多地与编写代码的人有关,而不是与实际语言本身有关。您可以用任何语言编写非常可读的代码,也可以用任何语言编写不可读的代码。即使是复杂的正则表达式也可以格式化和注释,以使其易于阅读

    我的一位同事曾经说过一句话:“你可以用任何语言编写垃圾代码。”我喜欢这句话,今天想与大家分享。什么使代码可读?这是我的想法

  • 阅读语言语法的能力
  • 格式正确的代码。class ShoppingCart { def add(item) { println "you added some $item" } def remove(item) { println "you just took out the $item" } } def myCart = new ShoppingCart() myCart.with { add "juice" add "milk" add "cookies" add "eggs" remove "cookies" }
    expr = if not (ConditionA and ConditionB) then  ...  else  ... 
    
    expr = (!(conditionA && conditionB)) ? ... : ...
    
    foreach line in lines:
        if (line =~ /regex/):
            // code
    
    ... if /regex/ foreach(@lines);
    
    x = length [ x | x <- [1..10], even x ]
    
    int x = 0;
    for (int i = 1; i <= 10; ++i)
        if ((i&&1)==0) ++x;
    
    // PHP
    foreach ($array as $variable) ...
    
    // Ruby
    array.each{ |variable| ... }
    
    // Python
    for variable in array ...
    
    // Java
    for (String variable : array)
    
    // PHP
    foreach ($user as $_user) ...
    
    if [1,2,3].include? variable then ... end
    
    if (variable != 1 || variable != 2 || variable != 3) { ... }
    
    (loop
       do for tweet = (master-response-parser (twitter-show-status tweet-id))
       for tweet-id = tweet-id then (gethash in-reply-to tweet)
       while tweet-id
       collecting tweet)
    
    listOfFacs = [x | x <- [1 ..], x == sumOfFacDigits x]
        where sumOfFacDigits x = sum [factorial (x `div` y) | y <- [1 .. 10]]