Solidity

简介

Solidity 是一种编写以太坊智能合约的专用脚本语言,语法上是面向对象的语言,内置了一些区块链相关的对象,如交易、时间戳、块高度等。

Solidity 由于属于 DSL 的特性,在语言本身上是无法和目前的主流编程语言抗衡的,但我们不需要对它有什么要求。

Solidity 中稍微有趣的特性是 modifier,比如:

modifier A() {
    // some code
    _;
}

modifier B() {
    _;
    // some code
}

function getData() A B {
    // some code
}

modifier 是可以自定义内容的修饰符,_ 代表 getData 函数体,意为在 A 中执行 some code,然后执行函数,在 B 中执行函数,然后执行 some code。

modifier 的好处是,可以省去很多重复性的代码,像是一些相同的参数校验,我看到过一些这样的代码:

func a() {
    if obj != nil {
        return
    }
}

func b() {
    if obj != nil {
        return
    }
}

// ... 

如果有 modifier 就可以在视觉上很好的解决这种难堪的写法。

不过 modifier 的问题是,它会让函数的定义变得丑陋,因为 modifier 是不限制数量的,这对代码美感的破坏性甚至超过重复写一些相同的代码。

另外,Python 的 deorators 似乎也是在解决和 modifier 类似的问题,Java 的 annotaion 也是。modifier 并不算是多么独到的特性。

Reference: Solidity

Yul

Yul 是一种中间语言,和 Solidity 没有同等的地位,它似乎不是一种值得去了解的语言。

我们使用这些语言的目的应该还是要开发智能合约而已,而不是学习编程语言。

Reference: Yul

相关