スタッフブログ

STAFF BLOG

アプリ開発日誌

2021.08.18

Flutter開発のためのDart入門(6)クラス①

Dart_programming_language_logo

クラス

前回のDart入門(5)の投稿に続き、今回もDartについて解説していきます。

今回はクラスについて解説します。

クラスの概念

オブジェクト指向言語でデータの集合体を表すものをクラスと呼びます。

クラスを使うと様々なデータ型と処理を1つにまとめて扱えます。

このクラスのもとになる変数やメソッドをメンバと呼びます。
クラスを形作る要素には以下のものがあります。

  • フィールド
  • コンストラクタ
  • メソッド
  • ゲッター、セッター

フィールド

クラスにはオブジェクトの属性を表す変数(インスタンス変数)を定義できます。
これをフィールド、またはプロパティと呼びます。

クラスの定義とフィールドの宣言は次のようになります。

class クラス名 {
    型名 フィールド名;
}

次のコードはクラスを定義し、フィールドの宣言と初期化をおこなっています。

class Rectangle { // 四角形クラスの定義
  double width = 0; // フィールドの宣言と初期化
  double height = 0; // フィールドの宣言と初期化
}

可視性

DartにはJavaのようなpublicprotectedprivateというキーワードはありません。

※インスタンス変数やメソッド、クラスの識別子がアンダースコア (_) で始まる場合、そのライブラリ内でのみ可視となります。

コンストラクタ

クラスと同じ名前の関数がコンストラクタになります。

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

次回も引き続きクラスについて投稿する予定です。

BACK

お問合せ

イーディーエーに興味をお持ちいただいて
ありがとうございます!
スマホアプリに関するご相談、
お見積りや弊社へのご質問など、
お気軽にお問い合わせください。
担当者より折り返しご連絡させていただきます。

    お名前必須
    会社名
    メールアドレス必須
    電話番号必須
    お問合わせ種別必須
    お問合わせ内容必須

    アンケートにご協力ください。
    弊社サイトへはどのようにしてアクセスされましたか?

    個人情報のお取扱いに関する同意事項

    1.事業者の氏名又は名称

    株式会社イーディーエー

    2.個人情報保護管理者の氏名又は職名、所属及び連絡先

    個人情報保護管理者 木下 晴晶
    Mail:[email protected]

    3.取得した個人情報の利用目的的

    当フォームで取得した個人情報は、お問い合わせに関する回答のために利用し、目的外利用はいたしません。

    4.弊社が取得した個人情報の第三者への委託、提供について

    弊社は、ご本人に関する情報をご本人の同意なしに第三者に委託または提供することはありません。

    5.個人情報保護のための安全管理

    弊社は、ご本人の個人情報を保護するための規程類を定め、従業者全員に周知・徹底と啓発・教育を図るとともに、その遵守状況の監査を定期的に実施いたします。
    また、ご本人の個人情報を保護するために必要な安全管理措置の維持・向上に努めてまいります。

    6.個人情報の開示・訂正・利用停止等の手続

    ご本人が、弊社が保有するご自身の個人情報の、利用目的の通知、開示、内容の訂正、追加又は削除、利用の停止、消去及び第三者への提供の停止を求める場合には、下記に連絡を頂くことで、対応致します。

    株式会社イーディーエー 個人情報お問合せ窓口
    〒106-0032 東京都港区六本木7丁目14番23 ラウンドクロス六本木4F
    TEL:03-5422-7524 FAX:03-5422-7534
    Mail:[email protected]

    7.ご提供いただく情報の任意性

    個人情報のご提供は任意ですが、同意を頂けない場合には、第3項にあります利用目的が達成できない事をご了承いただくこととなります。

    8.弊社Webサイトの運営について

    弊社サイトでは、ご本人が弊社Webサイトを再度訪問されたときなどに、より便利に閲覧して頂けるよう「クッキー(Cookie)」という技術を使用することがあります。これは、ご本人のコンピュータが弊社Webサイトのどのページに訪れたかを記録しますが、ご本人が弊社Webサイトにおいてご自身の個人情報を入力されない限りご本人ご自身を特定、識別することはできません。
    クッキーの使用を希望されない場合は、ご本人のブラウザの設定を変更することにより、クッキーの使用を拒否することができます。その場合、一部または全部のサービスがご利用できなくなることがあります。