我听说有人说他们可以在一年后理解他们的python代码,但不能理解他们的XYZ代码。为什么?我不知道python语法有什么好处或者对另一个有什么不好。我喜欢C#,但我觉得VB.NET代码更容易阅读。我正在进行语言设计,所以您发现什么使代码/语法/语言可读或不可读?
答案 0 :(得分:12)
体验。
答案 1 :(得分:6)
像Java和C#这样的代码往往是结构化的,可读性成为它开始时编码的焦点,而不是语言本身的编码。
答案 2 :(得分:5)
当代码以明确的“陈述你想做什么”的方式编写时,代码是可读的。 这仅取决于语言中的语言
其余的取决于你用来编写代码的样式(即使Perl也可以理解!),但是某些语言使 hacky 语句变得更容易。
清除:
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;
答案 3 :(得分:4)
程序员使代码可读或不可读,而不是语言。否则就是在欺骗自己。这是因为只有有资格判断可读性的人才是那些懂语言的人。对于非程序员来说,所有语言同样都是不可读的。
答案 4 :(得分:4)
可读性是一项需要大量输入的功能。我认为编译可能影响语言可读性的完整列表并不可能。描述它的最常用方法是“最小化认知负荷”。一些主要因素:
答案 5 :(得分:4)
通常使Python被认为是可读的是它强制标准化的缩进。这意味着你永远不会被怀疑是否在if块或函数中,它很明显。因此,即使编写得很差的代码也会变得很明显。
我通常认为难以阅读的一种语言是PHP,原因相同(或者更确切地说,相反)。由于程序员可以随意缩进,并将变量存储在任何地方,因此可以非常快速地进行复杂处理。此外,由于PHP历史上没有区分大小写的函数名称(我认为PHP <4.4.7),这意味着核心语言的实现确实没有一致性......(不要让我错了,我喜欢这种语言,但是一个糟糕的程序员真的会弄得一团糟。)
JavaScript对于没有纪律的开发人员也存在很多问题。您会发现自己想知道变量的定义位置以及您所处的范围。代码不会位于一个合并的位置,而是分散在多个文件中,并且经常潜伏在意外的地方。
ActionScript 3更好一点。一般来说,每个人都使用类似的语法,Adobe已经采取行动,以至于定义其标准并使其可访问和通用。看待营利性公司支持的ECMAScript实施优于广义实施,并不需要太多。
答案 6 :(得分:2)
说实话,对于什么使语言可读,它实际上似乎归结为简单和个人偏好的结合。 (当然 - 如果你努力的话,总是可以用任何语言编写不可读的代码)。由于个人偏好无法真正得到控制,因此可以归结为易于表达 - 使用简单功能的语言越复杂,从可读性的角度来看,语言越难以实现。
答案 7 :(得分:2)
我听说有人说他们可以在一年后理解他们的python代码,但不能理解他们的XYZ代码。为什么?
首先,我认为人们并不认为仅基于语法。其他因素需要考虑很多,仅举几例:
话虽如此,我个人对Python的看法是很多人称之为“可执行的伪代码”。它支持各种往往出现在伪代码中的东西,作为扩展,是思考事物的标准方法。
此外,Python的非类C语法,使其如此受到众多人的喜爱,也使Python看起来更像伪代码。
嗯,这是我对Python可读性的看法。
答案 8 :(得分:1)
但是,一种类似英语的语言可以更容易理解。并非这使得它成为最佳语言,正如COBOL可以证明的那样。
答案 9 :(得分:1)
我的一位同事用来说:“你可以用任何语言编写垃圾代码。”我喜欢它,想今天分享。什么使代码可读?这是我的想法
这些都与语言无关,而是关于编码器和工作质量。
答案 10 :(得分:1)
我认为它更多地与编写代码的人而不是实际的语言本身有关。您可以使用任何语言编写非常易读的代码,并使用任何语言编写不可读的代码。即使是复杂的正则表达式也可以进行格式化和注释,以便于阅读。
答案 11 :(得分:1)
当一个角色足够时需要一个词 - Pascal和VB花园里的一块石头。
比较
Block ()
Begin
// Content
End
VS
Block
{
// Content
}
它需要额外的大脑处理来阅读单词并在心理上将其与概念相关联,而单个符号会立即被其图像识别。
与自然语言,通常的文本语言与具有象形文字的符号语言(亚洲组)的区别是相同的。第一组的处理速度较慢,因为基本上文本被解析为一组概念,而象形文字则代表概念本身。将它与您已经知道的相比 - XML的序列化/反序列化比二进制格式的自定义搜索更快吗?
答案 12 :(得分:0)
我认为,语言设计(对于普通语言,而不是脑力:)应该不重要。为了使代码可读,您应该遵循标准,代码约定,并且不要忘记重构。
答案 13 :(得分:0)
对于我而言,主要是语言允许您开发更易读的抽象,以防止迷失细节。 这就是OOP在隐藏细节方面非常方便的地方。如果我可以隐藏具有通用概念行为的接口后面的任务的细节(即C ++中的迭代器),我通常不必阅读实现细节。
答案 14 :(得分:0)
这都是干净的代码。
保持小巧,简单,命名和格式化。
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"
}
答案 15 :(得分:0)
我会尝试说代码的简单性是可读的。
你必须第一眼看到它的作用和目的是什么。为什么只有少数几行代码需要写一千行代码?
这就是像F#这样的功能语言的精神。
答案 16 :(得分:0)
关于语法,我认为它必须具有相当的描述性。例如,在许多语言中,您有foreach
语句,每个语句处理它的方式有点不同。
// PHP
foreach ($array as $variable) ...
// Ruby
array.each{ |variable| ... }
// Python
for variable in array ...
// Java
for (String variable : array)
老实说,我觉得PHP和Python有最清晰的理解方法,但是,这一切都归结为程序员想要的聪明和清晰。例如,一个糟糕的程序员可以编写以下内容:
// PHP
foreach ($user as $_user) ...
我的猜测是你几乎不知道代码在做什么,除非你追踪并试图找出$user
是什么以及为什么要迭代它。清晰简洁就是让小块代码变得有意义,而无需追溯程序来找出变量/函数名称。
另外,我必须完全同意空白。标签,换行符和介于两者之间的间距真的会产生巨大的差异!
编辑1:我可能还会插入某些语言的语法和工具,以便更清晰。以Ruby为例:
if [1,2,3].include? variable then ... end
经文,比如Java:
if (variable != 1 || variable != 2 || variable != 3) { ... }
其中一个(恕我直言)肯定比另一个更清晰可读。
答案 17 :(得分:0)
读者的识字水平。
答案 18 :(得分:0)
两个截然不同的方面,真的。首先是语法和空格。 Python强制执行空白标准,删除不必要的{,}和;字符。这使眼睛很容易。其次,最重要的是,表达的清晰度 - 即将代码映射回您的思维方式是多么容易。编程语言中有几个特性(和非特性)有助于后一点:
几个例子:
(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]]