原文标题:《Solidity 极简入门:2. 数值类型》

原文来源:0xAA

我最近在重新学 solidity,巩固一下细节,也写一个「Solidity 极简入门」,供小白们使用(编程大佬可以另找教程),每周更新 1-3 讲。

所有代码开源在 github:github.com/AmazingAng/WTFSolidity

Solidity 中的变量类型数值类型 (Value Type):包括布尔型,整数型等等,这类变量赋值时候直接传递数值。引用类型 (Reference Type):包括数组和结构体,这类变量占空间大,赋值时候直接传递地址(类似指针)。映射类型 (Mapping Type): Solidity 里的哈希表。函数类型 (Function Type):Solidity 文档里把函数归到数值类型,但我觉得他跟其他类型差别很大,所以单独分一类。

我们只介绍一些常用的类型,不常用的不讲。这篇介绍数值类型,第 3 讲介绍函数类型,第 4 讲介绍引用和映射。

数值类型 1. 布尔型

布尔型是二值变量,取值为 true 或 false。

 

Solidity极简入门 | 第二讲:数值类型

 

布尔值的运算符,包括:

!(逻辑非)

&&(逻辑与,"and")

||(逻辑或,"or")

==(等于)

!=(不等于)

代码:

 

Solidity极简入门 | 第二讲:数值类型

 

上面的代码中:变量_bool 的取值是 true;_bool1 是_bool 的非,为 false;_bool && _bool1 为 false;_bool || _bool1 为 true;_bool == _bool1 为 false;_bool != _bool1 为 true。

2. 整型

整型是 solidity 中的整数,最常用的包括

 

Solidity极简入门 | 第二讲:数值类型

 

常用的整型运算符包括:

比较运算符(返回布尔值): <=, <, ==, !=, >=, >

算数运算符: +, -,一元运算 -, +, *, /, %(取余),**(幂)

代码:

 

Solidity极简入门 | 第二讲:数值类型

 

大家可以跑一下代码,看看这 4 个变量分别是多少。答对奖励个 POAP?

3. 地址类型

地址类型 (address) 存储一个 20 字节的值(以太坊地址的大小)。地址类型也有成员变量,并作为所有合约的基础。有普通的地址和可以转账 ETH 的地址(payable)。payable 的地址拥有 balance 和 tranfer() 两个成员,方便查询 ETH 余额以及转账。

代码

 

Solidity极简入门 | 第二讲:数值类型

 

下一讲介绍函数的时候,会介绍如何使用地址类型。

4. 定长字节数组

字节数组 bytes 分两种,一种定长(byte, bytes8, bytes32),另一种不定长。定长的属于数值类型,不定长的是引用类型(之后讲)。

定长 bytes 可以存一些数据,消耗 gas 比较少。

代码:

 

Solidity极简入门 | 第二讲:数值类型

 

MiniSolidity 变量以字节的方式存储进变量_byte32,转换成 16 进制为:0x4d696e69536f6c69646974790000000000000000000000000000000000000000

_byte 变量存储_byte32 的第一个字节,为 0x4d。

5. 枚举 enum

枚举(enum)是 solidity 中用户定义的数据类型。它主要用于为 uint 分配名称,是程序易于阅读和维护。它与 C 语言中的 enum 类似,把名称从 0 开始 uint 表示:

 

Solidity极简入门 | 第二讲:数值类型

 

它可以显式的和 uint 相互转换,并会检查转换的正整数是否在枚举的长度内,不然会报错:

 

Solidity极简入门 | 第二讲:数值类型

 

enum 的一个比较冷门的变量,几乎没什么人用。

总结

在第二讲,我们介绍了 solidity 中 4 种变量类型,并详细介绍了数值变量(value type) 中的布尔型,整型,地址,定长字节数组和枚举。之后我们会介绍其他几种类型。