【Flutter】 constなぜ必要か!?

はじめに

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. 安全性の向上:

不変であることを保証することで、意図しない変更を防ぎます。