記事の内容
この記事では、Dartのクラスとインスタンスについて説明します。
クラスとインスタンス
では、実際にクラスを書いていきたいと思います。
Person(人間)クラスを作っていきます。
プロパティ
まず最初に、Personにname(名前)とage(年齢)というプロパティ(属性)を実装します。
クラスを定義するためには、「class」というキーワードの後に、大文字で始まる単語と「{}」を書きます。
「class Person {}」「class Animal {}」「class Country」とか、何でも成り立ちます。
コンストラクタで初期化してインスタンス化
基本的なインスタンス化
クラスとはあくまでも設計図なので、それだけでは何も実行をすることができません。
クラスを実行するためには、インスタンス化(new)する必要があります。
クラスをインスタンス化(new)する時に、初期値を設定します。
その初期値を設定(初期化)する作業をコンストラクタと呼びます。
例ではPersonクラスという設計図を元に、「jojo」という人間を生成する時に、名前(jojo)と年齢(11)を設定しています。
また、Personクラスは設計図なので、「ブラックジャック」という人間を生成することもできます。
Personクラスを元に「jojo」や「ブラックジャック」という人間を生成する処理のことを、「インスタンス化」と呼んでいます。
ドット(.)を使うことで、インスタンスのプロパティにアクセスすることができます。
プロパティへの代入を省略
コンストラクタは、このように書くことで、代入するコードを省略することもできます。
newを省略したインスタンス化
インスタンス化する時に、newを省略することもできます。
{}をつけたコンストラクタ
コンストラクタに「{}」をつけると、呼び出す時にプロパティ名を指定する必要があります。
コードをシッカリと書きたい時には、{}をつける方がいいかもしれません。
名前付きのコンストラクタ
コンストラクタは、名前付きで、別に書くことができます。
ここがポイント
- クラスは設計図なので、そのままでは実行することができない
- クラスを元にして、いくつものインスタンスを生成することができる
- インスタンス化する時には、「new」というキーワードを使う
- コンストラクタを使うことで、インスタンスを初期化することができる
- 名前付きコンストラクタをつけることもできる
メソッド
次にクラスに振る舞いを実装します。
ここでは、「introduce」というメソッドを実装しました。
プロパティへのアクセス権限
現状、プロパティにはダイレクトにアクセスできるのですが、これはあまり良くありません。
エラーを引き起こしやすいコードです。
それをリファクタリングします。
クラス内で使うプロパティに「_」をつけて、人間が誤りづらいようにします。
(「_」をつけるとprivateになるということですが、同じパッケージ内だと普通に「_」がついているプロパティにもアクセスできます)
そして、その代わりのゲッターと呼ばれるデータの取得用のメソッドを作成します。
セッターは、データの変更用のメソッドです。
ゲッターには、「get」、セッターには「set」を使って定義します。
クラスでメソッド名だけを定義して、後で中身を実装する
クラス定義でメソッド名と引数の型だけを指定して、コンストラクタにメソッドの中身を渡すこともできます。
応用のテクニックですね。
メソッドの中身を定義しておいて、それを渡すこともできます。
やっていることは、上のコードも下のコードも同じです。
クラスの継承
継承とはソースコードを再利用する仕組みです。
「extends」というキーワードを使います。
NewTypeクラスは、Personクラスを継承(extends)しています。
そして、NewTypeにはintroduceメソッドは実装されていないのにも関わらず、introduceメソッドを使うことができています。
つまり、プログラムが再利用されています。
▼ エラーが起こりづらいクラスを書きたい人は、この記事を読んで下さい
-
【Dart入門】UnmodifiableListViewの説明と使い方
目次1 UnmodifiableListViewを使わないクラスの書き方2 UnmodifiableListViewを使ってリファクタリング UnmodifiableListViewを使わないクラスの書き方 コードの問題点(ミスを引き起こし ...