Điều gì làm cho cảm giác này là:
Nếu bạn có một CLASS (chẳng hạn như một TForm) không phải là một chức năng địa phương, bạn có kiên trì tạo ra các lĩnh vực bạn tránh được những chi phí tra cứu lặp đi lặp lại (FieldByName).
Nếu bạn không sử dụng trường liên tục (trong dfm), bạn có thể thực hiện tra cứu một lần trong thời gian chạy và tránh chi phí liên tục tìm kiếm, nếu nó được sử dụng hoặc (a) nhiều lần ngữ cảnh của một hàm duy nhất, hoặc (b) nơi nó có thể được tra cứu một lần khi truy vấn được thực hiện và được lưu trữ trong một trường được bảo vệ của một đối tượng, để nó có thể được sử dụng lại cho truy vấn hoặc đối tượng, như là thích hợp.
Ví dụ giả mạo của bạn không có lợi, nhưng tôi tin rằng tra cứu lặp lại các trường khi tra cứu lôgic lặp lại bị lãng phí, có lẽ là một điều đáng để đề cập là "lãng phí".
tôi thấy mã như thế này cả ngày, và nó khiến tôi phát điên:
procedure TSomething.DoSomething;
begin
fDataset.FieldByName('X').AsString = fDataset.FieldByName('X').AsString+'Y';
end;
Đoạn mã trên được thực hiện ít có thể đọc được bởi lặp đi lặp lại như vậy, và mối quan tâm có thể đọc như vậy, cũng như kiểm tra lỗi mối quan tâm là tại sao tôi sẽ tránh được việc trên, và thay vào đó có một trường fX:TField
:
TSomething = class(TBaseClass)
protected
fDataSet:TDataSet;
fX:TField;
end;
Bây giờ chúng ta có thể viết
fX.AsString := fX.AsString + 'Y';
Tôi nghĩ mọi người lo lắng quá nhiều về Hiệu suất và không đủ về chất lượng, và biểu hiện nhanh lặp đi lặp lại là dấu hiệu "thiếu chất lượng" và "thiếu suy nghĩ" cũng giống như "thiếu quan tâm đến hiệu suất".
Nguồn
2012-02-08 23:53:51
Hai bit mã sẽ thực hiện hệt. –
Bạn có thể liên kết bài đăng đó không? Có lẽ bạn đã hiểu lầm điều gì đó. – CodesInChaos
Tôi đoán có thể nhanh hơn nếu bạn cần truy cập cùng một giá trị nhiều lần (vì vậy thay vì gọi 'FieldByName' nhiều lần bạn sử dụng biến) – a1ex07