String greeting(String name) { String words = 'Hello, ${name}!'; print(words); return words; }return文を通らずに関数を抜けた場合(例外が発生した場合を除く)、エラーにはならずnullが返ります。
関数の中に式がひとつしかないときは、次のような書き方もできます。この場合、関数の戻り値は式の値になります。
String greeting(String name) => 'Hello, ${name}!';無名関数も同じように書くことができます。
main() { Function greeting1 = (name) { return 'Hello, ${name}!'; }; print(greeting1('world')); // 書き方が違うだけで同じ。 Function greeting2 = (name) => 'Hello, ${name}!'; print(greeting2('world')); }無名関数はコレクションの処理ではよく使われます。サンプルコード
main() { var even = [1, 2, 3, 4].filter((e) => e % 2 == 0); even.forEach((e) => print(e)); // 2 4 }関数を返す関数も書くことができます。クロージャとしての使い方も可能です。サンプルコード
newCounter() { var i = 0; return () => ++i; } main() { var c = newCounter(); print(c()); // 1 print(c()); // 2 print(c()); // 3 }関数には省略可能なパラメーターが指定できます。省略可能なものについてはかっこ [] で囲います。また、省略可能なパラメーターにはデフォルト値が指定できます。省略可能なパラメーターで、デフォルト値がないものについて省略した場合、nullが設定されます。サンプルコード
// 仮引数twoとthreeは省略可能。 void printNumber(int one, [int two, int three = 3]) { print('${one}, ${two}, ${three}'); } main() { printNumber(1, 2, 3); // 1, 2, 3 printNumber(1, 2); // 1, 2, 3 printNumber(1); // 1, null, 3 // デフォルト値がない引数が省略されるとnullになる。 }ただし、インターフェイスや抽象メソッドではデフォルト値を指定できません。サンプルコード
interface I { // void greeting([String name = 'world']); // 上の宣言はエラー。次のようにデフォルト値がなければ問題ない。 void greeting([String name]); } class C implements I { // 抽象メソッドでなければデフォルト値を指定可能。 void greeting([String name = 'world']) { print('Hello, ${name}!'); } } main() { new C().greeting(); // Hello, world! }また、省略可能なパラメーターは名前付きの引数指定に対応します。サンプルコード
void printNumber(int one, [int two, int three]) { print('${one}, ${two}, ${three}'); } main() { printNumber(1, three: 3); // 1, null, 3 }
こちらもどうぞ
0 件のコメント:
コメントを投稿