Dartのクラス基本

プログラミング

はじめに

Dartのクラスの基本的な概念と使用方法についてまとめておきます。

クラスの定義とインスタンス化

Dartでは、classキーワードを使用してクラスを定義します。クラスのインスタンスは、Dart 2 では new キーワードを使用せずに生成できます。(new キーワードはオプショナルになりました)

class Person {
  String name;
  int age;

  Person(this.name, this.age);
}

void main() {
  var person = Person('Alice', 30);
  print(person.name); // Alice
  print(person.age);  // 30
}

Dart

コンストラクターと初期化リスト

初期化リストを使用すると、コンストラクターの実行前にフィールドを初期化することができます。

class Point {
  int x;
  int y;

  // コンストラクター
  Point(this.x, this.y);

  // 初期化リスト
  Point.origin()
      : x = 0,
        y = 0;
}

void main() {
  var p1 = Point(1, 2);   //x=>1, y=>2
  var p2 = Point.origin();  //x=>0, y=>0
}
Dart

メソッドとプロパティ

他のオブジェクト指向言語とだいたい同じです。

class Rectangle {
  int width;
  int height;

  Rectangle(this.width, this.height);

  int area() {
    return width * height;
  }
}

void main() {
  var rect = Rectangle(5, 10);
  print(rect.area()); // 50
}

Dart

継承とポリモーフィズム

こちらも他のオブジェクト指向言語とだいたい同じです。

class Animal {
  void speak() {
    print('Animal speaks');
  }
}

class Dog extends Animal {
  @override
  void speak() {
    print('Dog barks');
  }
}

void main() {
  var dog = Dog();
  dog.speak(); // Dog barks
}

Dart

ゲッターとセッター

他のオブジェクト指向言語と同じですが、privateにする方法が特殊なのと、ゲッターとセッターの積極的な使用は推奨されていません。

class Circle {
  double _radius;

  Circle(this._radius);

  double get radius => _radius;

  set radius(double value) {
    if (value > 0) {
      _radius = value;
    }
  }
}

void main() {
  var circle = Circle(5);
  print(circle.radius); // 5.0
  circle.radius = 10;
  print(circle.radius); // 10.0
}

Dart

まとめ

初期化リストやプライベートにする方法などいくつかの異なる点がありますが、他のオブジェクト指向言語を扱った経験があれば、比較的簡単に扱えると思います。

タイトルとURLをコピーしました