Dart公式ドキュメントを読んでみよう! Part 3

カズキ
仕事と暮らし

前回の記事ではDart公式ドキュメントを参考に、Dartに標準で組み込まれている型についてご紹介しました。
今回は関数の基本的な事項とパラメーターについてご紹介いたします。
※ 今回は省略しきれなかったスコープやクロージャに関しては、JavaScriptでもお馴染みの部分が多いため、ドキュメントをご確認いただければと思います。

記事内で参照するページのご紹介(再掲)

・Dartのドキュメント(https://dart.dev/guides/language/language-tour
–> 内容はこのページに沿っています。

・Dart Pad(https://dartpad.dev/) –> Dartのコードを試せるplaygroundです。コードをすぐに試せます。

Dartにおける関数

Dartでは、「関数もオブジェクト」で、Function型を持ちます。
以下は関数の実装例です。


    int sum(int num1, int num2) {
      return num1 + num2;
    }
  

実行する場合は次のようにします。
実行結果は下の画像のようになりました。


    int result = sum(123, 789); // 関数呼び出し
  
sum関数の実行結果は912

アロー関数

関数に含まれる式が1つの場合は、アロー関数が利用できます。
書き方はJavaScriptにおけるアロー関数と同じです。
上で定義したsum関数は式が1つだけなので、以下のように記述できます。


    int sum(int num1, int num2) => num1 + num2;
  

名前付きパラメーターとオプショナル位置パラメーター

関数には特別なパラメーターの指定方法が2種類あります。
これらは、通常のパラメーター指定の後に、いずれか1つだけを含めることができます。
まずは名前付きパラメーターの例を示します。


    int sum(int num1, int num2, {int? weight1, int? weight2}) {

      // weight1 が null でない場合は weight1 * num1 にする。 
      final weightNum1 = weight1 != null ? weight1 * num1 : num1;

      // weight2 が null でない場合は weight2 * num2 にする。 
      final weightNum2 = weight2 != null ? weight2 * num2 : num1;

      return weightNum1 + weightNum2;
    }
  

この関数では、先ほどの sumという関数に、2つの名前付き引数を追加しました。
呼び出す際は以下のように呼び出します。
結果は下の画像のようになりました。


    int result = sum(123, 789, weight1: 10, weight2: 5); // 関数呼び出し
  
sum関数(名前付き引数を追加)の実行結果は5175

名前付きパラメーターとして指定されたものはweight1: 10のように呼び出すことができます。
注意として、名前付きパラメータは原則、int?のように、オプショナルな引数として指定するという点です。
パラメーターを必須としたい場合は、以下のようにrequiredアノテーションをつけます。
この時、required int? weight1のようにした場合は、引き続きweight1nullableであることに注意してください。


    // 名前付き引数を必須にした
    // 以下では required int としたので、weight1 は nullable ではない
    int sum(int num1, int num2, {required int weight1, required int weight2}) {
      final weightNum1 = weight1 != null ? weight1 * num1 : num1;
      final weightNum2 = weight2 != null ? weight2 * num2 : num1;

      return weightNum1 + weightNum2;
    }
  

次にオプショナル位置パラメーターについてです。
名前付きパラメーターと違い、オプショナル位置パラメーターはweight1: 3のように指定するものではありません。
また、「オプショナル」とあるように、必須パラメーターを設定するものではありません。
以下に例を示します。


    int sum(int num1, int num2, [int? weight1, int? weight2]) {
      final weightNum1 = weight1 != null ? weight1 * num1 : num1;
      final weightNum2 = weight2 != null ? weight2 * num2 : num1;
  
      return weightNum1 + weightNum2;
    }
  

オプショナルパラメーターは[]で表記します。
また、この中で定義するパラメータは全てint?のようにオプショナルにして定義します。
オプショナルパラメーターの特徴は、「デフォルト値を設定できる」ことです。
以下に例を示します。(パラメーター部分以外は名前付きパラメーターの説明で用いたものと同じです)


    int sum(int num1, int num2, [int? weight1 = 10, int? weight2 = 20]) {
      final weightNum1 = weight1 != null ? weight1 * num1 : num1;
      final weightNum2 = weight2 != null ? weight2 * num2 : num1;
  
      return weightNum1 + weightNum2;
    }
  

この例では、呼び出し時にweight1, weight2が指定されなかった場合はそれぞれ、「10」、「20」として処理されます。
実際に値を指定せずに呼び出すと以下のようになります。


    sum(4, 8);  // 関数呼び出し
  
sum関数(引数は4, 8)の実行結果は200

いかがでしたでしょうか。
Part3ともなると、だんだんと理解が深まってきましたね。
次回は「クラス」についてご紹介いたします。

カズキ

山口県生まれ、山口県育ち。超インドアなので外出することは少なめですが、Webを身近に感じていただける技術トピックなどを中心にご紹介できればと思っています。よろしくお願いいたします!

Share

Other Blogs

REC.

  1. HOME
  2. BLOG
  3. 仕事と暮らし
  4. Dart公式ドキュメントを読んでみよう! Part 3

CONTACT US