Программирование на языке D - неизменяемое
Мы часто используем изменяемые переменные, но во многих случаях изменчивость не требуется. В таких случаях можно использовать неизменяемые переменные. Ниже приведены несколько примеров, где можно использовать неизменяемую переменную.
В случае математических констант, таких как пи, которые никогда не меняются.
В случае массивов, где мы хотим сохранить значения, и это не требует изменения.
Неизменяемость позволяет понять, являются ли переменные неизменными или изменяемыми, что гарантирует, что определенные операции не изменяют определенные переменные. Это также снижает риск некоторых типов ошибок программы. Концепция неизменяемости D представлена ключевыми словами const и immutable. Хотя сами по себе два слова близки по значению, их обязанности в программах различны, и они иногда несовместимы.
Концепция неизменяемости D представлена ключевыми словами const и immutable. Хотя сами по себе два слова близки по значению, их обязанности в программах различны, и они иногда несовместимы.
Типы неизменяемых переменных в D
Есть три типа определяющих переменных, которые нельзя изменить.
- константы перечисления
- неизменяемые переменные
- переменные const
enum Константы в 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, как показано ниже.
пример
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