2
0

More than 3 years have passed since last update.

Dart における class とObject の使い方。

Last updated at Posted at 2020-03-29

Dartにおける class と object の使い方

Classes

Creating a class (classを作成)

class Car {
  int numberOfWindows = 5; 

  void drive(){
    print('wheels start turning');
  }
}

Creating an Object from the Class (objectをclassから作成)

Car myCar = Car();

実際にclassとobjectを使ってCodeを書いてみましょう。

Practice Here

1.各プロパティに、デフォルト値を設定したclassを作成するパターン

void main(){
  // 2. class Carから, myNormalCar というObjectを作成。
  Car myNormalCar = Car(); 

  print(myNormalCar.numberOfSeat); // 4 
}

// 1. Car という classを作る。
class Car {
  // デフォルトとして、numberOfSeatを4, yearCreatedを2020とする。
  numberOfSeat = 4; 
  yearCreated = 2020;
}

もし、毎回classを作成する度に、違うプロパティ値を表示させたいなら... => パターン2へ

2.デフォルト値を設定せずに、classを作成するパターン(Constructorを使って)。

Constructors

void main(){
  Car myNormalCar = Car(5, 2019);

  Car hisCar = Car(2, 2016); 

  print(myNormalCar.numberOfSeat); // 5
  print(myNormalCar.yearCreated); // 2019
  print(hisCar.numberOfSeat); // 2
  hisCar.whatToDo('Turn Left.'); // Turn Left
}
// Car classを作成。
class Car {
  // 1. デフォルト値を設定しない。
  int numberOfSeat;
  int yearCreated;
  // 2. Constructor method を使う。
  Car(int numberOfSeat, int yearCreated){
    // numberOfSeat は、Carというclassを作成する時に入力するように指示(thisは、Carというclassを指している)。
    this.numberOfSeat = numberOfSeat;
    this.yearCreated = yearCreated;
  }

  // 4. Methodを付け加える。
  void function(String whatToDo){
    print(whatToDo);
  }
}

上のコードはさらに、簡潔に入力できる。

void main(){
  // 2. プロパティネームを入れずに、値のみ順番に入力すれば良い。
  Car myNormalCar = Car(5,2019);

  Car hisCar = Car(2,2016); 

  print(myNormalCar.numberOfSeat); // 5
  print(myNormalCar.yearCreated); // 2019
  print(hisCar.numberOfSeat); // 2

}
class Car {
  int numberOfSeat;
  int yearCreated;
  // {}を外す。
  Car(this.numberOfSeat, this.yearCreated);
}

3. 既製されたclassの役割を、新たなclassに組み込む。

1. まず、Car というclassを作成し、そのclassからnormalCarというObjectを作成。
// まず、作成されたclassから、Objectを作成。
void main(){
  Car normalCar = Car();

  print(normalCar.numberOfSeat); // 5
  normalCar.drive(); // wheels turn.

}

// まず、最初のclassを作成。
class Car {
  int numberOfSeat = 5; 

  void drive(){
    print('wheels turn.');
  }
}

2. Cαrというベースのclassを用いて、新たにElectricCar(Carに比べて、さらに機能を持つ)というclassを作成。

Sub classing with extends


void main(){
  Car normalCar = Car();

  print(normalCar.numberOfSeat); // 5
  normalCar.drive(); // wheels turn.

  ElectricCar myTesla = ElectricCar();
  myTesla.drive(); // wheels turn
  myTesla.recharge(); // 

}
class Car {
  int numberOfSeat = 5; 

  void drive(){
    print('wheels turn.');
  }
}

// Carより機能が多く搭載された、ElectricCarというclassを作成。
class ElectricCar extends Car {
  int batteryLevel = 100;

  void recharge(){ 
    batteryLevel = 100;
  }

}

3. 既製されたclassのメソッドの一部を書き換える。


void main(){
  // 新たなObjectを作成。
  LevitatingCar myMagLev = LevitatingCar();
  myMagLev.drive(); // glide forward
}

// 新たなclass(LevitatingCar: 既存のCarのメソッドを受け継ぐが、drive()が違う)を作成。
class LevitatingCar extends Car {

  // 既存の機能を書き換える
  @override 
  void drive(){ 
    print('glide forward');
  }
}

4. 既存のメソッド(ここでは drive())に、更なる機能を付け加える。

Super class calls with super


void main(){
  // 新たなObject myWaymoを作成。
  SelfDrivingCar myWaymo = SelfDrivingCar('Osaka');

  myWaymo.drive(); // wheels turn. sterring towards Osaka.
}

// 最初のベースとなるclassを作成。
class Car {
  int numberOfSeat = 5; 

  void drive(){
    print('wheels turn.');
  }
}

// Carの機能を持つ、さらにパワフルなclass SelfDrivingCarというclassを作成。
class SelfDrivingCar extends Car {
  String destination;

  SelfDrivingCar(String userSetDestination){
    destination = userSetDestination;
  }

  @override
  void drive(){
    // drive()の機能に、新たな機能を付け加える。
    super.drive();

    print('sterring towards $destination');
  }
}


参照: The Complete 2020 Flutter Development Bootcamp with Dart.
(https://www.udemy.com/course/flutter-bootcamp-with-dart/learn/lecture/14483538#questions)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0