今日來介紹 function 的語法結構

function 裡面有三個很特別的保留字分別是 pureviewpayable,先看下面的簡單說明

function 修飾詞

pure

它的用途是,如果該函式不會修改任何的狀態,就是用 pure

用前兩天的例子來展示

contract test {
   struct Member {
      string name;
      string addr;
   }
   Member member;

   function setMember() public {
      member = Member('syhlion', 'Taiwan');
   }

   //它並沒有對任何狀態做改變
   function getAddress() public view returns (string memory) {
      return member.addr;
   }
}

pure

當函式不讀取,不異動狀態就會用 pure,用上面的例子來說,它有用到 member.addr,所以它有讀取到狀態,必須使用 view

// 這種完全沒有使用合約狀態的fucntion 才能使用 pure
function  plus(unint a,uint b) public pure returns(uint){
    return a+b
}

payable

需要接收 etherfunction 都需要標註上 payable

    function get(username) public payable{
    }

function 可視詞

一般語言裏面對 fucntion,也會有可視(visibility)的包留字,solidity 也不例外,有 publicprivateinternalexternal

public

跟一般語言一樣,就是一個可以公開給大家呼叫的函式

external

大致上跟 public 一樣,但會有一個小缺點,自己合約內要調用這種宣告的 function,會需要使用 this.f()

private

就是私有函式,只能被自己合約所調用,也不會被繼承合約調用。

internal

private 很類似,但是可以如果被別人繼承合約,是能夠調用父層的 function