libro
www.tuyano.com
初心者のためのDart 2入門

関数を利用する (3/6)

作成:2018-03-31 08:06
更新:2018-03-31 08:06

■関数内関数について

関数は、複雑な処理をひとまとめにして簡単に呼び出せるようにします。が、複雑な処理になるほど、関数の中で実行する処理も複雑になります。そうなると、関数の中で、更に「汎用的な処理を関数として定義し呼び出す」という必要が生じることもあるでしょう。

Dartでは、このような「関数内の関数」を作ることができます。関数内関数は、その関数の中でのみ利用することができます。これは、こんな具合に作成します。
戻り値 関数名 ( 引数 ) {

    戻り値 関数名 ( 引数 ) {
        ……処理……
    }

    ……関数の処理……

}

関数内関数を使うときは、関数の中にまず関数内関数を定義しておき、その後に、実際に実行する処理を記述します。現行のDartでは、関数内関数の前に処理を書いてしまうと、その中から関数内関数が呼び出せないのです。

下のリスト欄に、関数内関数の利用例を挙げておきましょう。ここでは、makeReportという関数を定義しています。これは、引数にリストを渡すと、その合計と平均を計算してメッセージとして表示するものです。

この関数内は、getTotalgetAveという2つの関数内関数が作成してあります。これらを呼び出してメッセージを作成しているのがわかりますね。また、よく見ると、getAve関数の中からgetTotal関数を呼び出しているのがわかります。このように関数内関数の中から別の関数内関数を呼び出すこともできるのです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

void main() {
  var arr = [12,34,56,78,90,97,86,53,42,10];
  print(makeReport(arr));
}

String makeReport(List list) {
  
  int getTotal(List list) {
    int total = 0;
    list.forEach((n) => total += n);
    return total;
  }
  
  int getAve(List list) {
    var total = getTotal(list);
    return total ~/ list.length;
  }
  
  var total = getTotal(list);
  var ave = getAve(list);
  return 'total:${total}. ave:${ave}.';
}
※関連コンテンツ

「初心者のためのDart 2入門」に戻る