【Flutter/Dart】クラスの基本|プロパティ/コンストラクタ/メソッド

目次

クラス(class)とは?

結論

クラスとはオブジェクト(インスタンス)を生成(インスタンス化)するための設計図のようなものです。

ただ少しイメージしづらいので、インスタンス/インスタンス化/オブジェクトそれぞれについて、まず解説していきます。

インスタンス/インスタンス化とは?

インスタンスとは、クラスから生成されたもの(オブジェクト)のことを呼びます。

インスタンス化とは、クラスからインスタンスが生成される過程のことを呼びます。

つまり、クラスを「家の設計図」とイメージすると、インスタンスは「設計図通りに建てられた家」そしてインスタンス化は「家を建設する大工」となります。

オブジェクトとは?

オブジェクトとは、全ての総称です。

つまり、変数、関数、クラス、データなどプログラミングで使う全てのものがオブジェクトです。よってクラスから生成されたインスタンスもオブジェクトの一つです。

本来、オブジェクトは全ての総称ですがプログラマーの間では「オブジェクト=クラスから生成されたインスタンス」と定着しているので、クラスから生成したインスタンスをオブジェクトと呼ぶんだなと思っておきましょう。

Widgetはクラスをインスタンス化したオブジェクト

Flutterで使われるWidgetはクラスをインスタンス化したオブジェクトです。よって、Dartでクラスの仕組みと使い方を理解すれば、Widgetも同じように扱うことができます。

>> 【Flutter】Widget・Widgetツリーの基本的な仕組み | FlutterアプリのUI構造

クラスの定義

//定義
class クラス名{}
//例
class Car{}

この例の場合、クラス名をCarとしたクラスを定義しています。

インスタンス化

//インスタンス化
クラス名 オブジェクト名 = コンストラクタ; 
//例
void main(){
  Car car = Car();
}

class Car(){}

クラスのインスタンス化は変数の宣言と同じようにします。

>> 【Flutter/Dart】変数の種類と使い方|型と宣言

ただこのクラスではbody({ })の中が空で、何の機能もありません。よって、プロパティ/コンストラクタ/メソッドを使ってクラスに機能を追加します。

//例
class Car {
  //プロパティ
  int doors;
  int members;

  //コンストラクタ
  Car({int doors, int members}) {
    this.doors = doors;
    this.members = members;
  }

  //メソッド
  void drive() {
    print('I am driving');
  }
}

プロパティ(property)とは?

//例
class Car {
  //プロパティ
  int doors = 4;
  String driver;
}

プロパティとは、単にクラスの中で使う変数のことです。よってプロパティは変数と同じようにクラスで宣言します。

>> 【Flutter/Dart】変数の種類と使い方|型と宣言

プロパティの使用

//プロパティの呼び出し方
オブジェクト名.プロパティ名;
//例
void main() {
  Car car = Car();
  print(car.doors);
}

class Car {
  //プロパティ
  int doors = 4;
}

//出力
//4

クラスをインスタンス化した後に、プロパティを呼び出せます。

メソッド(method)とは?

//例
class Car {
  //メソッド
  void drive(){
    print('I am driving');
  }
}

メソッドとは、単にクラスの中で使う関数のことです。よってメソッドは関数と同じようにクラスで定義します。

>> 【Flutter/Dart】関数の使い方|戻り値/引数/キーワード引数/アロー関数

メソッドの使用

//メソッドの呼び出し方
オブジェクト名.メソッド名();
//例
void main() {
  Car car = Car();
  car.drive();
}

class Car {
  //メソッド
  void drive() {
    print('I am driving');
  }
}

//出力
//I am driving

クラスをインスタンス化した後に、メソッドを呼び出せます。

コンストラクタ(constructor)とは?

//定義
class クラス名{
  クラス名(){
    (実行したい処理)
  }
}

コンストラクタは、クラスのオブジェクトがインスタンス化される時に一度だけ実行されます。また、パラメータを使えば、クラスに引数を渡すことができます。

インスタンス化時にだけ使われる

//例
main() {
  //クラスのインスタンス化
  Greeting greeting = Greeting();
}

class Greeting {
  Greeting() {
    print('Hello World');
  }
}

//出力
//Hello World

この例の場合、クラスのインスタンス化時に「Hello World」が出力されます。

コンストラクタ(パラメータありの場合)

//例
class Car{
  //プロパティ
  int doors;

  //コンストラクタ 
  Car(int doors) { 
    this.doors = doors; //プロパティにパラメータを代入
  }
}

コンストラクタでクラスのプロパティを使用する際、プロパティの頭に「this.」をつけます。また、「this = インスタンス化した際のオブジェクトの名前」とイメージしておきましょう。

コンストラクタの省略化

//例
class Car{
  //プロパティ
  int doors;

  //コンストラクタ
  Car(this.doors) {}
}

パラメータを使用せず、直接プロパティに値を代入できます。

キーワード引数の場合

//例
class Car{
  //プロパティ 
  int doors = 4;

  //コンストラクタ
  Car({this.doors}) {}
}

キーワード引数にするにはパラメータを{ }で囲みます。

>> 【Dart】関数の使い方|定義・戻り値・引数・キーワード引数・アロー関数

キーワード引数を使うコンストラクタのインスタンス化

//例(引数を使用する場合)
Car car = Car(4, 6);

//例(キーワード引数を使用する場合)
Car car = Car(doors: 4, members: 6);

FlutterのWidgetはキーワード引数を使ったクラスのオブジェクトです。

>>【Flutter】Widgetの基本的な仕組み・使い方

サンプルコード

void main() {
  Car car = Car(doors: 4, members: 6);
  print(car.doors);
  print(car.members);
  car.drive();
}

class Car {
  //プロパティ
  int doors;
  int members;

  //コンストラクタ
  Car({int doors, int members}) {
    this.doors = doors;
    this.members = members;
  }

  //メソッド
  void drive() {
    print('I am driving');
  }
}

//出力
//4
//6
//I am driving

参考

よかったらシェアしてね!
目次
閉じる