|

Dartの勉強10−1:クラスの基本

オブジェクト指向言語であるDartの基本的な構成要素で、データ(フィールド)と動作(メソッド)をまとめたものです。
Map型のようにキーと値を都度してバグを作ることを回避するのに便利で、さらに処理結果も返してくれる優れものです。

  1. クラスの定義
    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.
    }
    
  2. 継承
    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
    }
    
  3. 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と非公開変数との組み合わせで、入力チェックが簡単にでき、クラスの変数に異常値が代入され予期しないエラーが発生することを回避します。

類似投稿

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.