【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part09 関数

基礎 から 学ぶ Flutter 」という書籍で  学習 したことを ブログでアウトプットしていこうと思います。今回は Dart編 ( part09 )です。

前回

【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part08 関数

今回も関数についての学習です。

関数(メソッド?)の書き方

匿名関数

Dartでは関数もオブジェクトとして扱います。

Dartは真のオブジェクト指向言語なので

余談ですが筆者の熱の入り方がわかります。
このくらいの熱量が無いと書籍を出版できないんでしょね。素晴らしい!

関数はFuncitonというクラスで扱われるようです。

匿名では無い関数というのはどういった関数なのでしょうか。
それは普通の関数(名前がついている関数)になります。

// 匿名では無い関数(関数に「hoge」という名前が定義されています。)
void hoge( bool one, bool two, [bool three = false ]) {
  print("test");
}

匿名関数は以下のルールで実装するそうです。

( 引数の型 変数名 ) {
    return 戻り値;
};

実際の使う場合は以下のように実装します。
Dartでは引数の型を省略できます。
この場合、どのような型になるのでしょうか?
以下のサイトに記載がありました。

Dart 2 Language Guide (cresc.co.jp)

また関数宣言が戻り値の型を明示的に指定していないときは、その型はdynamic型として扱われる。ここにdynamicは未知(unknown)という意味の型である。

なるほどdynamicという型になるんですね。
Object型かと思っていたのですが違うようです。
型推論が働いていい感じにしてくれるそうです。すごい😆

// 戻り値の型 無し(この場合は型推論が働き、戻り値の型は「String」になる)
void main() {
  var hoge = ( name ) {
    return '${name}は面白い';
  };
  
  print (hoge('Dart'));
}

ちなみに上記コードはDartPadでは警告になります。

  1. 変数の埋め込みでブラケット(中カッコ)を使っている
  2. hogeの実装がよろしくない

最新のDartのお作法ではよくない実装となってしまったんでしょうかね。

以下のように実装すると大丈夫でした。

void main() {
  hoge ( name ) {
    return '$nameは面白い';
  }
  
  print (hoge('Dart'));
}

戻り値を明示したパターンも確認しました。

void main() {
  hoge ( String name ) {
    return '$nameは面白い';
  }
  
  print (hoge('Dart'));
}

最後に

戻り値の型を省略するとdynamicになるのは覚えておかないといけませんね。
お仕事での実装の場合は型をきちんと書いておかないとなんだか心配になりますが・・・時代の流れなのでしょうかね。

今日はここまで!