Dartの勉強10−1:クラスの基本
オブジェクト指向言語であるDartの基本的な構成要素で、データ(フィールド)と動作(メソッド)をまとめたものです。
Map型のようにキーと値を都度してバグを作ることを回避するのに便利で、さらに処理結果も返してくれる優れものです。
- クラスの定義
class Person { // フィールド(属性) String name; int age; // コンストラクタ(初期化) Person(this.name, this.age); // メソッド(動作) void greet() { print('Hello, my name is $name and I am $age years old.'); } } void main() { // Personクラスのインスタンスを生成 var person = Person('Alice', 30); // フィールドにアクセス print(person.name); // Alice // メソッドを呼び出し person.greet(); // Hello, my name is Alice and I am 30 years old. } - 継承
class Animal { void sleep() { print('Sleeping...'); //メソッドだけですが、これもクラスです。 } } class Dog extends Animal { void bark() { print('Wan'); } } void main() { var dog = Dog(); dog.sleep(); // Sleeping...Animalクラスを継承しているため使用できます。 dog.bark(); // Wan } - GetterとSetter
フィールドの値を取得したり設定するための特別なメソッドです。class Circle { double _radius = 1.0; // 非公開となっているフィールド_radiusに初期値を設定 Circle(double radius) { this.radius = radius; // コンストラクタでもSetterを使用 } // Getter double get radius => _radius; // Setter with validation set radius(double value) { if (value <= 0 || value > 1000000) { throw ArgumentError('Radius must be between 0 and 1,000,000.'); } _radius = value; } // Getter for length double get length => 2 * 3.14 * _radius; //radiusが決まれば一意に決まる値の場合はフィールドとして記憶する必要がないので都度計算して引き渡す。 } void main() { try { var circle = Circle(15); // 正常値 print(circle.radius); // 15 print(circle.length); // 94.2 circle.radius = -10; // 異常値 } catch (e) { print(e); // Radius must be between 0 and 1,000,000. } }このように、Setterと非公開変数との組み合わせで、入力チェックが簡単にでき、クラスの変数に異常値が代入され予期しないエラーが発生することを回避します。