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 件のコメント:
コメントを投稿