原文標題:《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。
布爾值的運算符,包括:
!(邏輯非)
&&(邏輯與,"and")
||(邏輯或,"or")
==(等於)
!=(不等於)
代碼:
上面的代碼中:變量_bool 的取值是true;_bool1 是_bool 的非,為false;_bool && _bool1 為false;_bool || _bool1 為true;_bool == _bool1 為false;_bool != _bool1 為true 。
2. 整型
整型是solidity 中的整數,最常用的包括
常用的整型運算符包括:
比較運算符(返回布爾值): <=, <, ==, !=, >=, >
算數運算符: +, -,一元運算 -, +, *, /, %(取餘),**(冪)
代碼:
大家可以跑一下代碼,看看這4 個變量分別是多少。答對獎勵個POAP?
3. 地址類型
地址類型(address) 存儲一個20 字節的值(以太坊地址的大小)。地址類型也有成員變量,並作為所有合約的基礎。有普通的地址和可以轉賬ETH 的地址(payable)。 payable 的地址擁有balance 和tranfer() 兩個成員,方便查詢ETH 餘額以及轉賬。
代碼
下一講介紹函數的時候,會介紹如何使用地址類型。
4. 定長字節數組
字節數組bytes 分兩種,一種定長(byte, bytes8, bytes32),另一種不定長。定長的屬於數值類型,不定長的是引用類型(之後講)。
定長bytes 可以存一些數據,消耗gas 比較少。
代碼:
MiniSolidity 變量以字節的方式存儲進變量_byte32,轉換成16 進制為:0x4d696e69536f6c69646974790000000000000000000000000000000000000000
_byte 變量存儲_byte32 的第一個字節,為0x4d。
5. 枚舉enum
枚舉(enum)是solidity 中用戶定義的數據類型。它主要用於為uint 分配名稱,是程序易於閱讀和維護。它與C 語言中的enum 類似,把名稱從0 開始uint 表示:
它可以顯式的和uint 相互轉換,並會檢查轉換的正整數是否在枚舉的長度內,不然會報錯:
enum 的一個比較冷門的變量,幾乎沒什麼人用。
總結
在第二講,我們介紹了solidity 中4 種變量類型,並詳細介紹了數值變量(value type) 中的布爾型,整型,地址,定長字節數組和枚舉。之後我們會介紹其他幾種類型。