#9 Dartで学ぶ関数の基本

Dartの関数は、他の現代的な言語と似た、読みやすい書き方が特徴です。この記事では、Dartにおける関数の基本と、Flutter開発で頻出する書き方を解説します。

関数を作ってみる

void greet(String name) {
    print("こんにちは、$name さん");
}

値を返す関数

int add(int a, int b) {
    return a + b;
}

簡潔に書ける矢印構文

処理が1行で済む場合、Dartには波かっことreturnを省略できる、簡潔な書き方があります。

int add(int a, int b) => a + b;

省略可能な位置引数

引数を角かっこ[]で囲むと、省略可能な引数として扱えます。

void greet(String name, [String honorific = "さん"]) {
    print("こんにちは、$name $honorific");
}

greet("太郎");        // こんにちは、太郎さん
greet("太郎", "様");  // こんにちは、太郎様

名前付き引数

Dartには、引数を{}で囲むことで、呼び出し時に名前を指定して渡せる仕組みがあります。

void greet({required String name}) {
    print("こんにちは、$name さん");
}

greet(name: "太郎");

Flutterの画面部品(ウィジェット)を作る際に、この名前付き引数の書き方が頻繁に登場します。引数がいくつもある場合でも、name: ...のように名前を書きながら渡せるため、どの値が何を表しているか読みやすくなります。

関数を値として扱う

Dartでは関数そのものを変数に入れたり、別の関数の引数として渡したりできます。

void applyToEach(List numbers, void Function(int) action) {
    for (var n in numbers) {
        action(n);
    }
}

applyToEach([1, 2, 3], (n) => print(n * 2));

void Function(int)は「intを受け取りvoidを返す関数」という型を表しています。ボタンが押されたときの処理をコールバックとして渡す場面など、Flutter開発では関数を値として扱う場面が非常に多く登場します。

Dartならではの注意点

名前付き引数はrequiredを付けないと省略可能になり、値を渡し忘れてもエラーにならない場合があります。必須にしたい引数には、必ずrequiredを付ける習慣をつけましょう。また、位置引数の省略([])と名前付き引数({})は同じ関数の中で組み合わせて使うこともできますが、両方を多用すると呼び出し方が複雑になりやすいため、用途に応じてどちらか一方に統一するのがおすすめです。

まとめ

Dartの関数は矢印構文で簡潔に書け、名前付き引数はFlutter開発でも重要な書き方です。省略可能な位置引数([])との違いや、requiredの使い方も覚えておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Dartをもっと学びたい方には「ゼロから学ぶFlutterアプリ開発」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本