Dartは真のオブジェクト指向言語ですので、関数もオブジェクトであり、関数型(Function type)が用意されています。これは、関数を変数に代入することができ、関数を別の関数の引数として渡すことができる、ということです。Dartクラスのインスタンスを関数のように呼び出すこともできます。
sample1-1(関数定義の例)
var _nobleGases = { 2: 'helium', 10: 'neon', 18: 'argon', }; bool someFunc(int para1){ return _nobleGases[para1] != null; } print(someFunc(2)); //true print(someFunc(1)); //false print(someFunc(10)); //true print(someFunc(3)); //false
sample1-1ではsomeFuncという関数名の関数を定義しています。型注釈として戻り値の型をbool型、引数の型をInt型と指定しています。
引数で指定したkeyに値が存在する場合はtrueを、値がない場合はfalseを返す関数です。
sample1-2
var _nobleGases = { 2: 'helium', 10: 'neon', 18: 'argon', }; someFunc(para1){ //型注釈は省略できる。 return _nobleGases[para1] != null; } print(someFunc(1)); print(someFunc(2)); print(someFunc(3)); print(someFunc(10));
sample1-2のように戻り値・引数の型注釈は無くても動きます。
関数の本体が一文の場合sample1-3のような簡略記法を使えます。
sample1-3
var _nobleGases = { 2: 'helium', 10: 'neon', 18: 'argon', }; bool someFunc(int para1)=> _nobleGases[para1] != null; //簡略記法で関数定義 print(someFunc(2)); print(someFunc(10)); print(someFunc(18)); print(someFunc(100));
=> 式
は
{ return 式;}
の簡略記法です。アロー構文と呼ばれたりします。
アロー(=>)とセミコロン(;)の間には式のみ配置できます。文は配置できません。
ですので、if文は書けませんが、三項演算子(condition ? value1 : value2)は書けます。
参考
https://dart.dev/guides/language/language-tour#built-in-types