3-3.Dartの変数のスコープ

1. 変数のスコープとは

スコープとは、プログラム内で変数が有効となる範囲のことを指します。
変数のスコープには、グローバルスコープとローカルスコープの2種類があります。
スコープの概念を理解することで、変数の使用範囲を明確にし、プログラムの可読性と保守性を向上させることができます。

2. グローバルスコープ

グローバルスコープにある変数は、プログラム全体でアクセス可能です。
グローバル変数は、関数やクラスの外で宣言されます。

Dart
int globalVar = 10; // グローバル変数

void printGlobalVar() {
  print('Global Variable: $globalVar');
}

void main() {
  printGlobalVar(); // Global Variable: 10
  globalVar = 20; // グローバル変数の変更
  printGlobalVar(); // Global Variable: 20
}

3. ローカルスコープ

ローカルスコープにある変数は、特定のブロック内でのみアクセス可能です。
ローカル変数は、関数やブロック内で宣言されます。

Dart
void main() {
  int localVar = 5; // ローカル変数
  print('Local Variable: $localVar');

  void innerFunction() {
    int innerVar = 10; // 内部関数のローカル変数
    print('Inner Variable: $innerVar');
    print('Accessing localVar: $localVar'); // 外部関数のローカル変数へのアクセス
  }

  innerFunction();
  // print(innerVar); // エラー: innerVarはinnerFunctionの外ではアクセスできない
}

4. ブロックスコープ

Dartでは、if文やforループなどのブロック内で宣言された変数もローカルスコープを持ちます。
この変数は、ブロック外からはアクセスできません。

Dart
void main() {
  int a = 10;

  if (a > 5) {
    int b = 20; // ifブロック内のローカル変数
    print('Inside if block: $b');
  }

  // print(b); // エラー: bはifブロックの外ではアクセスできない
}

5. 関数スコープとブロックスコープ

Dartでは、関数スコープとブロックスコープがあり、それぞれ異なるスコープルールが適用されます。

関数スコープ

関数内で宣言された変数は、その関数のスコープ内でのみ有効です。

Dart
void main() {
  int x = 10;

  void myFunction() {
    int y = 20; // myFunctionのローカル変数
    print('Inside myFunction: $y');
  }

  myFunction();
  // print(y); // エラー: yはmyFunctionの外ではアクセスできない
}

ブロックスコープ

ブロック内で宣言された変数は、そのブロック内でのみ有効です。

Dart
void main() {
  for (int i = 0; i < 5; i++) {
    print('Loop iteration: $i');
  }

  // print(i); // エラー: iはforループの外ではアクセスできない
}

6. 例題

例題1: グローバルスコープとローカルスコープ

Dart
int globalCounter = 0; // グローバル変数

void incrementCounter() {
  globalCounter++;
}

void main() {
  print('Initial Global Counter: $globalCounter'); // 0
  incrementCounter();
  print('Global Counter after increment: $globalCounter'); // 1

  int localCounter = 0; // ローカル変数

  void incrementLocalCounter() {
    localCounter++;
    print('Local Counter inside function: $localCounter');
  }

  incrementLocalCounter(); // 1
  print('Local Counter after increment: $localCounter'); // 1
}

例題2: ブロックスコープ

Dart
void main() {
  for (int i = 0; i < 3; i++) {
    print('Inside loop: $i');
  }

  // print(i); // エラー: iはforループの外ではアクセスできない

  if (true) {
    String message = 'Hello, Dart!';
    print(message);
  }

  // print(message); // エラー: messageはifブロックの外ではアクセスできない
}

↓次回内容:

3-4.Dartのクラスとオブジェクト

1. オブジェクト指向プログラミング(OOP)とは
オブジェクト指向プログラミング(OOP)は、プログラムをオブジェクトの集合として構築する方法です。オブジェクトはデータ(プロパティ)とそれに関連する操作(メソッド)を持つエンティティです。OOPの主要な概念には、クラス、オブジェクト、継承、ポリモーフィズムなどがあります。
2. クラスとは
クラスは、オブジェクトの設計図です。クラスは、オブジェクトのプロパティ(データ)とメソッド(関数)を定義します。https://flutter.saloon.jp/dart-08/

コメントを残す