🤔

dartで個人的に気になったものまとめ

2024/06/29に公開

クラスの部類

mixinとは

複数のクラスを継承できるようにしてくれるもの。

main.dart
void main() {
  Duck().swim();
  
  Duck().fly();
  
}

// mixinで継承するクラス
mixin Fish {
  void swim () {
    print("by swimming");
  }
}

mixin Bird {
  void fly () {
    print("by flying");
  }
}

// withで継承したいクラスを指定
class Duck with Bird,Fish{
}

抽象クラス

抽象クラスは、インスタンス化ができないクラスで、継承されることが目的とされたクラス。
抽象クラスを継承したクラスは、クラスのメソッドを強制的にoverrideしなくてはならない。
つまり、サブクラスで記述してほしいメソッドを管理できる。

main.dart
abstract class Template {
  int? number1;
  int? number2;

  void sum(int number1,int number2);
}

class Sum extends Template {
  // 強制でsumメソッドoverrideしなくてはいけない。
  
  void sum (int number1,int number2) {
    print(number1 + number2);
  }
}

void main() {
  Sum().sum(3,4);
}

装飾子

static

クラスのインスタンス化を行わなくても、メソッドや変数を呼び出せる。

main.dart
void main() {
  // クラスをインスタンス化せずに、メソッド呼び出せる
  Human.action("cooking");
}

class Human {
  static void action (String action) {
    print(action);
  }
}

late

変数の宣言時に初期値を与えず、後から値を入れること初期化ができる。

main.dart
void main() {
  Greeting greeting = Greeting();
  // _wordに値を入れずに表示しようとするとエラーが起きる。
  greeting.hello();
  // hello
  greeting.wordprint();
}

class Greeting {
  late String _word;

  void hello () {
    _word = "hello";
  }

  void goodafternoon () {
    _word = "goodafternoon";
  }

  void wordprint () {
    print(_word);
  }
}

final

変数に対して、値の再代入をしないようにする。

constとの違いは何か?
finalは、初期化時なら値を変えられる。(インスタンス化するタイミングなら、値を変えられる)
constは、どのタイミングでも入れた値は変えられない。

main.dart
void main() {
  NumberBrain number = NumberBrain(4); 
  number = NumberBrain(10);
  // finalは初期化時に値を変えらる
  print(number.finalnumber);
  
  // 2つはオブジェクトなのでエラー
  // number.finalnumber = 4;
  // NumberBrain.constnumber = 4;
}

class NumberBrain {
  NumberBrain(this.finalnumber);
  final int finalnumber;

  static const constnumber = 1;
}

constは、コンパイルの時に値が決まる。
finalは、コンパイル後のプログラムの実行時に値を入れられる。ただ、入れた後は変えられない。

※finalについて公式サイトから参照

Although a final object cannot be modified, its fields can be changed. In comparison, a const object and its fields cannot be changed: they're immutable.
finalオブジェクトは変更できませんが、そのフィールドは変更できます。これに対して、constオブジェクトとそのフィールドは変更できません。
https://dart.dev/language/variables

今後も追記予定。

Discussion