アプリ開発日誌
2021.08.18
Flutter開発のためのDart入門(6)クラス①
クラス
前回のDart入門(5)の投稿に続き、今回もDartについて解説していきます。
今回はクラスについて解説します。
クラスの概念
オブジェクト指向言語でデータの集合体を表すものをクラスと呼びます。
クラスを使うと様々なデータ型と処理を1つにまとめて扱えます。
このクラスのもとになる変数やメソッドをメンバと呼びます。
クラスを形作る要素には以下のものがあります。
- フィールド
- コンストラクタ
- メソッド
- ゲッター、セッター
フィールド
クラスにはオブジェクトの属性を表す変数(インスタンス変数)を定義できます。
これをフィールド、またはプロパティと呼びます。
クラスの定義とフィールドの宣言は次のようになります。
class クラス名 {
型名 フィールド名;
}
次のコードはクラスを定義し、フィールドの宣言と初期化をおこなっています。
class Rectangle { // 四角形クラスの定義
double width = 0; // フィールドの宣言と初期化
double height = 0; // フィールドの宣言と初期化
}
可視性
DartにはJavaのようなpublic、protected、privateというキーワードはありません。
※インスタンス変数やメソッド、クラスの識別子がアンダースコア (_) で始まる場合、そのライブラリ内でのみ可視となります。
コンストラクタ
クラスと同じ名前の関数がコンストラクタになります。
class クラス名 {
クラス名(引数); // コンストラクタ
}
クラスを元にオブジェクトを生成することをインスタンス化といいますが、コンストラクタはインスタンス化されるときに最初に呼び出されるブロックです。
変数名 = クラス名(引数); // インスタンス化する時にコンストラクタが呼び出される
コンストラクタ内でthisキーワードを使い現在のインスタンスを参照します。
また、オブジェクトには.を使ってアクセスします。
次のコードはコンストラクタを使用してオブジェクトを生成しています。
class Rectangle {
double width, height;
Rectangle(this.width, this.height); // コンストラクタ
}
void main() {
var rect = Rectangle(3, 4); // オブジェクトを生成
print('四角形の幅は${rect.width}cm');
print('四角形の高さは${rect.height}cm');
}
実行結果
四角形の幅は3cm 四角形の高さは4cm
デフォルトコンストラク
コンストラクタを明示的に宣言しなかった場合、自動的にコンストラクタが追加される仕組みになっています。
これをデフォルトコンストラクタと呼びます。
デフォルトコンストラクタは引数を持たず、スーパークラスの引数なしのコンストラクタを呼び出します。
メソッド
メソッドは、オブジェクトの振る舞いを表す関数です。
インスタンスメソッド
インスタンスにアクセスするメソッドがインスタンスメソッドです。
次のコードは四角形の面積を求める例です。
class Rectangle {
double width = 0;
double height = 0;
Rectangle(this.width, this.height);
// メソッドの定義
double getArea() {
return this.width * this.height;
}
}
void main() {
var rect = Rectangle(3, 4);
print('四角形の面積は${rect.getArea()}㎠'); // メソッドの呼び出し
}
実行結果
四角形の面積は12㎠
ゲッター、セッター
オブジェクトから値を取得するメソッドがゲッターgetで、値を設定するメソッドがセッターsetです。
ゲッターとセッターは暗黙的に定義されています。
class Rectangle {
double left, top, width, height;
Rectangle(this.left, this.top, this.width, this.height);
double get right => left + width; // ゲッター
set right(double value) => left = value - width; // セッター
double get bottom => top + height;
set bottom(double value) => top = value - height;
}
void main() {
var rect = Rectangle(3, 4, 20, 15);
print('左辺の位置は${rect.left}');
rect.right = 22; // 値をセット
print('左辺の位置は${rect.left}');
}
実行結果
左辺の位置は3 左辺の位置は2
次回も引き続きクラスについて投稿する予定です。
ライタープロフィール
【N】
Webエンジニアの経験を経て、アプリエンジニアとしてEDAに入社。
Flutter開発導入のファシリテーターとして、勉強会などを担当している。