值类型
1、布尔类型
bool:可能的取值为true和false
2、整形
int | 有符号整形 |
---|---|
uint | 无符号整型 |
uint8 to uint256 | 从8位到256位无符号整型以8 位为步长递增(uint是uint256的别名) |
int8 to int256 | 从8位到256位有符号整型以 8 位为步长递增(int是int256的别名) |
3、定长浮点型
Solidity还没有完全支持定长浮点型。可以声明定长浮点型的变量,但是不能给它们赋值过把它们的赋值给其他变量。(M表示该类型占用的位数,N表示可用的小数位。M必须能整除8,即8到256位。N则是从0到80之间的任意数。)
fixed | 有符号的定长浮点型 |
---|---|
ufixed | 无符号的定长浮点型 |
fixedMxN | 带符号的定长浮点型,fixed与fixed128x19相同。 |
ufixedMxN | 无符号的定长浮点型,ufixed与ufixed128x19相同。 |
浮点型(在许多语言中的 float 和 double 类型,更准确地说是 IEEE 754 类型)和定长浮点型之间最大的不同点是, 在前者中整数部分和小数部分(小数点后的部分)需要的位数 是灵活可变的,而后者中这两部分的长度受到严格的规定。
4、地址类型
地址类型有两种形式。
address | 保存一个20字节的值(以太坊地址的大小) |
---|---|
address payble | 可支付地址 |
5、定长字符数组
bytes1,bytes2,bytes3,…,bytes32。(bytes1长度必须为1字节,同理bytes2长度必须为2字节)
6、变长字节数组
bytes:变长字节数组。他其实是一种特殊的数组,不是值类型。
string:变长UTF-8编码字符串类型。它同样也是一种特殊的数组。
7、枚举类型
枚举类型的数据表示和C语言的基本一致,选项从“0”开始的无符号整数值表示。
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;
contract test {
enum Choices { red, yellow, green, white, black}
Choices action;
Choices constant DefaultChoice = Choices.yellow;//yellow的值为1,赋值给DefaultChoice
// 由于枚举类型不属于 |ABI| 的一部分,因此对于所有来自 Solidity 外部的调用,
// "getChoice" 的签名会自动被改成 "getChoice() returns (uint8)"。
function setAction() public {
action = DefaultChoice;
}
function getChoice() public view returns (Choices) {
return action;
}
function getDefaultChoice() public pure returns (uint) {
return uint(Choices.green);//green的值为2
}
}
运行结果可以看出getChoice()函数中返回值是1,getDefaultChoice()函数中的返回值是2,
8、函数
函数类型是一种表示函数的类型。其使用和很多语言类似,可以将一个函数赋值给另一个函数类型的变量,也可以将一个函数作为参数进行传递,还能在函数调用中返回函数类型变量。 函数类型有两类:
-内部(internal) 函数类型
-外部(external) 函数类型
内部函数只能在合约中进行调用,也就是说只能在当前的代码块中进行调用,外部函数由一个地址和一个函数签名组成,可以通过外部函数调用传递或者返回。
函数类型表示成如下的形式:
function (<parameter types>) {internal|external} [pure|constant|view|payable] [returns (<return types>)]