我在"javascript是一种非常富有表现力的语言"这样的句子中经常听到这个词.它只是意味着没有很多规则,或者"表达"是否具有更具体的含义?
"表达"意味着编写易于理解的代码很容易,无论是编译器还是人类读者.
表达性的两个因素:
直观易读的结构
缺乏样板代码
将这种富有表现力的Groovy与具有较少表达力的Java eqivalent进行比较:
3.times { println 'Hip hip hooray' }
VS
for(int i=0; i<3; i++) { System.out.println("Hip hip hooray"); }
有时你会为表达性交换精确度 - Groovy示例有效,因为它假设Java让你明确指定的东西.
我认为它意味着它能够以易于阅读和简洁的方式表达想法/算法/任务.
通常我将表达的语言与语法糖相关联,尽管情况并非总是如此.C#表达的例子是:
foreach
(而不是显式编写迭代)
该using
声明(而不是明确地写在try /终于)
查询表达式(编写LINQ查询的简单语法)
扩展方法(允许链接方法调用,同样主要用于LINQ)
匿名方法和lambda表达式(允许更容易的委托和表达式树构造)
另一个例子是泛型:在C#获得泛型之前,你无法ArrayList
在代码中表达" 只包含字符串" 的想法.(当然,您可以记录它,或者编写您自己的StringList
类型,但这并不完全相同.)
Neal Grafter有一个博客,关于这个主题有一个很好的引用...
在我看来,语言结构是富有表现力的,如果它能让你编写(和使用)一个没有构造就无法编写(和使用)的API.
我想这意味着你可以更自然地在代码中表达自己的想法.
这是一个艰难的过程。
对我而言,这与您表达意图的难易程度有关。这在不同的语言中有所不同,并且在很大程度上取决于您要执行的操作,因此这是泛化的领域。当然,它也是主观的和个人的。
容易想到,高级语言总是更具表现力,但我认为这不是事实。这取决于您要表达的内容,即问题域。
例如,如果要打印具有二进制模式的浮点数0xdeadbeef
,则在C中比在Bash中更容易实现。但是,与C相比,Bash是一种超高级语言。另一方面,如果您要运行程序并将其输出收集到文本文件中,则是如此简单,它在Bash中几乎是不可见的,但在C中至少需要一页代码(假定为POSIX环境)。