本文我们介绍Solidity语言的数据类型,重点是值类型,包括布尔类型、整型、地址类型、字节类型、字符串类型和枚举类型。并且通过两个智能合约例子,用于演示这些数据类型的声明与使用方法。
访问 Github 仓库 获取更多资料。
基本概念
Solidity中关于数据类型的定义如下:
- Solidity是一种静态类型语言,这意味着每个变量都需要在编译时指定变量的类型;
- Solidity中新声明的变量总是有一个默认值,具体的默认值跟类型有关,例如bool类型的默认值为false。
数据类型
值类型
Solidity提供的基本数据类型。这些类型的变量总是通过值传递的,变量在函数参数或赋值语句中使用时都会被复制。有以下几类值类型的数据类型:
布尔类型
bool
:可接受 true
和 false
两个值,默认为 false
。
整型
int
和 uint
:分别表示有符号和无符号的整数,默认为0。支持关键字 int8
到 int256
,以及 uint8
到 uint256
,从8位到256位,以8位为步长递增,int
和 uint
分别是 int256
和 uint256
的别名。
地址类型
address
:包含一个20字节的值(代表一个以太坊地址的大小)。一个地址可以用来获取余额,也可以通过转账的方式来转移余额。
字节类型
bytes1
,bytes2
,…,bytes32
:字节用于存储固定大小的字符集,长度范围是1 ~ 32。字节的一个优点是它使用更少的Gas,所以当我们知道数据的长度时,最好使用它。
字符串类型
string
:字符串用于存储等于或大于一个字节的字符集,字符串的长度是动态的。
枚举类型
enum
:创建用户定义的数据类型,用于为一个整型常量分配一个名称,这使得合约具有可读性、可维护性和更不容易出错。枚举的选项可以用从0开始的无符号整数值表示。
语法如下:
enum <enum_name> { element 1, element 2, ..., element n }
引用类型
引用类型变量存储数据的位置。在引用类型的定义中,两个不同的变量可以引用同一个位置,其中一个变量的任何更改都会影响另一个变量。引用类型包括数组、结构和映射。关于引用类型,我们将在后面的课程中单独介绍。
合约例子
例子1
基本数据类型的声明与用法。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
// 值类型
contract DataTypes {
// 布尔类型
bool public boo = true;
// 整型
uint8 public u8 = 123;
uint256 public u256 = 456;
uint public u = 789;
int8 public i8 = -1;
int256 public i256 = -456;
int public i = -789;
// 整型的最小值与最大值
int public minInt = type(int).min;
int public maxInt = type(int).max;
// 地址类型
address public addr = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
uint public balance = addr.balance;
// 字节类型
bytes1 public b1 = 0x1a;
bytes2 public b2 = 0x1a2b;
bytes32 public b32 = 0x35c777b82e0fb4652a3562e28e1cf714ba503232888a7334e08377cb12cdd29c;
// 字符串类型
string public str = "this is a string data type";
// 默认值
bool public defaultBoo; // false
uint public defaultUint; // 0
int public defaultInt; // 0
address public defaultAddr; // 0x0000000000000000000000000000000000000000
}
输出:我们在Remix中编译、部署和运行上面的合约例子,执行结果如下图:
例子2
枚举类型的声明及用法。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
// 枚举类型
contract Enum {
// 定义一个枚举类型
enum Action { Up, Down, Left, Right }
// 定义变量,默认值为第一个元素,即"Up"的值
Action public action;
// 设置默认值
function setDefault() public {
action = Action.Left;
}
// 设置,传递一个uint值(0-3)
function set(Action _action) public {
action = _action;
}
// 取值,返回一个uint值
function get() public view returns(Action) {
return action;
}
// 取最小值
function getMinValue() public pure returns(Action) {
return type(Action).min;
}
// 取最大值
function getMaxValue() public pure returns(Action) {
return type(Action).max;
}
}
输出:我们在Remix中编译、部署和运行上面的合约例子,执行结果如下图:文章来源:https://www.toymoban.com/news/detail-784615.html
文章来源地址https://www.toymoban.com/news/detail-784615.html
到了这里,关于以太坊智能合约开发:Solidity 语言中的数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!