前回はDart文法の超基礎を解説しました。
👇前回の記事はこちら
プログラミング言語が始めての方じゃ無い方は流し読みできた内容だったかなと思います。
初心者の方も一つずつ理解していけば問題ないので頑張って欲しいです。
今回はジェネリクスや非同期処理など、Dart文法について少し踏み込んだ内容を解説していきたいと思います!
ジェネリクス
✅ 型を縛りたくない変数の定義で”T“を置くことで、後に型付けをすることができる
✅ 汎用性を上げたい親クラスで頻出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// ジェネリクスを含むクラス class Dog<T>{ T name; // Tは後に決定される型 //コンストラクタ Dog(this.name); void sayName(){ print(name); } } // main関数実行 main() { print("-----インスタンスごとに異なる型を定義-------"); // String型の時 Dog dog1 = Dog<String>("Hachi"); // Hachi dog1.sayName(); // integer型の時 Dog dog2 = Dog<int>(8); // 8 dog2.sayName(); print("-----リストでジェネリクスを使用----"); var names = <String>[]; names.addAll(["Pochi", "Taro", "Jiro"]); // names.add(8); // Error print(names); // [Pochi, Taro, Jiro] } |
例外処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
main() { // 例外処理: try-catch文 try { // throw:例外を投げることができるメソッド throw "エラーです。catchに入ります"; // catch:Error発生時に実行 } catch (e, s) { print("-----throwされたオブジェクト-----"); print(e); // エラーです。catchに入ります print("-----StackTrace-----"); print(s); // エラーです。catchに入ります at Object.wrapException (<anonymous>:354:17) at main (<anonymous>:2471:17) at <anonymous>:2971:7 at <anonymous>:2954:7 at dartProgram (<anonymous>:2965:5) at <anonymous>:2973:3 at replaceJavaScript (https://dartpad.dev/scripts/frame.js:24:19) at messageHandler (https://dartpad.dev/scripts/frame.js:133:13) } finally { print("-----finally-----"); print("例外の有無に関わらず実行"); // 例外の有無に関わらず実行 } } |
Enum
✅ 列挙子は宣言された順にインデックス(0始まり)が割り振られおり、 index で参照できる
✅ enumは継承できない(mixinにも使えない)
✅ enumのインスタンスを自前で生成できない(定数のみしか使えない)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
enum Animal {dog, cat, rabbit} main() { var animal = Animal.rabbit; switch (animal) { case Animal.dog: print("Your choice animal is dog!"); break; case Animal.cat: print("Your choice animal is cat!"); break; default: print("Your choice animal is rabbit!"); } // Your choice animal is rabbit! } |
extensionを上手使おう
✅enum値によって処理を変更したい時にはextensionで簡潔に書くことができる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
enum Animal {dog, cat, rabbit} extension AnimalExtension on Animal { static final Map<Animal, String> animalMap = { Animal.dog: 'Your choice animal is dog!', Animal.cat: 'Your choice animal is cat!', Animal.rabbit: 'Your choice animal is rabbit!', }; String get sayAnimal => animalMap[this]!; } main() { var animal = Animal.rabbit; print(animal.sayAnimal) // Your choice animal is rabbit! } |
非同期処理
✅ 同期処理: ある処理が完了するまで、次の処理を実行しない
✅ 非同期処理: ある処理が完了する前に、次の処理を実行できる
こちらの記事が非常に分かり易かったので、チェックしてみて下さい👇https://zenn.dev/iwaku/articles/2020-12-29-iwaku
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
//同期処理 void aFunc1() { print("Hello 1st World"); print("Hello 2st World"); print("Hello 3st World"); } // 非同期処理 void aFunc2(){ print("Hello 1st World!"); // 1秒後に以下の処理を実行する Future<String> future = Future.delayed(Duration(seconds: 1), () => "Hello 2st World!"); future.then((message) => print(message)); print("Hello 3st World!"); } // 非同期処理(async await) Future<void> printWithDelay(String message) async{ await Future.delayed(Duration(seconds: 1)); print(message); } void aFunc3() { print("Hello 1st World!"); printWithDelay("Hello 2st World!"); print("Hello 3st World!"); } main() { print("-----同期処理-----"); aFunc1(); print("-----非同期処理-----"); aFunc2(); print("-----非同期処理(async await)-----"); aFunc3(); } |
無名関数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void main(){ print("-----無名関数-----"); var hello = (name){ return "Hello, ${name}!"; }; print(hello("Hiroki")); // Hello, Hiroki! print("-----無名関数を一行で表現-----"); var hello2 = (name) => "Hello, ${name}!"; print(hello2("Misako")); // Hello, Misako! print("-----無名関数のリストへの応用-----"); var names = ["Hiroki", "Misako", "Ryuki"]; names.forEach((name){ // リストのforEachメソッド print("I'm " + name); // I'm Hiroki I'm Misako I'm Ryuki }); } |
以上で”DartPadで文法チェックしていこう<ちょい応用編>”は完了です★いかがだったでしょうか?
今回の記事で紹介したのはほんの一例に過ぎません。
しっかり学ぶんだり、分からないことが出てきたら必ずDart公式チュートリアルを見て確認することをお勧めします。
更にDartの文法を深く理解していきたい方はこちらやこちらで勉強するといいんじゃないかなと思います。
次回はFletterのWegetについて解説していきたいと思います。
それでは今回はこの辺で、ばいばい👋
○Flutter/Dartをこれから勉強していきたい方
○アプリ開発に興味がある方
○筆者と一緒に勉強をしていこうって思っている方