【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part06 Built-in型

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

前回

【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part05 Built-in型

今回もBuilt-in型の続きからです。

変数

Built-in型

Map

キーと値を関連図けるクラス。
C#で言うとDictionaryに相当します。

このクラスもデフォルト実装ではLinkedということで順序を保持するようになっています。
・・・SetもそうですがMapって順序必要な場面が多いということですかね🤔

指定したキーが無い場合はnullが返ってきます。

代入・取得等は以下のように行います。

var map = Map<String, int>();
map['foo'] = 100;
assert(map['foo'] == 100; // 本書では「assert(map['foo] == 100; 」となっていおり、fooの後ろにシングルクォーテーションが足りない。おそらく誤記。

Setでも少し紹介しましたが、Mapは省略形が存在します。

var  hoge = {
    'first' : 'one',
    'second' : 'two',
};

書きやすそうですが慣れが必要そうです。

List同様、以下の操作に対応しています。

  • Spread Operator
  • null-aware Spread Operator
  • collection if
  • collection for

Runes

ランズ? Googleで確認すると「ルーンズ」と発音するようです。

特殊な文字や記号を表現するために用いられるクラスです。

DartPadで実行してみました。

void main() {
  var clapping = '\u{1f44f}';
  print(clapping);
  print(clapping.codeUnits);
  print(clapping.runes.toList());
  
  Runes input = Runes(
    // 「\u」以降に数字以外のリテラルが登場する場合はブロック({})を記述する仕様なのでしょうかね?
    '\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}'
  );
  
  print(String.fromCharCodes(input));
}

Runesを使用しなくても表現できているような気がしますが・・・。
こういうクラスもあるんということを覚えておきたいと思います。

Symbol

私的に重要な一文を発見しました。

Flutterの場合では、Dartのリフレクション機能を使えないようにしてあるので、

なんということでしょう!「メタ」での実装ができないということでしょうかね。
私はJavaでの開発が長かったのでちょっと戸惑います。
Javaの有名どころのフレームワークはこのリフレクションをよく利用しており、私自身も使う機会が多かったです。

リフレクションを使用しなくても十分細やかな実装ができるというとらえ方もできますよね。
ポジティブな情報としてとらえます!

で、このSymbolはあまり利用する機会はないとのこと。

最後に

Built-in関数を学習してきました。
私は特に難しくは思わなかったのですが本書は最低限必要なBuilt-inの型をだけを紹介しているだけで本当はもっとディープなものなんだと感じます。

今日はここまで!