Kiểu số cơ bản

D có các kiểu số cơ bản với kích cỡ bộ nhớ cần thiết độc lập với hệ điều hành ứng dụng đang chạy, ngoại trừ kiểu số thực real với dấu chấm động. Cụ thể hơn, dù bạn đang chạy ứng dụng D trên máy 32 hay 64 bit, thì mỗi biến của các kiểu sau vẫn chiếm cùng số bít trên bộ nhớ.

kiểucỡ
bool8-bit
byte, ubyte, char8-bit
short, ushort, wchar16-bit
int, uint, dchar32-bit
long, ulong64-bit

Kiểu số thực với dấu chấm động

kiểucỡ
float32-bit
double64-bit
real>= 64-bit (thường là 64-bit, hoặc 80-bit trên Intel x86 32-bit)

Kiểu bắt đầu bởi u để chỉ kiểu không nhận giá trị âm (không dấu). Kiểu char thực sự được nhúng trong UTF-8, trong khi wchar dùng ký tự UTF-16, còn dchar là UTF-32.

Việc chuyển đổi kiểu chỉ được phép khi không xảy ra sự thay đổi giá trị. Trong khi đó việc chuyển đổi giữa các kiểu số thực chấm động có thể diễn ra không có ràng buộc nào.

Việc chuyển đổi có thể mang tính cưỡng chép bằng chỉ thị cast(KIỂU) tên_biến. Việc này cần phải làm hết sức cẩn thận.

Từ khóa auto để khai báo biến và nội suy kiểu của nó từ biểu thức bên phải. Ví dụ, auto myVar = 7 sẽ xác định kiểu int cho biến myVar. Việc nội suy này được thực hiện lúc biên dịch, và sau đó kết quả không thể thay đổi.

Giới hạn của các kiểu số

(... hay là thuộc tính của kiểu.)

Các kiểu số cũng là đối tượng với các thuộc tính riêng, ví dụ

int.init

xác định giá trị khởi đầu mặc định cho mỗi biến số kiểu int. Với các kiểu số nguyên, giá trị này là 0; với kiểu số chấm động, đó là nan.

Giá trị kiểu.maxkiểu.min xác định giới hạn trên, dưới hay là khoảng các giá trị mà kiểu có thể biểu diễn. Ví dụ,

int.max # 2147483647
int.min # -2147483648

Với kiểu số chấm động, kiểu.min_normal là giá trị nhỏ nhất khác 0 biểu diễn được trong kiểu, còn .nan chỉ giá trị không xác định, .infinity chỉ vô cùng, .dig chỉ số chữ số sau dấu phấy thập phân, .mant_dig là số bit trong phần Mantissa, v.v...

Chỉ thị kiểu.stringof là chuỗi ký tự biểu diễn tên của kiểu.

Đánh số thứ tự

Để đánh số thứ tự, ví dụ cho các phần tử trong một mảng, ta có thể dùng kiểu size_t, mà giới hạn của nó đủ lớn để đánh dấu tất cả các địa chỉ trên bộ nhớ. Kiểu size_t thực ra là tên khác của kiểu uint trên máy 32 bit, hay của ulong trên máy 64 bit.

Biểu thức chặn

Khi chương trình chạy ở chế độ dò lỗi (debug), biểu thức assert kiểm tra một số điều kiện nào đó, và khi chúng bị vi phạm, biểu thức sẽ chặn không cho chương trình chạy tiếp, và trả về lỗi AssertionError.

Chặn assert(0) đảm bảo toàn bộ đoạn mã sau đó không bao giờ được thi hành.

Đọc tiếp

Phần cơ bản

Phần nâng cao

rdmd playground.d