現代編程語言最有趣的 10 大特性

dev-reading/fe 是一個閱讀、導讀、速讀的 repo,不要依賴於 dev-reading/fe 學習知識。本 repo 只是一個快速瞭解文章內容的工具,並不提供全文解讀和翻譯。你能夠經過本平臺快速瞭解文章裏面的內容,找到感興趣的文章,而後去閱讀全文。javascript

本文討論地址:github.com/dev-reading…java

閱讀時間大概 2 分鐘git


現在大多數「現代」語言都依然使用老舊的 C-style 語法。es6

咱們看一下編程語言的年代:Lisp (1958)、Smalltalk (1972)、Objective-C (1984)、Haskell (1990)、OCaml (1996)、等等。這些都是上個世紀的語言了。github

本文做者選擇了幾個最新的語言:Reason、Swift、Kotlin、Dart 做爲研究對象,總結了 10 個特性:express

1 管道操做符 Pipeline operator

Reason 語法編程

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

對應的 JavaScript 寫法:swift

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 表達式有人喜歡,有人討厭,有人以爲無所謂;我是很是喜歡的,我以前在知乎有個回答:www.zhihu.com/question/55…

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..<self {
            task()
        }
    }
}

3.repetitions({
    print("Hello!")
})
// Hello!
// Hello!
// Hello!複製代碼

JavaScript 能夠在原型上擴展。

我以爲還有要給很是有用的特性,optional-chaining。之因此沒有提到,是由於大多數語言都已經有這個特性了吧,看來 JavaScript 仍是發展太慢啊。。。


閱讀原文:Ten interesting features from various modern languages

討論地址:現代編程語言最有趣的 10 大特性

若是你想參與討論,請點擊這裏

相關文章
相關標籤/搜索