iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
自我挑戰組

不能不知的區塊鏈:入門指南系列 第 30

智慧合約實作 (五)

  • 分享至 

  • xImage
  •  

不知不覺就來到最後一天了,今天我們來介紹Solisity的條件判斷式和迴圈吧

條件判斷式(if,else if,else)

程式碼如下:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract IfElse {
    function foo(uint x) public pure returns (uint) {
        if (x < 10) {
            return 0;
        } else if (x < 20) {
            return 1;
        } else {
            return 2;
        }
    }

    function ternary(uint _x) public pure returns (uint) {
        return _x < 10 ? 1 : 2;
    }
}

來看看程式碼的內容:

function foo(uint x) public pure returns (uint) {
        if (x < 10) {
            return 0;
        } else if (x < 20) {
            return 1;
        } else {
            return 2;
        }
    }

首先,宣告名稱為foo的函式,並接受x的變數,接著進入到函式主體的部分:
x符合小於10的條件時,函式會回傳0
x不符合小於10的條件,但是符合小於20的條件時,函式會回傳1
x不符合小於10的條件,也不符合小於20的條件時,函式會回傳2

  • 純資料讀取 (pure , view)
    因為區塊鏈上的儲存空間非常珍貴,如果使用的函式只有讀取需求的話,為了避免耗費資源可以宣告成pureviewpure表示的是該函式不涉及任何合約上的變數讀取,view的意思則是會讀取合約內的變數,但不會改變合約內的值。

function ternary(uint _x) public pure returns (uint) {
        return _x < 10 ? 1 : 2;
    }

這段程式碼一樣也是條件判斷式,只是為簡化的寫法:
判斷_x是否小於10,如果_x符合小於10的條件,則回傳1;反之回傳2
等同於下列程式碼:

function ternary(uint _x) public pure returns (uint) {
        if (_x < 10) {
            return 1;
        }
        return 2;
    }

迴圈(for,while)

程式碼如下:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract ForLoop {
    function loop() public {
        for (uint i = 0; i < 10; i++) {
            statement(s);
        }
    }
}

首先,我們宣告一個 loop 函式,接著在函式寫入 for 迴圈,for 迴圈的規則為(初始值;終止條件;數值更改),以上面程式碼舉例,先宣告一個變數 i 其值為0 , 當變數 i 的值符合小於10的條件,for 迴圈就會持續運作下去,並且執行 { } 內的指令,每做完一次 i 就會 +1
所以,上述的 for 迴圈總共會執行10次,從 i = 0i = 9

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract WhileLoop {
    function loop() public {
        uint j = 0;
        while (j < 10) {
            j++;
        }
    }
}

接下來換 while 迴圈,一樣先宣告一個 loop 函式,接著在函式寫入 while 迴圈,while 的規則是必須符合 while 後面括號內的條件,以上面的程式碼做舉例, 先宣告一個變數 j 其值為0,當 j 符合括號內的條件,也就是(j < 10)while 迴圈就會持續運作下去,並且執行 { } 內的指令(j++)。
因此,上述的 while 迴圈總共會執行10次,從 j = 0j = 9

另外,迴圈常常會搭配 continuebreak 一起使用。

continue :回到迴圈的一開始,重新執行。
break :中斷迴圈。

for 迴圈做舉例

contract ForLoop {
    function loop() public {
        for (uint i = 0; i < 10; i++) {
            if (i == 3) {
                continue;
            }
            if (i == 5) {
                break;
            }
        }
    }
}

上述程式碼會總共執行6次,從 i = 0i = 5

參考資料:https://solidity-by-example.org/loop/


上一篇
智慧合約實作 (四)
系列文
不能不知的區塊鏈:入門指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言