文章目录
Solidity 是一种静态类型语言,这意味着每个变量(无论是状态变量还是局部变量)都需要指定其类型。Solidity 提供了几种基本类型,这些类型可以组合形成复杂类型。
此外,不同类型可以在包含运算符的表达式中相互作用,并且具有优先级的区分。
Solidity 没有“未定义”或“空”值的概念,但新声明的变量总是具有默认值,该默认值取决于其类型。为了处理任何意外的值,应该使用 revert
函数回滚整个交易,或者返回一个带有布尔值的元组,其中第二个 bool
值表示操作是否成功。
值类型
值类型的变量始终按值传递,即在作为函数参数或赋值时总是被复制。
与引用类型不同,值类型的声明不指定数据位置,因为它们足够小,可以存储在栈中。唯一的例外是状态变量,状态变量默认存储在存储中,但也可以标记为 transient、constant 或 immutable。
布尔值
bool
:值是 true
或 false
。
整数
int
/ uint
:各种大小的有符号和无符号整数。
关键字 uint8
到 uint256
(以 8 为步长,表示 8 位到 256 位的无符号整数),以及 int8
到 int256
。
uint
和 int
分别是 uint256
和 int256
的别名。
运算符
比较运算符:<=
,<
,==
,!=
,>=
,>
(结果为 bool
)
位运算符:&
,|
,^
(按位异或),~
(按位取反)
移位运算符:<<
(左移),>>
(右移)
算术运算符:+
,-
,一元 -
(仅适用于有符号整数),*
,/
,%
(取模),**
(指数运算)
对于整数类型 X
,可以使用 type(X).min
和 type(X).max
来访问该类型可表示的最小值和最大值。
运算符 ||
和 &&
遵循短路规则。这意味着在表达式 f(x) || g(y)
中,如果 f(x)
计算结果为 true
,则 g(y)
将不会被计算。
注意
Solidity 中的整数受到特定范围的限制。例如,对于 uint32
,其范围为 0
到 2**32 - 1
。
在 Solidity 中,整数运算有两种模式:“溢出”模式(wrapping/unchecked mode) 和 “检查”模式(checked mode)。
默认情况下,运算始终处于 “检查”模式,这意味着如果运算结果超出了类型的值范围,则调用会因失败的断言而回滚。
可以使用 unchecked { ... }
切换到 “溢出”模式,但应谨慎使用。
取模运算
%
的结果是操作数