Delphi 10.3 Rio
Phiên bản delphi mới với những cải tiến ngôn ngữ mạnh mẽ
Phiên bản delphi mới với những cải tiến ngôn ngữ mạnh mẽ
Kể từ phiên bản delphi 10.3 Rio trở đi đã bổ sung thêm tính năng mới là khai báo biến nội tuyến (inline variable) và kiểu tự suy luận.
Từ đây, bạn có thể khai báo biến và khởi tạo giá trị ở mọi nơi trong chương trình. Các đối tượng có thể tự động xác định class dựa trên constructor Create.
Hầu hết các code ví dụ trên trang này đều là khai báo theo chuẩn delphi cũ. Mình cũng rất muốn đổi thành theo chuẩn 10.3 để tiện hơn, nhưng sẽ không sử dụng được cho các bản cũ hơn nên mình để luôn cách khai báo cũ.
Tính năng inline variable cho phép bạn khai báo biến bất kì đâu trong chương trình
var
A: Byte;
begin
var B: Single;
var S: string;
var Obj: TClass;
...
end;
Biến khi khai báo có thể được khởi tạo giá trị luôn
begin
var A: Byte := 10;
var B: Single := 3.5;
var Name: string := 'Tong Hoang Vu';
end;
Bên cạnh đó, bạn cũng có thể khai báo hằng bất cứ đâu
begin
const Pi = 3.14;
end;
Bạn có thể sử dụng tính năng tự suy luận kiểu mà không cần chỉ định kiểu dữ liệu. Delphi sẽ tự động xác định kiểu cho biến thông qua giá trị của nó.
begin
var A := 10; // A: Integer
var B := 10.5; // B: Single
var Name := 'Vu'; // Name: sttring
end;
Đối với class và object, bạn có thể sử dụng suy luận kiểu để xác định class của object mà không cần tự định nghĩa. Thay vì viết.
var
Obj: TClass;
begin
Obj := TClass.Create;
...
end;
Hoặc như thế này
begin
var Obj: TClass := TClass.Create;
...
end;
Thì hãy viết theo cách mới như sau
begin
var Obj := TClass.Create;
...
end;
Sẽ ngắn gọn, sạch sẽ và dễ đọc hơn. Obj lúc này thuộc class TClass nhờ tự suy luận dựa theo class khởi tạo constructor Create.
Inline variable cũng sử dụng được cho vòng lặp for ... to ... do, cụ thể là biến đếm.
begin
for var i: Integer := 0 to 9 do
writeln(i);
end;
Hoặc bạn có thể để delphi tự suy luận kiểu cho biến i luôn như sau
begin
for var i := 0 to 9 do
writeln(i);
end;
Rất tiện lợi đúng không ?
Khi tính năng inline variable được sử dụng, bạn cần chú ý đến phạm vi của biến được khai báo nội tuyến. Ví dụ như mã sau đây là sai vì compiler không thể tìm thấy biến X.
begin
var A := 5;
if A = 5 then
begin
var X := 10;
writeln(X);
end;
X := X + 5;
end;
Dòng phía trước end bị lỗi, compiler không tìm thấy biến X. Có thể thấy, do X được khai báo nội tuyến trong cụm begin end, nên ở bên ngoài X chưa được khai báo, dẫn đến lỗi biên dịch.
Vì vậy, hãy chú ý đến phạm vi của biến.