【Solidity】関数の書き方は?

Solidityにおける関数の書き方について解説します。

構文

まず、関数の構文ですが、以下のようになります。

「戻り値が無い場合(処理だけ行う)」「戻り値が有る場合(処理結果も返す)」の2つがあります。

戻り値が無い場合(処理だけ行う場合)

戻り値が無い場合(処理だけ行う場合)には、関数は、以下のように書きます。

function 関数名([データ型 引数]) [アクセス修飾子] [状態修飾子] {
    // 処理
}

戻り値が有る場合(処理結果も返す場合)

戻り値が有る場合(処理結果も返す場合)には、関数は、以下のように書きます。

function 関数名([データ型 引数]) [アクセス修飾子] [状態修飾子] returns(データ型) {
    // 処理
    return 値(returnsに指定したものと同じデータ型);
}

構文詳細

構文詳細について記します。

関数名

関数名にはmixedCase(最初の単語以外は頭文字を大文字にする)が推奨されています。

また、プライベート関数の場合、先頭にアンダースコア(_)を付けることが推奨されています。

データ型

データ型ですが主に以下があります。

  • bool:真偽値
  • int:符号付き整数
  • uint:符号無し整数
  • fixed:符号付き固定小数点数
  • ufixed:符号無し固定小数点数
  • address:Ethereumアドレス
  • bytes:バイト配列
  • string:文字列
  • enum:列挙型
  • struct:構造体
  • mapping:マッピング/キーと値のペア
  • array:配列

詳しくはこちらをご覧ください。

アクセス修飾子

アクセス修飾子ですが主に以下があります。

  • public:外部から直接アクセスが可能、コントラクト内部や継承先コントラクトからも呼び出しが可能
  • private:同じスマートコントラクト内からのみアクセスが可能、継承先コントラクトからの呼び出しは不可
  • internal:同じスマートコントラクト内からのみアクセスが可能、継承先コントラクトからの呼び出しは可能
  • external:外部スマートコントラクトからのみ呼び出しが可能、コントラクト内部や継承先コントラクトからの呼び出しも不可

詳しくはこちらをご覧ください。

状態修飾子

状態修飾子ですが主に以下があります。

  • view:状態変数(storage変数)の変更を行わない、読取は可能
  • pure:状態変数(storage変数)の読取/変更を行わない、引数は読取/変更が可
  • payable:eth(イーサリアム)の受取が可

サンプルコード

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
 
contract TestContract {

    string greeting = "hi";


    function sayHi() public view returns(string memory) {
        return greeting;
    }


    function _sayHi() private view returns(string memory) {
        return greeting;
    }

    
    function sum(uint x, uint y) public pure returns(uint) {
        return x + y;
    }


    function _sum(uint x, uint y) private pure returns(uint) {
        return x + y;
    }
    
}

基本的な構文は他のプログラミング言語と同様ですが、関数修飾子(アクセス修飾子や状態修飾子)だけSolidity独特かもしれません。それぞれの特徴をしっかりと押さえておきましょう。

タイトルとURLをコピーしました