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