我在“javascript是一种非常富有表现力的语言”这样的句子中经常听到这个词。它只是意味着没有很多规则,或者“表达”是否具有更具体的含义?
答案 0 :(得分:56)
'表达'意味着编写易于理解的代码很容易,无论是编译器还是人类读者。
表达性的两个因素:
将这种富有表现力的Groovy与表达程度较低的Java等效词进行比较:
3.times {
println 'Hip hip hooray'
}
VS
for(int i=0; i<3; i++) {
System.out.println("Hip hip hooray");
}
有时你会为表达性交换精确度 - Groovy示例有效,因为它假设Java让你明确指定。
答案 1 :(得分:15)
我认为它能够以易于阅读和简洁的方式表达想法/算法/任务。
通常我将表达的语言与句法糖联系起来,尽管情况并非总是这样。 C#表达的例子是:
foreach
(而不是显式编写迭代)using
语句(而不是显式编写try / finally)另一个例子是泛型:在C#得到泛型之前,你无法在代码中表达“只包含字符串ArrayList
”的想法。 (当然,您可以记录它,或者编写您自己的StringList
类型,但这并不完全相同。)
答案 2 :(得分:10)
Neal Grafter has a blog在这个问题上有一个很好的引用......
在我看来,如果一种语言结构能让你写作,那么它就具有表现力 (并使用)在没有构造的情况下无法编写(和使用)的API。
我会说这意味着你可以在代码中更自然地表达你的想法。
答案 3 :(得分:4)
答案 4 :(得分:4)
这是一个艰难的。
对我来说,这与您表达意图的容易程度有关。这在不同的语言中是不同的,并且还很大程度上取决于您想要做什么,因此这是一个常见的概括区域。当然,它也是主观的和个人的。
很容易认为更高级别的语言总是更具表现力,但我不认为这是真的。这取决于您要表达的内容,即问题域。
如果你想打印具有二进制模式0xdeadbeef
的浮点数,那么在C中比在Bash中更容易做到。然而,与C相比,Bash是一种超高级语言。另一方面,如果你想运行一个程序并将其输出收集到一个文本文件中,这很简单,它在Bash中几乎不可见,但在C中至少需要一页代码(假设一个POSIX环境)。 / p>
答案 5 :(得分:2)
在这里,一个非常有争议的比较:
http://redmonk.com/dberkholz/2013/03/25/programming-languages-ranked-by-expressiveness/
那么,这些指标的最佳语言是什么?
如果你根据中位数和IQR选择前10名,那么 走他们的路口,这就是剩下的。中位数和IQR 名称后紧接着列出:
Augeas(48,28):配置文件的特定于域的语言
Puppet(52,65):用于配置的另一个DSL REBOL(57,57):为分布式计算设计的语言
eC(75,75):Ecere C,具有面向对象的C导数 CoffeeScript(100,23):一种可以转换为JavaScript的高级语言
Clojure(101,51):用于功能性并发编程的Lisp方言
Vala(123,61):GNOME使用的面向对象语言
Haskell(127,71):一种纯功能的编译语言,具有强大的静态类型
答案 6 :(得分:1)
也许这个网站http://gafter.blogspot.com/2007/03/on-expressive-power-of-programming.html可以帮助您
简而言之,他说:在我看来,语言构造富有表现力 如果它允许您编写(和使用)API没有构造就无法编写(和使用)的东西。在Closures for Java提议的语言扩展的上下文中,控制抽象API是竞争提议似乎不支持的那种东西。