Lập trình D - Bất biến
Chúng tôi thường sử dụng các biến có thể thay đổi được nhưng có thể có nhiều trường hợp không yêu cầu khả năng thay đổi. Các biến bất biến có thể được sử dụng trong những trường hợp như vậy. Một vài ví dụ được đưa ra dưới đây để sử dụng biến bất biến.
Trong trường hợp các hằng số toán học như pi không bao giờ thay đổi.
Trong trường hợp mảng mà chúng ta muốn giữ lại các giá trị và nó không phải là yêu cầu đột biến.
Tính bất biến giúp chúng ta có thể hiểu được liệu các biến là bất biến hay có thể thay đổi đảm bảo rằng một số hoạt động nhất định không thay đổi các biến nhất định. Nó cũng làm giảm nguy cơ mắc một số loại lỗi chương trình. Khái niệm bất biến của D được biểu diễn bằng các từ khóa const và bất biến. Mặc dù bản thân hai từ này gần nghĩa với nhau, nhưng trách nhiệm của chúng trong các chương trình là khác nhau và chúng đôi khi không tương thích.
Khái niệm bất biến của D được biểu diễn bằng các từ khóa const và bất biến. Mặc dù bản thân hai từ này gần nghĩa với nhau, nhưng trách nhiệm của chúng trong các chương trình là khác nhau và chúng đôi khi không tương thích.
Các loại biến bất biến trong D
Có ba loại biến xác định không bao giờ có thể thay đổi được.
- hằng số enum
- biến bất biến
- biến const
enum Hằng số trong D
Hằng số enum làm cho nó có thể liên kết các giá trị hằng số với các tên có nghĩa. Một ví dụ đơn giản được hiển thị bên dưới.
Thí 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");
}
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
The day is Sunday
Các biến bất biến trong D
Các biến bất biến có thể được xác định trong quá trình thực thi chương trình. Nó chỉ hướng dẫn trình biên dịch mà sau khi khởi tạo, nó sẽ trở thành bất biến. Một ví dụ đơn giản được hiển thị bên dưới.
Thí 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);
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
immutable(int)4
immutable(int)100
Bạn có thể thấy trong ví dụ trên cách có thể chuyển kiểu dữ liệu sang một biến khác và sử dụng stringof trong khi in.
Biến Const trong D
Biến Const không thể được sửa đổi tương tự như bất biến. Các biến bất biến có thể được truyền cho các hàm như là các tham số bất biến của chúng và do đó, nên sử dụng bất biến thay vì const. Ví dụ tương tự được sử dụng trước đó được sửa đổi cho const như được hiển thị bên dưới.
Thí dụ
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);
}
Nếu chúng tôi biên dịch và chạy đoạn mã trên, điều này sẽ tạo ra kết quả sau:
const(int)7
const(int)100
Các tham số bất biến trong D
const xóa thông tin về việc biến ban đầu có thể thay đổi hay không thay đổi được và do đó việc sử dụng không thay đổi làm cho nó chuyển các hàm khác với kiểu ban đầu được giữ lại. Một ví dụ đơn giản được hiển thị bên dưới.
Thí dụ
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);
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
0: 1
1: 2