[Flutter] static
こんばんは。
何個か前に、route の遷移方法について軽く触れましたが、これに関連して、staticについて触れていこうと思います。
用途
今回話すのは2つの用途です。
1. class内の定数を扱う場合
2. class内の関数を静的に扱う場合
そもそもstatic(静的)とはなんなのか。
ドキュメントを見てもいまいちピンとこなかったのですが、要は、今後変更しないような数字、文字列、関数のことだと理解しました。わざわざstaticとして定義するならメリットがあるんか?って話になると思いますが、それは、この後で説明できればと思います。
1. class内の定数を扱う場合
class内のint もしくは、constとして定義するデータ型で、上記のように今後変わらない定数として扱う場合、static として定義します。
通常、const として定義するデータはclass外に書いてますが、class内に書くときは、staticとして扱うようになります。
void main() {
print(Car.myCar);
print(Bike.engin);
}
class Car {
static String myCar = 'My Car is awsome';
}
class Bike {
static const int engin = 1;
}
特徴としては、通常クラスを呼ぶときは、クラス名()としてカッコをつける必要がありますが、staticとして定義してあげれば、書く必要が無くなります。
単純にかくコードの量がへりますが、わざわざクラス内のWidgetを全て読み込んでから、指定したデータを読みこまず、class内の指定したデータを直で読み込むため、読み込みスピードにもメリットがあるというわけです。
(スピードは今後測っていけたらって思います)
2. class内の関数を静的に扱う場合
class内のデータに対して使えるわけなので、関数に関しても使えるみたいです。
void main() {
Circle.sum(radius: 12);
}
class Circle {
static const double pai = 3.1415;
static void sum ({double radius}){
double sumCircle = (radius * radius * pai);
print(sumCircle);
}
}
例えば、円の面積を求める場合、πも変わらず、計算方法も変わりませんので、staticとして置くことができます。
今後変わる予定のないものは、staticとして設定してあげれば、アクセスしやすくなるということです。
ここからが本題
文頭でもお伝えした通り、named routes にどこが絡むかというと、1つめに関わります。
通常であれば、以下のようにrouteを設定することになると思いますが、
routes: {
'/': (context) => WelcomeScreen(),
'/login': (context) => LoginScreen(),
}
この場合、'/login'として設定した文字列にタイプミスがあったとしても、android studioがタイプミスとして認識してくれません。こなるとどこでミスったのかがわからんなくなるため、文字列を直接扱わず、変数で定義したわかりやすい文字列を使うのが常套テクニックだそうです。
そこで、登場するのが、staticで各遷移先のページのクラス内に
String id = 'login'(任意の文字列) として設定し、実際に使うときは、class名.idのように、呼び出して使うみたいです。
routes: {
LoginScreen.id: (context) => LoginScreen(),
}
// 別ファイルの遷移先のクラス名
class LoginScreen {
static String id = '/login'
}
こうすることで、事故を未然に防げるわけですね。
おしゃれ。
まぁ、書くときは、ひと手間になるかもしれませんが、こういった気遣いの積み重ねで読みやすいコードってのが作れるんですかね。
ではでは。
この記事が気に入ったらサポートをしてみませんか?