Dプログラミング-不変

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

  • 円周率など、決して変化しない数学定数の場合。

  • 値を保持したい配列の場合、それはミューテーションの要件ではありません。

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

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

Dの不変変数のタイプ

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

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

Dの列挙型定数

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

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