主要分成下列幾種,今天介紹的是數值類型。
數值類型賦值時可直接傳遞數值,且數值類型的變數是互相獨立的。
分成以下類型:
bool。int、uint。address、address payable。bytes1、bytes32。enum。bool 的值只有 true 和 false 兩種。
bool public _bool = true;
! NOT,非&& AND,與|| OR,或== 等於!= 不等於bool public _bool1 = !_bool; // 取 NOT,_bool1 結果是 false
bool public _bool2 = _bool && _bool1; // AND,_bool2 結果是 false
bool public _bool3 = _bool || _bool1; // OR,_bool3 結果是 true
bool public _bool4 = _bool == _bool1; // 相等,_bool4 結果是 false
bool public _bool5 = _bool != _bool1; // 不相等,_bool5 結果是 true
int 是有號整數,從 int8 、int16 ……到 int256,後面都是接 8 的倍數,表示占幾位元,int8 的範圍是 -128 ~ 127。int256 可直接由 int 表示。uint 是無號整數,從 uint8 到 uint256,後面都是接 8 的倍數,表示佔幾位元,uint8 的範圍是 0~ 255。uint256 可直接由 uint 表示。| 比較運算符 | 算術運算符 |
|---|---|
<= 小於等於 |
+ 加法 |
< 小於 |
- 減法 |
== 等於 |
* 乘法 |
!= 不等於 |
/ 除法 |
>= 大於等於 |
% 取餘數 |
> 大於 |
** 冪次 |
int public _int = -1; // 整數,包含負數
uint public _uint = 1; // 正整數
uint256 public _number = 20220330; // 256 位元正整數
uint256 public _number1 = _number + 1; // 四則運算,_number1 是 20220331
uint256 public _number2 = 2**2; // 指數,_number2 是 4
uint256 public _number3 = 7 % 2; // 取餘數,_number3 是 1
bool public _numberbool = _number2 > _number3; // 比大小,_number4 是 true
地址類型分成:
address:儲存 20 byte 的乙太坊地址。address payable 類似 address 但比普通地址多了 transfer 和 send 的成員方法,用於轉帳乙太幣,不過 send 在轉帳失敗時只會回傳 false,而不會回復交易狀態,開發者需要自行處理失敗狀況。address public _address = 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;
address payable public _address1 = payable(_address);
uint256 public balance = _address1.balance;
_address1.transfer(1);
payable(_address) 將普通的 address 轉換為 payable address,用來允許此地址之後可以轉帳、查餘額。_address1.balance 用來獲取地址持有的乙太幣餘額。_address1.transfer(1); 從合約的餘額中向 _address1 地址發送 1 wei(1 以太幣等於 10^18 wei)。transfer() 會在發送失敗時自動回退交易並拋出錯誤,因此它是一個安全進行資金轉移的方式。位元組陣列分成固定長度和不固定長度兩種,固定長度的位元組陣列屬於數值類型,陣列長度在宣告之後不能改變,長度分為從 bytes1、bytes8、……,最多到 bytes32。
不定長度的位元組陣列屬於引用類型,在宣告後可以改變長度,包含 bytes,之後會提到。
bytes32 public _byte32 = "MiniSolidity";
bytes1 public _byte1 = _byte32[0];
bytes2 public _byte2 = _byte32[1];
"MiniSolidity" 以位元組的方式儲存進變數 _byte32,用 16 進制來看就是 0x4d696e69536f6c69646974790000000000000000000000000000000000000000,_byte32[0] 擷取第一個位元組 0x4d 的部分,存入變數 _byte1 中,_byte32[1] 擷取第二個位元組 0x69 的部分,存入變數 _byte2 中。
enum 是 Solidity 中由使用者定義的資料類型,主要用在位 uint 分配名稱,使程式易於閱讀和維護,他與 C 語言的 enum 類似,使用名稱來代替從 0 開始的 uint。
enum ActionSet { Buy, Hold, Sell }
ActionSet action = ActionSet.Buy;
function enumToUint() external view returns(uint){
return uint(action);
}
說明:
enum ActionSet { Buy, Hold, Sell } 用 enum 將 uint 0, 1, 2 表示為 Buy, Hold, SellActionSet action = ActionSet.Buy; 建立 enum 變數 action,並將 action 初始化為 ActionSet.Buy,action 變數當前的值對應 enum 中的 Buy,其數值是 0。external 是一個外部函數,可以被外部合約或外部使用者呼叫。view 表示這個函數不會改變合約的狀態,只是查看(讀取)資料。returns(uint) 指定函數的返回類型為 uint。return unit(action) 將 action 的值轉換為 uint,並返回這個值。由於 action 被設為 ActionSet.Buy,其對應的整數值是 0。