Helper
Helper - trợ giúp cho class và record
Helper - trợ giúp cho class và record
Helper là một tính năng mới được giới thiệu ở Delphi gần đây. Helper giúp người lập trình có thể dễ dàng mở rộng class hoặc record bằng cách thêm các hàm, thủ tục, phương thức bổ sung vào một class có sẵn mà không cần chỉnh sửa class.
Helper có 2 loại: class helper dành cho class và record helper dành cho record.
Lưu ý: Helper có cấu trúc giống như một class, nghĩa là bạn phải khai báo và triển khai những method của nó. Và helper không chứa được các trường hay biến bên trong nó.
Helper được gắn vào một đối tượng nào đó (class hay record).
Quy tắc đặt tên: Tên helper bắt đầu bằng chữ H, giống như class bắt đầu bằng chữ cái T (type) hay trường là chữ F (field).
Như đã nói, thì helper được dùng để mở rộng class bằng cách thêm các phương thức bổ sung vào class đó.
Chắc các bạn cũng đã quen với TStringList - class được sử dụng khá nhiều trong delphi. Nên mình sẽ lấy luôn ví dụ về Helper cho TStringList.
Helper này có thêm 2 method: ShowAll dùng để thông báo tất cả các dòng trong TStringList và Found để xác định một string có tồn tại trong danh sách hay không.
Trước tiên là phần khai báo Helper
type
HStringList = class helper for TStringList
function Found(aString: string): Boolean;
procedure ShowAll;
end;
Các bạn chỉ cần nhớ cú pháp đơn giản là class helper for |Class| là được.
Tiếp theo sau là phần triển khai 2 method được thêm vào: Found và ShowAll giống như cho class.
Mẹo hay: Nhấn Ctrl + Shift + C để IDE tự động viết code phần triển khai method ra luôn !
function HStringList.Found(aString: string): Boolean;
begin
// Nếu vị trí -1 thì không tìm thấy (false), ngược lại tìm thấy (true)
if Self.IndexOf(aString) = -1 then
Result := false
else
Result := true;
end;
procedure HStringList.ShowAll;
var i: Integer;
begin
for i := 0 to Self.Count - 1 do
writeln(Self[i]);
end;
Trong đoạn code trên, từ Self dùng để trỏ đến đối tượng được nhận helper, là một TStringList.
Mẹo: Bạn nên đặt các helper trong một unit riêng, sẽ tránh bị nhầm lẫn với class
Để sử dụng helper, bạn sử dụng như class bình thường, delphi sẽ tự tìm helper được liên kết với class và sử dụng thích hợp.
var HocSinhList: TStringList;
...
if HocSinhList.Found('Nguyen Van A') = false then
writeln('Lop truong vang, khong co ai diem danh')
else
HocSinhList.ShowAll;
Cũng tương tự như class helper thôi, nhưng thay vì sử dụng class thì chúng ta sử dụng record
type
HocSinh = record
Name: string;
Age: Byte;
end;
HHocSinh = record helper for HocSinh
procedure HocBai;
end;
procedure HHocSinh.HocBai;
begin
...
end;
Có một số help được định nghĩa sẵn cho một số kiểu dữ liệu, như sau
type
HInteger = record helper for Integer
procedure ToString: string;
...
end;
procedure HInteger.ToString: string;
begin
Result := IntToStr(Self);
end;
Ví dụ trên là helper chuyển đổi kiểu dữ liệu từ Integer sang string. Bên cạnh ToString, còn có nhiều helper tương tự khác.
Bạn có thể sử dụng chúng như sau
var a: Integer;
begin
ShowMessage(10.ToString);
a := 5;
ShowMessage(a.ToString);
end;