以太坊智能合约开发:Solidity 语言中的数据类型

本文我们介绍Solidity语言的数据类型,重点是值类型,包括布尔类型、整型、地址类型、字节类型、字符串类型和枚举类型。并且通过两个智能合约例子,用于演示这些数据类型的声明与使用方法。

访问 Github 仓库 获取更多资料。

基本概念

Solidity中关于数据类型的定义如下:

  • Solidity是一种静态类型语言,这意味着每个变量都需要在编译时指定变量的类型;
  • Solidity中新声明的变量总是有一个默认值,具体的默认值跟类型有关,例如bool类型的默认值为false。

数据类型

值类型

Solidity提供的基本数据类型。这些类型的变量总是通过值传递的,变量在函数参数或赋值语句中使用时都会被复制。有以下几类值类型的数据类型:

布尔类型

bool:可接受 truefalse 两个值,默认为 false

整型

intuint:分别表示有符号和无符号的整数,默认为0。支持关键字 int8int256,以及 uint8uint256,从8位到256位,以8位为步长递增,intuint 分别是 int256uint256 的别名。

地址类型

address:包含一个20字节的值(代表一个以太坊地址的大小)。一个地址可以用来获取余额,也可以通过转账的方式来转移余额。

字节类型

bytes1bytes2,…,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中编译、部署和运行上面的合约例子,执行结果如下图:

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StevenX5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值