iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
Web 3

Smart-Contract Language: Move系列 第 3

Day 3 Primitive Types

  • 分享至 

  • xImage
  •  

Move 支援的 Primitive Type 如下,我們將依序介紹 Integers (u8, u64, u128), Bool, and Address

Integers

Move 支援三種數字類型: u8, u64, u128

對應的長度如下:
https://ithelp.ithome.com.tw/upload/images/20220914/20150953wwRALSl0zG.png

example

// 幾種可以使用的宣告模式
script {
    fun main() {      
            
        let a: u8;
        a = 10;

        let b: u64 = 10;

        let c = 10;
    }
}

Operations

算數

擁有以下幾種運算符號可以操作

+    
-    
*    
%    
/    

比較

擁有以下幾種運算符號可以操作

<
>
<=
>=
==
!=

轉換

轉換可以用在兩個地方

  1. 操作運算符號時,左右兩側參數如果是不同類型,就要使用 as 來執行強制轉換
  2. 整數類型可以轉換為另一種大小的整數類型,Move 只支援整數進行此操作
script {
    fun main() {
        let a: u8 = 10;
        let b: u64 = 100;

        // 只能比較相同類型
        if (a == (b as u8)) abort 11;
        if ((a as u64) == b) abort 11;

                // 轉換為另一種大小
                2u8 as u64
                1 + 3 as u128
    }
}

Bool

與其他語言相同使用方式,true or false

Operations

邏輯

支持三種邏輯運算

&&
||
!

Address

用於表示全局存儲中的位置(有時稱為帳戶)
值是一個 address 128 位(16 字節)的標識符。在給定的 address 可以存儲兩件事:Module and Resource

不能修改,不支持算數運算(類似於 C 語言的指針算法也不允許),因為一開始就被設計為支持靜態驗證

可以使用運行時的 address 來訪問該處的 Resource,但不能訪問 Module

schema

任何有效的 u128 數字值都可以用作 address 的值,例如 42, 0xCAFE, 2021 都是有效的

使用的語法會根據使用的上下文而有所不同:

  • 當用於表達式時,必須以 @ 為前綴

    @<named_address_identifier>
    @<numerical_value>
    
  • 在表達是上下文之外,可以不使用 @ 為前綴

命名

允許在使用地址的任何地方使用標識符代替數值。

example

let a1: address = @0x1; // 0x00000000000000000000000000000001
let a2: address = @0x42; // 0x00000000000000000000000000000042
let a3: address = @0xDEADBEEF; // 0x000000000000000000000000DEADBEEF
let a4: address = @0x0000000000000000000000000000000A;
let a5: address = @Std; // 將名為 Std 地址的值分配給 a5 常數
let a6: address = @66;
let a7: address = @0x42;

// 上面都是所謂的表達式,所以都需要加上前綴 @

// 下面則不需要
module 66::SomeModule {   
    use 0x1::OtherModule; 
    use Std::Vector;      // 使用其他 Module 時可以使用命名地址作為命名空間
    ...
}

module Std::OtherModule {  // 可以使用命名地址作為命名空間來聲明 Module
    ...
}

本篇介紹了三種類型,基本上很常使用,需要掌握本篇內容。
讓我們 Move to Day4


上一篇
Day 2 Concept and Coding Conventions
下一篇
Day 4 Expression and Scope
系列文
Smart-Contract Language: Move30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言