Kiểu dữ liệu
Các kiểu dữ liệu cơ bản trong Delphi
Các kiểu dữ liệu cơ bản trong Delphi
Cũng không có gì khác với Pascal lắm, bạn có thể tìm thêm về các kiểu dữ liệu trong pascal.
Tuy nhiên có một khác biệt nhỏ. Kiểu integer trong delphi không phải là 2 bytes như pascal. Integer trong delphi phụ thuộc vào hệ điều hành, nếu HĐH 32-bit thì integer là 4 bytes, nếu là 64-bit thì integer là 8 bytes.
Một kiểu khá giống integer là Cardinal. Nhưng cardinal là số tự nhiên không âm, còn integer là số nguyên. Cả hai đều được sử dụng rất thường xuyên (tương tự như C++ sử dụng kiểu int khá nhiều).
Bên cạnh đó, kiểu real ít được sử dụng và thay bằng kiểu Single.
Ép kiểu (chuyển đổi kiểu - data type casting) hiểu đơn giản là chuyển đổi giữa kiểu dữ liệu này sang kiểu dữ liệu khác cho phù hợp. Ví dụ chuyển đổi số nguyên thành chuỗi, hoặc ngược lại, chuyển kí tự thành số, ...
Trong unit System.SysUtils có cung cấp các hàm khá tiện để chuyển đổi kiểu dữ liệu:
StrToInt: chuyển string thành số nguyên. Nhận vào tham số là string và trả về là integer
StrToFloat: chuyển string thành số thực.
StrToBool: nhận vào một string và trả về kiểu boolean.
Các hàm chuyển đổi nhanh này rất tiện trong việc nhập liệu trên form mà không cần sử dụng control. Ví dụ, yêu cầu người dùng nhập tuổi và lưu vào biến Age kiểu Integer, ta làm như sau
procedure TForm1.Button1Click(Sender: TObject);
var
Age: Integer;
begin
Age := StrToInt(InputBox('Nhập tuổi', 'Tuổi của bạn', ''));
...
end;
Ví dụ trên sử dụng hàm InputBox, bạn có thể xem thêm trong bài VCL \ Các hàm thông dụng
Lưu ý: Không phải string nào cũng chuyển thành số được, do đó cần sử dụng hàm TryStrToInt (hoặc TryStrToFloat) như đoạn code sau.
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
Age: Integer;
begin
s := InputBox('Nhập tuổi', 'Tuổi của bạn', '');
if TryStrToInt(s, Age) = false then
ShowMessage('Vui lòng nhập tuổi thật')
else
ShowMessage('Tuổi của bạn là ' + Age.ToString);
...
end;
Để chuyển đổi ngược lại, từ số thành string, mình khuyên sử dụng helper ToString (như ví dụ trên, mình dùng Age.ToString đó)