语句¶
运算符¶
- 布尔运算符
&& // 与
|| // 或
! // 非
- 比较运算符(返回布尔值)
==
!=
>
>=
<
<=
- 算数运算符
+
-
*
/
% // 取余
** // 乘方(幂)
判断语句¶
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract IfElse {
function demo(uint _x) external pure returns (uint) {
if (_x < 10) {
return 1;
} else if (_x < 20) {
return 2;
} else {
return 3; // 最后这个else可以省略掉
}
}
// 三元表示法
function demo2(uint _x) external pure returns (uint) {
return _x < 10 ? 1 : 2;
}
}
循环语句¶
智能合约中要尽可能控制循环的次数以节省Gas
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract ForAndWhileLoops {
function loops() external pure {
// for循环
for (uint i = 0; i < 10; i++) {
if (i == 3) {
continue; // 跳过本次循环
}
if (i == 5) {
break; // 结束循环
}
}
// while循环
uint j = 0;
while (j < 10) {
j++;
}
}
}
报错控制¶
如果不符合条件,则状态回滚,Gas返还,报错
错误描述越长消耗Gas越高,可以用自定义错误节省Gas
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract Error {
// require
function demo1(uint _i) public pure {
require(_i <= 10, "error tips"); // 错误信息越长消耗Gas越高
}
// revert
function demo2(uint _i) public pure {
if (_i > 10) {
revert("error tips"); // 错误信息越长消耗Gas越高
}
}
// error 自定义错误,需要搭配revert使用
error MyError(address caller, uint i); // 可以不带参数
function demo3(uint _i) public view {
if (_i > 10) {
revert MyError(msg.sender, _i); // 节省Gas
}
}
// assert 断言
uint public num = 123;
function demo4() public view {
assert(num == 123);
}
}