Merhaba,
Read ve
write ifadeleri bir sınıfın property'sine (
özelliğine / üyesine) bir değer atanması veya bir değer okunması (istenmesi) anında çalışan tetikleyicileridir.
Örneğin;
TOgrenci sınıfımız olsun.
type
TOgrenci = class
private
FFinalNotu: Single;
FVize1, FVize2: Single;
FOrtalama: Single;
procedure SetFinalNotu(val: Single);
function GetOrtalama(): Single;
public
property FinalNotu: Single read FFinalNotu write SetFinalNotu;
property Ortalama: Single read GetOrtalama write FOrtalama;
end;
implemantation kısmı da aşağıdaki gibi olsun
implementation
{$R *.dfm}
function TOgrenci.GetOrtalama: Single;
begin
Result := FOrtalama;
end;
procedure TOgrenci.SetFinalNotu(val: Single);
begin
FFinalNotu := val;
FOrtalama := ((FVize1 + FVize2) / 2) * 0.30 + (FFinalNotu + 0.70);
end;
Uygulamada aşağıdaki gibi bir atama yaptığınızda;
var
Ogrenci: TOgrenci;
begin
Ogrenci := TOgrenci.Create;
Ogrenci.FinalNotu := 95;
end;
arka planda
SetFinalNotu procedure'ü çalışacak ve
FFinalNotu sınıf üyesini güncelleyecektir. Daha sonra FFinalNotu üyesi hangi üye ve metodları etkiliyorsa onlar üzerinde işlem ve atamalar yapılacaktır.
Örneğimizde, Final notunun belli olması genel ortalamayı etkileyeceği için
FOrtalama üyesinin değeri yeniden hesaplanmıştır.
Yani siz final notunu güncellediğinizde, öğrencinin ortalaması da otomatik güncellenecektir.
Bu işlem Object Pascal yazılım dilinde
Set metodu (
Setter) olarak niteldirilmektedir.
Setter'lar
write ifadesinden sonra yazılırlar. Kendisinden sonra bir metod veya aynı veri tipli lokal bir değişken gelir.
Örneğimizdeki Setter metodunun yerine lokal bir değişken kullanılsaydı. Arka planda yalnızca bu değişken değeri güncellenecek ve farklı bir atama yapılmayacaktı.
Bu da şunu gösteriyor ki setter'larda metod yalnızca diğer üyelerin etkilenmesi durumunda kullanılmalıdır. Diğer durumlarda bir değişken yeterli olacaktır.
Final notu atamasını yaptıktan sonra öğrencinin not ortalamasını öğrenmek istediğimizde (
bir bileşen üzerinde veya mesajla göstermek gibi), yani aşağıdaki gibi bir atama yaptığımızda,
Caption:= Ogrenci.Ortalama.ToString;
Ortalam property'sinde tanımlı
GetOrtalama metodu (
function'u) çalışacak ve daha önce SetFinalNotu ile atanan FOrtalama değeri, sınıfın Ortalama özelliğine atanmış olacaktır.
Bu işlem Object Pascal yazılım dilinde
Get metodu (
Getter) olarak niteldirilmektedir.
Getter'larda da Setter'larda olduğu gibi read ifadesinden sonra yazılırlar. Kendisinden sonra bir metod veya aynı veri tipli lokal bir değişken tanımlanır.
Property tanımında getter ve setter tanımlama zorunluluğu yalnızca ata sınıfta geçerlidir. Ata sınıftan devralınan bir property için yeniden getter ve setter tanım ihtiyacı olmaz.
Bir property ihtiyaç doğrultusunda yalnızca setter veya yalnızca getter'a da sahip olabilir.
Yani her iki ifadenin mutlak kullanılması gerekmez.