资讯专栏INFORMATION COLUMN

现代编程语言最有趣的 10 大特性

sanyang / 2272人阅读

摘要:本文地址阅读时间大概分钟如今大多数现代语言都依然使用老旧的语法。我们看一下编程语言的年代等等。这些都是上个世纪的语言了。我觉得还有要给非常有用的特性,。之所以没有提到,是因为大多数语言都已经有这个特性了吧,看来还是发展太慢啊。。。

dev-reading/fe 是一个阅读、导读、速读的 repo,不要依赖于 dev-reading/fe 学习知识。本 repo 只是一个快速了解文章内容的工具,并不提供全文解读和翻译。你可以通过本平台快速了解文章里面的内容,找到感兴趣的文章,然后去阅读全文。

本文地址:https://github.com/dev-readin...

阅读时间大概 2 分钟

如今大多数“现代”语言都依然使用老旧的 C-style 语法。

我们看一下编程语言的年代:Lisp (1958)、Smalltalk (1972)、Objective-C (1984)、Haskell (1990)、OCaml (1996)、等等。这些都是上个世纪的语言了。

本文作者选择了几个最新的语言:Reason、Swift、Kotlin、Dart 作为研究对象,总结了 10 个特性:

1 管道操作符 Pipeline operator

Reason 语法

let newScore = me.score
  |> double
  |> (it) => add(7, it)
  |> (it) => boundScore(0, 100, it);

对应的 JavaScript 写法:

boundScore(0, 100, add(7, double(me.score)));

而 es 也已经有了对应的提案:tc39/proposal-pipeline-operator

2 模式匹配 Pattern matching

Kotlin 语法

when (x) {
    in 1..10 -> print("x is in the range")
    in validNumbers -> print("x is valid")
    !in 10..20 -> print("x is outside the range")
    else -> print("none of the above")
}
3 Reactive (Rx) programming build in the language

Dart 语法

input.onKeyDown                                              
  .where((e) => e.ctrlKey && e.code == "Enter")              
  .forEach((e) => dispatch(addTodoAction(e.target.value)));
4 lambda 函数的默认参数

Kotlin 语法(使用 it 作为默认参数)

strings
  .filter{ it.length == 5 }
  .map{ it.toUpperCase() }

对比 JavaScript

strings
  .filter{ it => it.length === 5 }
  .map{ it => it.toUpperCase() }
5 解构 Destructuring

Reason 语法:

let someInts = (10, 20);
let (ten, twenty) = someInts;

type person = {name: string, age: int};
let somePerson = {name: "Guy", age: 30};
let {name, age} = somePerson;

Kotlin 语法

data class Person(val name: String, val age: Int)
val(name, age) = Person("Guy", 20)

es6 已经有了数组解构,es8 增加了对象解构

6 操作符级联 Cascade operator

Dart 语法

querySelector("#button") // Get an object.
  ..text = "Confirm" // Use its members.
  ..classes.add("important")
  ..onClick.listen((e) => dispatch(confirmedAction()));

对应的 JavaScript 写法

var button = querySelector("#button");
button.text = "Confirm";
button.classed.add("important");
button.onClick.listen((e) => dispatch(confirmedAction()));

如果使用 jQuery 基本在写法上就和 dart 一致了,但是两者有本质的不同

7 if 表达式 If expressions

Kotlin 语法

val result = if (param == 1) {
    "one"
} else if (param == 2) {
    "two"
} else {
    "three"
}

对于 if 表达式有人喜欢,有人讨厌,有人觉得无所谓;我是非常喜欢的,我之前在知乎有个回答:https://www.zhihu.com/questio...

8 Try expressions

Kotlin 语法

val result = try {
    count()
} catch (e: ArithmeticException) {
    throw IllegalStateException(e)
}
9 自动科里化 Automatic currying

Reason 语法:

let add = (x, y) => x + y;   /* same as (x) => (y) => x + y; */
let five = add(2,3);         /* 5 */
let alsoFive = add(2)(3);    /* 5 */
let addFive = add(5);        /* y => 5 + y; */
let eleven = addFive(6);     /* 11 */
let twelve = addFive(7);     /* 12 */
10 方法扩展 Method extensions

Swift 语法:

extension Int {
    func repetitions(task: () -> Void) {
        for _ in 0..

JavaScript 可以在原型上扩展。

我觉得还有要给非常有用的特性,optional-chaining。之所以没有提到,是因为大多数语言都已经有这个特性了吧,看来 JavaScript 还是发展太慢啊。。。

继续阅读原文:https://medium.com/@kasperpeu...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89789.html

相关文章

  • 前端每周清单半年盘点之 JavaScript 篇

    摘要:前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点分为新闻热点开发教程工程实践深度阅读开源项目巅峰人生等栏目。背后的故事本文是对于年之间世界发生的大事件的详细介绍,阐述了从提出到角力到流产的前世今生。 前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点;分为新闻热点、开发教程、工程实践、深度阅读、开源项目、巅峰人生等栏目。欢迎...

    Vixb 评论0 收藏0
  • 前端学习资源

    摘要:掘金日报第四期使用怎么能不知道这些插件合集掘金日报主打分享优质深度技术内容,技术内容分前端后端产品设计工具资源和一些有趣的东西。目前已经涵盖了的相关资源链接,供大家参考与学习。 【掘金日报】第四期 使用Sublime?怎么能不知道这些 Sublime 插件合集! 掘金日报主打分享优质深度技术内容,技术内容分:前端、后端、Android、iOS、产品设计、工具资源和一些有趣的东西。 前端...

    xzavier 评论0 收藏0
  • 前端学习资源

    摘要:掘金日报第四期使用怎么能不知道这些插件合集掘金日报主打分享优质深度技术内容,技术内容分前端后端产品设计工具资源和一些有趣的东西。目前已经涵盖了的相关资源链接,供大家参考与学习。 【掘金日报】第四期 使用Sublime?怎么能不知道这些 Sublime 插件合集! 掘金日报主打分享优质深度技术内容,技术内容分:前端、后端、Android、iOS、产品设计、工具资源和一些有趣的东西。 前端...

    weij 评论0 收藏0
  • 看吧,这就是现代化 PHP 该有样子

    摘要:这大概是我没有及早使用,或多数开发者流连现状造成的。它就是,一个的框架。行为驱动开发是来自测试驱动开发的开发过程。简单的说,它就是经常可能一天几次将小块代码整合进基础代码当中的行为。 showImg(https://segmentfault.com/img/remote/1460000013769815); 这是一篇社区协同翻译的文章,已完成翻译,更多信息请点击 协同翻译介绍 。 文章...

    Tangpj 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<