Bagian ini mempelajari definisi, sintaksis, standar, dan serialisasi dari Properti (Property)
Apa itu Property
property adalah gula sintaksis bahasa Pascal. Dari luar perilakunya sama seperti field, namun di balik layar sebenarnya akan memanggil getter untuk membaca / setter untuk menulis. Fungsinya adalah mengenkapsulasi field privat, menyatukan logika baca-tulis, dan menambahkan efek samping.
- Properti baca-tulis terkontrol: Logika tambahan akan dijalankan otomatis saat pemberian nilai atau pengambilan nilai (penggambaran ulang antarmuka, sinkronisasi komponen, validasi angka) ;
- Properti hanya baca: Hanya bisa dibaca dari luar, dilarang pemberian nilai langsung; perubahan data dilakukan di dalam melalui prosedur khusus.
program Demo;
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
uses
SysUtils;
type
TWebPage = class
private
FURL: string;
FColorRGB: Integer;
procedure SetColorRGB(const Value: Integer);
public
property URL: string read FURL;
property ColorRGB: Integer read FColorRGB write SetColorRGB;
procedure Load(const AnURL: string);
procedure PrintStatus;
end;
procedure TWebPage.Load(const AnURL: string);
begin
FURL := AnURL;
Writeln('Load page: ', AnURL);
end;
procedure TWebPage.SetColorRGB(const Value: Integer);
begin
if FColorRGB <> Value then
begin
FColorRGB := Value;
Writeln('Color updated, value = ', Value);
Writeln('Sync component color to ', Value);
end;
end;
procedure TWebPage.PrintStatus;
begin
Writeln('==== Page Info ====');
Writeln('URL(read-only): ', URL);
Writeln('ColorRGB(rw): ', ColorRGB);
Writeln('==================');
Writeln;
end;
var
Page: TWebPage;
begin
Page := TWebPage.Create;
try
Page.Load('https://www.foxdevelop.com/');
Page.ColorRGB := 255;
Page.PrintStatus;
Page.ColorRGB := 255;
Page.PrintStatus;
Page.ColorRGB := 65535;
Page.PrintStatus;
// Page.URL := 'test'; // Kesalahan kompilasi, URL hanya bisa dibaca
finally
Page.Free;
end;
Readln;
end.Code language: HTML, XML (xml)
Di dalam kelas TWebPage, properti URL hanya dapat dibaca; untuk mengubah nilainya gunakan prosedur Load.
Properti FColorRGB mendukung pembacaan, penulisan dan perubahan nilainya bergantung pada prosedur SetColorRGB.
Selain itu PrintStatus adalah prosedur biasa yang berfungsi mencetak informasi internal dari TWebPage.

Hasil eksekusi program
Load page: https://www.foxdevelop.com/
Color updated, value = 255
Sync component color to 255
==== Page Info ====
URL(read-only): https://www.foxdevelop.com/
ColorRGB(rw): 255
==================
==== Page Info ====
URL(read-only): https://www.foxdevelop.com/
ColorRGB(rw): 255
==================
Color updated, value = 65535
Sync component color to 65535
==== Page Info ====
URL(read-only): https://www.foxdevelop.com/
ColorRGB(rw): 65535
==================Code language: JavaScript (javascript)
2. Aturan deklarasi tiga elemen properti
Dalam mendeklarasikan properti wajib menentukan cara baca, sedangkan cara tulis bersifat opsional:
read sumber pembacaan (pilih salah satu dari dua pilihan)
- Tautan langsung ke field privat (paling cepat, tidak ada beban fungsi tambahan)
- Fungsi getter tanpa parameter, tipe nilai balik sama persis dengan tipe properti
write sumber penulisan (opsional; jika diabaikan berarti hanya baca): pilih salah satu dari dua pilihan
- Tautan langsung ke field privat
- Fungsi setter dengan satu parameter, tipe parameter sama persis dengan tipe properti
Modifikator tambahan khusus serialisasi: default, stored
Kompilator akan memverifikasi kecocokan tipe secara ketat:
- Properti tipe Integer: getter harus mengembalikan Integer tanpa parameter / read terhubung ke field privat Integer
- Properti tipe String: setter harus menerima parameter const string
Properti Published dan Serialisasi
1. Apa itu serialisasi
Menuliskan seluruh data objek ke aliran data (berkas/memori/JSON), sehingga objek dapat dipulihkan kembali dari aliran tersebut nanti;
Berkas formulir Lazarus .lfm dan Delphi .dfm sepenuhnya bergantung pada mekanisme ini di latar belakang.
- Syarat utama: properti harus ditempatkan di bagian
publishedagar dapat dikenali oleh informasi tipe runtime RTTI - Unit utilitas pendukung:
LResources: membaca dan menulis berkas formulir lfmFpJsonRtti/CastleComponentSerialize: serialisasi objek ke JSON
2. Modifikator Khusus Serialisasi
default <konstanta>: menandai nilai bawaan properti
- Hanya untuk pengecekan alat serialisasi: jika nilai properti sama dengan default setelah objek dibuat, data tidak disimpan saat serialisasi untuk mengecilkan ukuran berkas
- Tidak ada inisialisasi otomatis: konstruktor wajib memberikan nilai default ke field secara manual
stored <boolean/metode>: mengatur apakah properti disimpan saat serialisasi
stored True: nilai bawaan, properti akan ditulis ke berkas saat serialisasistored False: properti ini tidak akan pernah disimpanstored IsNeedSave: panggil metode boolean untuk menentukan penyimpanan secara dinamis
Contoh Serialisasi
type
TWebPage = class
private
FColor: TColor;
function SetColor(const Value: TColor): TColor;
published
// default clBlack berarti hitam sebagai nilai bawaan; konstruktor harus tulis FColor := clBlack secara manual
property Color: TColor read FColor write SetColor default clBlack;
// stored False tidak akan disimpan ke lfm/json
property TempCache: string read FTemp write FTemp stored False;
end;