はじめに
ReactやVueは経験ありますが、Flutterは初めてさ触りました。その際に、const必要なさそうな箇所もVScodeのプラグインチェックでconst必須だとよく怒られました。
原因が気になったので、以下調べました。
初心者向け Constとは
主に不変な値を効率的に管理し、パフォーマンスを向上させるためのものです。
Const使用例
FlutterでConst使用する際は、以下の例が考えられます。
1. 不変の値を表すとき
2. ウィジェットの再構築を最適化するため
3. リストやマップの不変なデータ構造に使う
4. コンパイル時の定数を指定するとき
5. UI内でのconstチェーン
不変の値を表すとき
Flutterでは、**コンパイル時に値が確定する不変の値(イミュータブルな値)**に対してconstを使います。
たとえば、以下の例のように、常に同じ値を保持する変数にはconstを使用します。
const pi = 3.14;
const greeting = “Hello, World!”;
ウィジェットの再構築を最適化するため
Flutterアプリでは、UIの再構築が頻繁に行われますが、constを用いることで不要な再構築を避けられます。
constウィジェットは一度だけメモリに作成され、再利用されるため、パフォーマンスの最適化に繋がります。
例:
以下はconstを使わない場合と使った場合の比較例です。
constなし:
Widget build(BuildContext context) {
return Text(“Hello”, style: TextStyle(fontSize: 16));
}
• constなしの場合は、毎回TextStyleオブジェクトが作成されます。
constあり:
Widget build(BuildContext context) {
return const Text(“Hello”, style: TextStyle(fontSize: 16));
}
• Const アリの場合はTextウィジェットが再利用され、再構築コストが低減します。
リストやマップの不変なデータ構造に使う
リストやマップを不変にしたい場合、constを使います。
const colors = [Colors.red, Colors.green, Colors.blue];
const settings = {‘theme’: ‘dark’, ‘fontSize’: 14};
• colorsやsettingsの内容は変更できません。
コンパイル時の定数を指定するとき
コンパイル時に評価可能な値にはconstを使用できます。この場合、ランタイムではなくコンパイル時に値が決定され、パフォーマンスの向上に繋がります。
const padding = EdgeInsets.all(8.0);
const duration = Duration(seconds: 1);
UI内でのconstチェーン
親がconstなら、子もconstである必要があります。
例:
@override
Widget build(BuildContext context) {
return const Scaffold(
appBar: AppBar(
title: Text(“Const Example”),
),
body: Center(
child: Text(“Hello World!”),
),
);
}
Scaffold、AppBar、Textにconstをつけることで、不要なオブジェクト生成を防げます。
constを使用するメリット
1. パフォーマンス向上:
再利用可能なオブジェクトを作成することで、不要なリソース消費を減らせます。
2. コードの可読性:
「この値は変更されない」という意図が明確になります。
3. 安全性の向上:
不変であることを保証することで、意図しない変更を防ぎます。