Учебники

D Программирование — Неизменный

Мы часто используем переменные, которые могут изменяться, но во многих случаях изменчивость не требуется. В таких случаях можно использовать неизменяемые переменные. Ниже приведены несколько примеров, где можно использовать неизменяемую переменную.

  • В случае математических констант, таких как пи, которые никогда не меняются.

  • В случае массивов, где мы хотим сохранить значения, а это не требования мутации.

В случае математических констант, таких как пи, которые никогда не меняются.

В случае массивов, где мы хотим сохранить значения, а это не требования мутации.

Неизменность позволяет понять, являются ли переменные неизменяемыми или изменяемыми, гарантируя, что определенные операции не изменяют определенные переменные. Это также снижает риск некоторых типов программных ошибок. Концепция неизменяемости D представлена ​​постоянными и неизменяемыми ключевыми словами. Хотя эти два слова близки по значению, их обязанности в программах различны и иногда они несовместимы.

Концепция неизменяемости D представлена ​​постоянными и неизменяемыми ключевыми словами. Хотя эти два слова близки по значению, их обязанности в программах различны и иногда они несовместимы.

Типы неизменяемых переменных в D

Существует три типа определяющих переменных, которые никогда не могут быть изменены.

  • константы перечисления
  • неизменяемые переменные
  • константные переменные

константы перечисления в D

Константы enum позволяют связать постоянные значения с осмысленными именами. Простой пример показан ниже.

пример

Live Demo

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

Неизменные переменные могут быть определены во время выполнения программы. Он просто указывает компилятору, что после инициализации он становится неизменным. Простой пример показан ниже.

пример

Live Demo

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 при печати.

Переменные Const в D

Переменные Const нельзя изменить аналогично неизменяемым. неизменяемые переменные могут быть переданы в функции как их неизменяемые параметры, и поэтому рекомендуется использовать неизменяемое значение по сравнению с const. Тот же самый пример, который использовался ранее, модифицируется для const, как показано ниже.

пример

Live Demo

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 стирает информацию о том, является ли исходная переменная изменяемой или неизменной, и, следовательно, использование неизменяемой заставляет ее передавать ей другие функции с сохранением исходного типа. Простой пример показан ниже.

пример

Live Demo

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); 
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —