solidity中的变量类型:
1.数值类型:例如整数型,布尔型,这类变量赋值时候直接传递数值。
2.引用类型:包括数组和结构体,这类变量占空间大,赋值时候直接传递地址(类似指针)。
3.映射类型:solidity中的哈希表。
4.函数类型:solidity文档里把函数归到数值类型,但我觉得他跟其他类型差别很大,所以单独分一类。
我们只介绍一些常用的类型,不常用的不讲。这篇介绍数值类型,后续会补出。
一,布尔型是二值变量,取值是true和false。
//布尔值
bool public _bool = ture;
布尔值的运算符,包括:
- ! (逻辑非)
- && (逻辑与, "and" )
- || (逻辑或, "or" )
- == (等于)
- != (不等于)
// 布尔运算
bool public _bool1 = !_bool; //取非
bool public _bool2 = _bool && _bool1; //与
bool public _bool3 = _bool || _bool1; //或
bool public _bool4 = _bool == _bool1; //相等
bool public _bool5 = _bool != _bool1; //不相等
上面的代码中:变量_bool的取值是true
;_bool1
是_bool
的非,为false;
_bool && _bool1
为false
;_bool || _bool1
为true
;_bool == _bool1
为false
;_bool != _bool1
为true。值得注意的是:
&&
和 ||
运算符遵循短路规则,这意味着,假如存在f(x)||g(y)
的表达式,如果f(x)
是true
,g(y)
不会被计算,即使它和f(x)
的结果是相反的。
二,整数类型
整型是solidity中的整数,平常我最常用如下
// 整型
int public _int = -1; // 整数,包括负数
uint public _uint = 1; // 正整数
uint256 public _number = 20220914; // 256位正整数
常用的整型运算符包括:
- 比较运算符(返回布尔值):
<=
,<
,==
,!=
,>=
,>
- 算数运算符:
+
,-
, 一元运算-
,+
,*
,/
,%
(取余),**
(幂)
// 整数运算
uint256 public _number1 = _number + 1; // +,-,*,/
uint256 public _number2 = 2**2; // 指数
uint256 public _number3 = 7 % 2; // 取余数
bool public _numberbool = _number2 > _number3; // 比大小
欢迎在评论区打出这4个数的输出结果。
三,地址类型(address)存储一个 20 字节的值(以太坊地址的大小)。地址类型也有成员变量,并作为所有合约的基础。有普通的地址和可以转账ETH
的地址(payable
)。payable
的地址拥有balance
和tranfer()
两个成员,方便查询ETH
余额以及转账。
// 地址
address public _address = 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;
address payable public _address1 = payable(_address); // payable address,可以转账、查余额
// 地址类型的成员
uint256 public balance = _address1.balance; // balance of address
后续会介绍如何使用地址类型。
四,定长字节数组
字节数组bytes
分两种,一种定长(byte
, bytes8
, bytes32
),另一种不定长。定长的属于数值类型,不定长的是引用类型(之后讲)。 定长bytes
可以存一些数据,消耗gas比较少。gas是驱动以太坊Dapp的能源,Dapp收取gas费取决于功能逻辑的复杂程度。
// 固定长度的字节数组
bytes32 public _byte32 = "MiniSolidity";
bytes1 public _byte = _byte32[0];
五,枚举enum
枚举(enum
)是solidity
中用户定义的数据类型。它主要用于为uint
分配名称,是程序易于阅读和维护。它与C语言
中的enum
类似,把名称从0
开始uint
表示:
// 用enum将uint 0, 1, 2表示为Buy, Hold, Sell
enum ActionSet { Buy, Hold, Sell }
// 创建enum变量 action
ActionSet action = ActionSet.Buy;
它可以显式的和uint
相互转换,并会检查转换的正整数是否在枚举的长度内,不然会报错:
// enum可以和uint显式的转换
function enumToUint() external view returns(uint){
return uint(action);
}