主要分成下列幾種,今天介紹的是數值類型。
數值類型賦值時可直接傳遞數值,且數值類型的變數是互相獨立的。
分成以下類型:
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。