D-programming-immutable

提供:Dev Guides
移動先:案内検索

Dプログラミング-不変

多くの場合、可変の変数を使用しますが、多くの場合、可変性は必要ありません。 そのような場合、不変変数を使用できます。 不変変数を使用できるいくつかの例を以下に示します。

  • 変化しない_pi_などの数学定数の場合。
  • 値を保持したい配列の場合で、それは突然変異の要件ではありません。

不変性は、変数が不変か可変かを理解することを可能にし、特定の操作が特定の変数を変更しないことを保証します。 また、特定の種類のプログラムエラーのリスクも低減します。 Dの不変性の概念は、constおよびimmutableキーワードで表されます。 2つの単語自体の意味は似ていますが、プログラムでの責任は異なり、互換性がない場合もあります。

Dの不変性の概念は、constおよびimmutableキーワードで表されます。 2つの単語自体の意味は似ていますが、プログラムでの責任は異なり、互換性がない場合もあります。

Dの不変変数のタイプ

絶対に変更できない3つのタイプの定義変数があります。

  • 列挙定数
  • 不変変数
  • const変数

enum Dの定数

enum定数により、定数値を意味のある名前に関連付けることができます。 以下に簡単な例を示します。

import std.stdio;

enum Day{
   Sunday = 1,
   Monday,
   Tuesday,
   Wednesday,
   Thursday,
   Friday,
   Saturday
}

void main() {
   Day day;
   day = Day.Sunday;

   if (day == Day.Sunday) {
      writeln("The day is Sunday");
   }
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

The day is Sunday

Dの不変変数

不変変数は、プログラムの実行中に決定できます。 初期化後に不変になるようコンパイラーに指示します。 以下に簡単な例を示します。

import std.stdio;
import std.random;

void main() {
   int min = 1;
   int max = 10;

   immutable number = uniform(min, max + 1);
  //cannot modify immutable expression number
  //number = 34;
   typeof(number) value = 100;

   writeln(typeof(number).stringof, number);
   writeln(typeof(value).stringof, value);
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

immutable(int)4
immutable(int)100

上記の例では、データ型を別の変数に転送し、印刷中にstringofを使用する方法がわかります。

Dの_Const_変数

定数変数は、不変と同様に変更できません。 不変変数は、不変パラメーターとして関数に渡すことができるため、constでは不変を使用することをお勧めします。 前に使用したのと同じ例が、以下に示すようにconstに変更されます。

import std.stdio;
import std.random;

void main() {
   int min = 1;
   int max = 10;

   const number = uniform(min, max + 1);
  //cannot modify const expression number|
  //number = 34;
   typeof(number) value = 100;

   writeln(typeof(number).stringof, number);
   writeln(typeof(value).stringof, value);
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

const(int)7
const(int)100

Dの不変パラメーター

constは、元の変数が可変であるか不変であるかに関する情報を消去するため、不変を使用すると、元の型を保持したまま他の関数に渡されます。 以下に簡単な例を示します。

import std.stdio;

void print(immutable int[] array) {
   foreach (i, element; array) {
      writefln("%s: %s", i, element);
   }
}

void main() {
   immutable int[] array = [ 1, 2 ];
   print(array);
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

0: 1
1: 2