【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part02 文法

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

前回

【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part01 歴史

今回から文法です。特殊な文法が無いことを祈ります。

コンセプト

すべてオブジェクト

Dartの世界では文字列はもちろん、数字や関数もオブジェクト(クラスのインスタンス)として扱われます。
nullもオブジェクトになります。Rubyもこの考え方で実現されています。

Dartの世界の一番偉いクラスはObjectクラスとなります。
この部分はJavaと同じですね。

型推論

型宣言にvarが使えます。
int i = 0;と実装するのではなくvar i = 0;と実装できます。
勝手にiをintだと判断してくれます。

私の周りだけ?かもしれませんがこのキーワード嫌う人がいまだ多いです。

昔、Visual Basicだったでしょうか。variantという型がありました。
このvariantという型は通称「なんでも型」と呼ばれ、宣言すればどんなものでも格納できる箱が出来上がるのでポンポン使われていました。
そしてこの実装が原因でポンポン不具合が発生し現場が大混乱したことがあります(笑
※このvariantとDartのvarは全然違うものだと思います。

また、型宣言を見ただけでどんなものが格納できるのかわからないから・・・という理由で使用しないプロジェクトもあったりします。
いろんな考え方があるもんですねぇ🤔

Javaでも10からvarをサポートしました。
それまではHogeHogeFugaFugaSupportClass a = new HogeHogeFugaFugaSupportClass();という呪文のような実装が行われていました。

私はvarの方がすっきり実装できるので好きなのですがね。

Generic型

この機能はとても重要だと思います。
メソッドやコレクションに対して格納できる型(もしくは渡せる型)を指定でき、これをコンパイルレベルでチェックできます。
違反するとコンパイルエラーで実行できません。
これが意味するとことは「実装者が型のチェックを事前に行わなくてよい」ということです。
しかしながら、「なんでも格納したいんだよ!」ということも稀にあります。Dartではdynamicという型が利用できます。
List<int> list = [1, 2, 3]とするとintしか格納できません。
List<int> list = [1, 2, 3, '?']とすると、文字が混入しているのでコンパイルエラーとなります。

トップレベルの関数・変数

クラスに所属しない関数や変数を実装できます。
PHPでいうとことのグローバル変数みたいな存在でしょうか。
Pythonでも実現されている機能ですね。

可視性

Dartでprivateを実現したい場合は識別子の先頭にアンダースコア(_)で始めます。
purotectedとかあるのでしょうか?

識別子

1文字目はアルファベットかアンダースコア。
2文字目以降はアルファベットと数字の組み合わせです。

式と文

Dartにはが存在します。
文は値を返さない。式は値を返すという理解で進めます。

最後に

コンセプトについては理解しました。
だいたいほかのスクリプト言語と同じでしょうかね。
知っているというのと使いこなせるはまた別です。

使いこなせるようにがんばります。

今日はここまで!