原文標題:《Solidity 極簡入門:2. 數值類型》

原文來源:0xAA

我最近在重新學solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每週更新1-3 講。

所有代碼開源在github:github.com/AmazingAng/WTFSolidity

Solidity 中的變量類型數值類型(Value Type):包括布爾型,整數型等等,這類變量賦值時候直接傳遞數值。引用類型(Reference Type):包括數組和結構體,這類變量佔空間大,賦值時候直接傳遞地址(類似指針)。映射類型(Mapping Type): Solidity 裡的哈希表。函數類型(Function Type):Solidity 文檔裡把函數歸到數值類型,但我覺得他跟其他類型差別很大,所以單獨分一類。

我們只介紹一些常用的類型,不常用的不講。這篇介紹數值類型,第3 講介紹函數類型,第4 講介紹引用和映射。

數值類型1. 布爾型

布爾型是二值變量,取值為true 或false。

Solidity極簡入門 | 第二講:數值類型

布爾值的運算符,包括:

!(邏輯非)

&&(邏輯與,"and")

||(邏輯或,"or")

==(等於)

!=(不等於)

代碼:

Solidity極簡入門 | 第二講:數值類型

上面的代碼中:變量_bool 的取值是true;_bool1 是_bool 的非,為false;_bool && _bool1 為false;_bool || _bool1 為true;_bool == _bool1 為false;_bool != _bool1 為true 。

2. 整型

整型是solidity 中的整數,最常用的包括

Solidity極簡入門 | 第二講:數值類型

常用的整型運算符包括:

比較運算符(返回布爾值): <=, <, ==, !=, >=, >

算數運算符: +, -,一元運算 -, +, *, /, %(取餘),**(冪)

代碼:

Solidity極簡入門 | 第二講:數值類型

大家可以跑一下代碼,看看這4 個變量分別是多少。答對獎勵個POAP?

3. 地址類型

地址類型(address) 存儲一個20 字節的值(以太坊地址的大小)。地址類型也有成員變量,並作為所有合約的基礎。有普通的地址和可以轉賬ETH 的地址(payable)。 payable 的地址擁有balance 和tranfer() 兩個成員,方便查詢ETH 餘額以及轉賬。

代碼

Solidity極簡入門 | 第二講:數值類型

下一講介紹函數的時候,會介紹如何使用地址類型。

4. 定長字節數組

字節數組bytes 分兩種,一種定長(byte, bytes8, bytes32),另一種不定長。定長的屬於數值類型,不定長的是引用類型(之後講)。

定長bytes 可以存一些數據,消耗gas 比較少。

代碼:

Solidity極簡入門 | 第二講:數值類型

MiniSolidity 變量以字節的方式存儲進變量_byte32,轉換成16 進制為:0x4d696e69536f6c69646974790000000000000000000000000000000000000000

_byte 變量存儲_byte32 的第一個字節,為0x4d。

5. 枚舉enum

枚舉(enum)是solidity 中用戶定義的數據類型。它主要用於為uint 分配名稱,是程序易於閱讀和維護。它與C 語言中的enum 類似,把名稱從0 開始uint 表示:

Solidity極簡入門 | 第二講:數值類型

它可以顯式的和uint 相互轉換,並會檢查轉換的正整數是否在枚舉的長度內,不然會報錯:

Solidity極簡入門 | 第二講:數值類型

enum 的一個比較冷門的變量,幾乎沒什麼人用。

總結

在第二講,我們介紹了solidity 中4 種變量類型,並詳細介紹了數值變量(value type) 中的布爾型,整型,地址,定長字節數組和枚舉。之後我們會介紹其他幾種類型。