下面说一些Solidity语言中一些常用的类型和值:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract ValuesTypes{
bool public b = true;
uint public u = 123;//uint = uint256 0 to 2**256 -1;
// = uint8 0 to 2**8 -1;
// = uint16 0 to 2**16 -1;
int public i = -123;//int = int256 -2**255 to 2**255 -1;
// =int128 -2**127 to 2**127 -1;
int public minInt = type(int).min;
int public maxInt = type(int).max;
address public addr = 0x3Ded1C92C515138242839c7d30520f07f8D97508;
bytes32 public b32 = 0x122...........;
}
1 布尔类型 bool
布尔类型的关键词是bool,其值可以为true或者false,这个类型与其他语言基本相同。
有两个运算符需要注意,分别是||和&&。在这里,它们遵循短路原则,意思就是如果在||时第一个变量值为true,就不会去看第二个变量了。同样的,如果&&的时候第一个变量为false,也不会去看第二个变量。
Tips:布尔类型在实际的运算与比较当中有可能是某个表达式的结果,如果这个表达式涉及到对某个变量的修改,建议放在布尔类型运算符外。
2 无符号整数 uint
uint 正整数,不可以取负数,默认uint256位
3 有符号整数 int
和unit相反
4 地址类型 address
地址类型是以太坊的一个特有类型,它是一个160位二进制的数,不同于Bitcoin的UTXO模型,以太坊交易是以其特定的账户模型,每个账户都有其对应的地址。
地址类型有几个常用的成员函数可以调用,首先是balance可以调用地址的当前余额,transfer和send可以向当前地址发送代币。
在合约当中,this关键字对应的是该合约的地址,address(this)可以返回对应的值。
5 定长字节数组 bytes
bytes类型又被成为定长字节数组,但是其实它在定义时并不像其他数组那样,它在定义时就是一个固定的长度的储存空间,长度可以从1~32,定义时使用bytes2这样表示2个字节长度的值,bytes1的别称是byte。
当后面不带数字时,bytes单写则是表示不定长数组,就属于引用变量类型了,有时这个写法会带来一些不必要的内存使用,这个后面我们会讨论。
bytes类型的变量在初始化之后就不可以进行更改了,如果要对它进行修改,需要通过遍历的方式赋给一个新的变量。
bytes变量也有一个length的成员函数,可以输出这个变量的长度是多少,便于遍历的执行。