【Flutter/Dart②】Dart文法をチェックしていこう<基礎編>

前回では、Flutterを用いてAndroid、iOSアプリ開発環境を構築して、いつでも開発できる状態になりました。
👇前回の記事はこちら

次は以下の2つについて学んでいこう✊

①Dartの書き方や基礎、
②Flutterの構造、フレームワーク理解

今回は、①Dartの勉強やコードの検証で使われる” DartPad “を使いDartの文法を学んでいきます。

⚠️今回はかなりの基礎内容となるので、プログラミング経験が少しでもある方は流し読みで問題ありません。

本記事の対象者

○Flutter/Dartをこれから勉強していきたい方

○アプリ開発に興味がある方

○筆者と一緒に勉強をしていこうって思っている方

DartPadとは

✅ web上で組込みライブラリを使用して簡易的な動作検証を行えるツール
対応するライブラリはdart:*(dart: ioは動作しないので注意)

✅ Dart コード、API、HTML、CSSをサポート、ブラウザ上で書いたコードが即時実行可能

✅ dart-coreライブラリが使えるため、以下の基本的な機能が使用可能

  • 文字列
  • 数値
  • コレクション
  • 日付
  • エラー処理
  • URI

つまり、簡単なコードの動きチェックと文法の勉強に最適ですね◎
👇UIはこんな感じ

Hello Worldをコンソールに表示

  • void : 返り値(return)がないことの宣言
  • main() : 一番最初に実行される関数
  • print() : コンソールに表示する

変数

✅ 変数宣言 var型変更不可dynamic型変更可
final : 変数宣言時、値の変更不可const:コンパイル時、値の変更不可
✅ 特に宣言がない場合は基本的にNullを許さないNull非許容型

Nul許容型の変数

null値を保持できる変数の宣言は型の最後にクエスチョンマーク(?)をつける

call関数について

✅ 通常の関数の呼び出しと同じ挙動をする

呼び出したい関数オブジェクトが nullable な場合、コードを簡潔に書くことが可能

static修飾子

✅ クラスのプロパティ/メソッドをインスタンス化せずに使用可能
✅ static修飾子を宣言したプロパティ/メソッドを静的変数/静的メソッドと呼ぶ
⇨「静的」: プログラム実行中、ずっと存在する(値を変更できる)
⇨「動的」: プログラム実行中、生成または破棄される

String→int, double, DateTimeに変換

<変更後の型>.parse(<変更したい値>)

条件分岐(if, switch)

✅ 条件式が長くなる場合はswitchを使う

List

✅ 配列で重複可

Set

✅ 要素の重複不可
✅ 空要素を作成時、頭にSetを配置

Map

key : value の組み合わせで値格納可能
✅ 空要素を作成時、varで定義可能

Loop

map()メソッド

✅ for文を使わなくても、リストから要素を取り出すことができる

<演習>分岐とループを使い、リストnumsの中の100より大きい数字を2倍してprintする

例外処理(try, on, catch, throw, finally)

✅ Exception(例外) : プログラム実行中で発生するエラーで、コードの修正で対処可能なエラーのこと
✅ 例外処理: プログラム実行中にException発生の有無で、処理を分けることができる
try-on: 1つのExceptionに対して有効
try-catch: 複数のExceptionに対して有効
try-on-catch: onブロックで対処できなかった時の処理
throw: 意図的にExceptionを発生させる(throw ‘エラー文’ とすることでcatchブロックの”e”で使用できる)
finally: 例外処理(try, on, catch)の後に実行したい処理 Exceptionの発生有無に関わらず実行する

MutableとImmutable

✅ Mutable: 値の変更可能
✅ Immutable: 値の変更不可
✅ metaパッケージの@immutableアノテーションメンバに型変更を不可とするfinalを付与することでimmutable化することができる

関数

✅ 返り値の型を最初に宣言
返り値がない場合先頭にvoid
引数で渡させる配列&オブジェクトの変数は、呼び出し時には省略可能

class

✅ null 不可なフィールド(今回はclass)は、late 型宣言で 遅延設定フィールド に修正する
コンストラクタ:インスタンス化した時に実行されるメソッ
getter, setter: クラス変数をプライベート変数にした際、安全に参照・変更するための記述
⇨プライベート変数は[インスタンス名].[変数名]のようにアクセスし使用することはできない

Dartのコンストラクタについて

基本的なクラス構成
❶生成的コンストラクタ(Generative Constructors)

✅ 一般的なコンストラクタ「new」キーワードでインスタンスを生成する際に処理される

✅ Automatic field initialization: 引数を取るコンストラクタで引数の名称を「this.フィールド名」とすると代入処理を記述せずにフィールドを初期化することができる

✅ Named Constructors: コンストラクタのオーバーライドは不可→コンストラクタに任意の名前を付与し通常のコンストラクタから呼び出す方法をとる(コンストラクタ.任意名称)

✅ Redirecting Constructors: 別のコンストラクタへ処理をリダイレクトすることができる

✅ Initializer Lists: コンストラクタの後に、コロンに続けてフィールドの初期化処理をする。

❷ファクトリ(factory)

✅ インスタンスを生成しないコンストラクタ

❸定数コンストラクタ

✅ コンパイル時に定数オブジェクトをインスタンス化したい場合に使用(グローバルスコープに定数オブジェクトを定義したい時)
✅ finalとconstの違い↓

  • final: 代入が1度(宣言時)のみ、値が参照値の場合も変更不可
  • const: コンパイル時に値が決まる定数(暗黙的にfinalとなる)

class継承(extends)

extends : クラスの継承ができる

ミックスイン(mixin)

mixin : インスタンスは生成できない

Abstract class

✅ Abstract classは単体では使うことはできず、必ず継承される

暗黙的インターフェース(impliment)

imprementの記述により、そのclassのインターフェースを全て実装する必要がある

以上、Dart文法の超基礎の部分を大まかに見ていきました。

プログラミングを始めて触るよって人じゃないなら簡単な内容だったかなと思います 。

次回はDart文法のジェネリクス、例外処理、非同期処理などちょい応用の部分について
解説していきたいと思います。

それでは今回はこの辺で、ばいばい👋