初心者向けのスマホアプリプログラミングでよく耳にする、「静的(スタティック)」と「動的(ダイナミック)」という概念について。
もくじ
クラスとは?まずは基本の「設計図」のイメージ
クラスはプログラム上で「設計図」のような役割を果たしています。
たとえば「Car」というクラスを作ると、そのクラスは「車」という概念や特徴をまとめたひな型として使えるわけです。
クラスをベースにして、いろいろな車(インスタンス)を作成できます。
Car myCar = Car(); Car yourCar = Car();
このコードでは「Car」というクラスから、myCar
とyourCar
という2つの車を作っています。
myCar
はあなただけの車、yourCar
は別の車といった具合に、それぞれのインスタンスは異なる車として扱えるのです。
実際の開発では、この「クラス」と「インスタンス」の使い分けがとても重要です。
静的メンバー(スタティック)とは?
静的メンバー、つまりスタティックなプロパティやメソッドを使うことで、「クラス全体に共通する情報」を一つにまとめられます。
たとえば、車の「メーカー名」は、すべてのインスタンスで共通の情報ですよね。わざわざインスタンスごとに設定する必要はありません。
そこで、クラスそのものに「スタティック変数」として保持すると便利です。
具体例として「メーカー名」をスタティック変数にしたい場合は、次のようにコードを書きます。
class Car { static String manufacturer = "Toyota"; }
このmanufacturer
変数は、どのインスタンスからでもアクセスできますし、そもそもインスタンスを作らなくてもアクセス可能です。
インスタンス変数とクラス変数の違い
インスタンス変数は、各インスタンスがそれぞれの値を持ちます。
たとえば、myCar.color
とyourCar.color
は別々の車の色として設定できます。一台ごとに異なる情報を持たせる場合に使います。
一方、クラス変数(スタティック変数)は、クラス全体で一つの値を共有します。
全インスタンスが同じ変数を参照し、どのインスタンスで値を変更しても他のインスタンスに影響を与えます。
車全体の「メーカー名」や「製造年」などのように、すべてのインスタンスで共通している情報を持たせる場合に便利です。
インスタンス変数とクラス変数の使い方
インスタンス変数を使いたい場合は、その前にインスタンスを作る必要があります。
この動的に生成される変数やメソッドは「インスタンス変数」や「インスタンスメソッド」と呼ばれます。
たとえば次のようにしてインスタンスを作り、その中の変数にアクセスします。
Car myCar = Car(); myCar.color = "Red";
一方、スタティックメンバーにはインスタンスが不要で、クラス名で直接アクセスできるのが特徴です。
これは、「共有情報」としてどのインスタンスにも同じ値を参照させる場合に便利です。
print(Car.manufacturer); // Toyota
まとめ
- インスタンス変数:各インスタンスが異なる値を持つ。インスタンスを作った後にアクセス。
- クラス変数(スタティック変数):クラス全体で一つの値を共有。インスタンス不要でアクセス可能。
この理解ができれば、DartやFlutterでのプログラミングもスムーズに進むはずです。
(詳しくは、以下の動画で説明していますので、よろしければご覧ください)