天天看點

Solidity 智能合約開發基礎篇——資料類型(值類型)

作者:tiger老張

本文我們介紹Solidity語言的資料類型,重點是值類型,包括布爾類型、整型、位址類型、位元組類型、字元串類型和枚舉類型。并且通過兩個合約例子來示範這些資料類型的使用方法。

基本概念

Solidity中關于資料類型的定義如下:

  • Solidity是一種靜态類型語言,這意味着每個變量都需要在編譯時指定變量的類型;
  • Solidity中新聲明的變量總是有一個預設值,具體的預設值跟類型有關,例如bool類型的預設值為false。

資料類型

值類型

Solidity提供的基本資料類型。這些類型的變量總是通過值傳遞的,變量在函數參數或指派語句中使用時都會被複制。有以下幾類值類型的資料類型:

1.布爾類型

bool:可接受 true 和 false 兩個值,預設為 false。

2.整型

int 和 uint:分别表示有符号和無符号的整數,預設為0。支援關鍵字 int8 到 int256,以及 uint8 到 uint256,從8位到256位,以8位為步長遞增,int 和 uint 分别是 int256 和 uint256 的别名。

3.位址類型

address:包含一個20位元組的值(代表一個以太坊位址的大小)。一個位址可以用來擷取餘額,也可以通過轉賬的方式來轉移餘額。

4.位元組類型

bytes1,bytes2,...,bytes32:位元組用于存儲固定大小的字元集,長度範圍是1 ~ 32。位元組的一個優點是它使用更少的Gas,是以當我們知道資料的長度時,最好使用它。

5.字元串類型

string:字元串用于存儲等于或大于一個位元組的字元集,字元串的長度是動态的。

6.枚舉類型

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中編譯、部署和運作上面的合約例子,執行結果如下圖:

Solidity 智能合約開發基礎篇——資料類型(值類型)

Solidity 資料類型

例子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中編譯、部署和運作上面的合約例子,執行結果如下圖:

Solidity 智能合約開發基礎篇——資料類型(值類型)

Solidity 枚舉類型

繼續閱讀