各种类型介绍
- 数值类型(Value Type):包括布尔型(bool),整数型(int、uint、uint256)等等,这类变量赋值时候直接传递数值。
- 引用类型(Reference Type):包括数组和结构体,这类变量占空间大,赋值时候直接传递地址(类似指针)。
- 映射类型(Mapping Type):
Solidity
里的哈希表。 - 函数类型(Function Type):
Solidity
文档里把函数归到数值类型,但我觉得他跟其他类型差别很大,所以单独分一类。
布尔型
布尔型是二值变量,取值为true或false。用大白话来说就是只能正确或者错误
布尔值的运算符,&& 和 ||运算符遵循短路规则,包括:
-
! (逻辑非)
-
&& (逻辑与, “and” ) 双方有一个假的 结果就是假的
-
|| (逻辑或, “or” ) 双方有一个真的 结果就是真的 当第一个是真的时候不执行第二个
-
== (等于) 判断值是否相等
-
!= (不等于)
整型
// 整型int public _int = -1; // 整数,包括负数uint public _uint = 1; // 正整数uint256 public _number = 20220330; // 256位正整数
常用的整型运算符包括:
代码例子
地址类型 (如何使用放在函数那一篇里面给大家讲解)
地址类型(address)存储一个 20 字节的值(以太坊地址的大小)。地址类型也有成员变量,并作为所有合约的基础。有普通的地址和可以转账ETH的地址(payable)。其中,payable修饰的地址相对普通地址多了transfer和send两个成员。在payable修饰的地址中,send执行失败不会影响当前合约的执行(但是返回false值,需要开发人员检查send返回值)。balance和transfer(),可以用来查询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比较少。
代码
// 固定长度的字节数组
bytes32 public _byte32 = "HelloWorld";
bytes1 public _byte = _byte32[0]; //存储_byte32的第一个字节,为0x48。
bytes1存放一个字节
HelloWorld变量以字节的方式存储进变量_byte32,转换成16进制为:0x48656c6c6f576f726c6400000000000000000000000000000000000000000000
枚举 enum (基本上没有人使用)
枚举(enum)是solidity中用户定义的数据类型。它主要用于为uint分配名称,使程序易于阅读和维护。它与C语言中的enum类似,使用名称来代替从0开始的uint:
可以明显看到如果不是显式的和uint相互转换,是不会出现结果的。