Dokumen ini terutama untuk memberikan pengembang Delphi standar penulisan kode sumber, serta standar penamaan untuk program dan file, sehingga mereka dapat memiliki format yang konsisten untuk diikuti saat pemrograman. Dengan cara ini, setiap programmer menulis kode yang dapat dipahami oleh orang lain.
Indentasi berarti dua spasi di antara setiap tingkat. Jangan tempatkan karakter tab di kode sumber. Hal ini karena lebar karakter tab bervariasi menurut pengaturan dan utilitas manajemen kode yang berbeda (pencetakan, dokumentasi, kontrol versi, dll.).
Dengan menggunakan menu Tools|Environment, pada halaman General dari kotak dialog Environment Options, hapus centang pada kotak Use Tab Character dan Optional Fill agar karakter tab tidak disimpan.
Margin diatur ke 80 karakter. Kode sumber umumnya tidak melebihi margin dengan menulis sebuah kata, namun aturan ini lebih fleksibel. Jika memungkinkan, pernyataan yang panjangnya lebih dari satu baris harus diapit dengan koma atau operator. Setelah jeda baris, itu harus diindentasi oleh dua karakter.
Pernyataan awal harus berada pada satu baris tersendiri. Misalnya, baris pertama di bawah ini salah, namun baris kedua benar:
for i:=0 to 10 do Begin // Salah, Begin dan For berada pada baris yang sama
for i:=0 to 10 do // Ya, mulai dari baris lain
mulai
Kasus khusus dari aturan ini adalah ketika start merupakan bagian dari pernyataan else, misalnya:
jika suatu pernyataan = maka
mulai
.
akhir
yang lain dimulai
Beberapa Pernyataan Lainnya;
akhir;
Catatan: Pernyataan akhir selalu berada pada baris terpisah. Jika permulaan bukan merupakan bagian dari pernyataan else, maka pernyataan akhir yang terkait akan diindentasi dengan jumlah yang sama dengan pernyataan awal.
Kami biasanya menggunakan komentar blok tipe "{...}". Komentar blok tipe "(*...*)" sebelumnya digunakan untuk mengomentari sementara kode yang tidak digunakan komentar, jika Anda memutuskan untuk tidak mendukung versi di bawah Delphi 2.0, Anda dapat menggunakan komentar "//".
Tidak ada spasi antara braket pembuka dan karakter berikutnya. Begitu pula tidak ada spasi antara tanda kurung tutup dengan karakter sebelumnya. Contoh berikut menunjukkan spasi yang benar dan salah.
CallPROc( Parameter ); // Kesalahan!
CallProc(Apameter); // Benar!
Jangan sertakan tanda kurung tambahan dalam pernyataan. Dalam kode sumber, tanda kurung hanya digunakan jika benar-benar diperlukan. Contoh berikut menunjukkan penggunaan yang benar dan salah:
jika (I=42) maka // Error, tanda kurungnya mubazir
jika (I=42) atau (J=42) maka // Benar, harus menggunakan tanda kurung
Kata-kata dan kata kunci yang dicadangkan dalam bahasa Object Pascal selalu seluruhnya menggunakan huruf kecil. Berikut ini adalah daftar kata cadangan Delphi 5:
Dan | susunan | sebagai | asm |
mulai | kasus | kelas | konstanta |
konstruktor | penghancur | antarmuka berbeda | div |
Mengerjakan | sampai ke bawah | kalau tidak | akhir |
kecuali | ekspor | mengajukan | finalisasi |
Akhirnya | untuk | fungsi | pergi |
jika | pelaksanaan | di dalam | diwariskan |
inisialisasi | sebaris | antarmuka | adalah |
label | perpustakaan | mod | nol |
bukan | obyek | dari | atau |
keluar | penuh sesak | prosedur | program |
milik | mengangkat | catatan | mengulang |
string sumber daya | mengatur | sial | shr |
rangkaian | Kemudian | threadvar | ke |
mencoba | jenis | satuan | sampai |
kegunaan | var | ketika | dengan |
xor | pribadi | terlindung | publik |
diterbitkan | otomatis |
Nama prosedur harus dimulai dengan huruf besar dan dibuat berurutan untuk meningkatkan keterbacaan. Berikut cara penulisan yang salah:
prosedur ini adalah nama rutin yang diformat dengan buruk;
Ubah saja menjadi ini:
procedure ThisIsMuchMoreReadableRoutineName;
Jika memungkinkan, parameter dengan tipe yang sama harus dikelompokkan bersama:
prosedur Foo(Param1,Param2,Param3:Imteger;Param4:string);
Urutan parameter formal terutama bergantung pada aturan pemanggilan register. Parameter yang paling umum digunakan adalah parameter pertama, disusun dari kiri ke kanan berdasarkan frekuensi penggunaan. Parameter masukan mendahului parameter keluaran. Parameter dengan rentang yang besar sebaiknya ditempatkan sebelum parameter dengan rentang yang kecil. Misalnya:
SomeProc(aPlanet, aContinent, aCountry, aState, aCity).
Beberapa merupakan pengecualian. Misalnya, selama pemrosesan event, parameter Sender bertipe TObject sering kali menjadi parameter pertama yang diteruskan.
Untuk mencegah parameter record, array, string pendek, atau tipe antarmuka diubah oleh prosedur, parameter formal harus ditandai Const. Dengan cara ini, kompiler akan menghasilkan kode dengan cara yang paling efisien, memastikan bahwa parameter yang diteruskan tidak dapat diubah.
Jika jenis parameter lain tidak diharapkan untuk diubah oleh prosedur, parameter tersebut juga dapat ditandai Const. Meskipun hal ini tidak berdampak pada efisiensi, hal ini memberikan lebih banyak informasi kepada pemanggil prosedur.
Variabel lokal digunakan di dalam prosedur. Jika perlu, variabel harus segera diinisialisasi pada saat masuknya prosedur. Variabel tipe AnsiString lokal secara otomatis diinisialisasi ke string kosong, variabel antarmuka lokal dan tipe dispinterface secara otomatis diinisialisasi ke nil, dan variabel tipe Variant dan OleVariant lokal secara otomatis diinisialisasi ke Unassigned.
Penggunaan variabel global umumnya tidak dianjurkan. Namun, terkadang hal itu diperlukan. Meski begitu, variabel global harus dibatasi pada lingkungan dimana variabel tersebut dibutuhkan. Misalnya, variabel global mungkin bersifat global hanya pada bagian implementasi unit.
Data global yang akan digunakan oleh banyak unit harus dipindahkan ke satuan umum dan digunakan oleh semua objek. Data global dapat langsung diinisialisasi ke suatu nilai ketika dideklarasikan. Perhatikan bahwa semua variabel global secara otomatis diinisialisasi nol, jadi jangan menginisialisasi variabel global ke nilai null seperti 0, nil, atau Unassigned. Variabel global yang diinisialisasi nol tidak memakan ruang di file .EXE. Data yang diinisialisasi nol disimpan dalam segmen data virtual, dan segmen data virtual hanya mengalokasikan memori saat aplikasi dimulai. Data global yang diinisialisasi bukan nol memerlukan ruang di file .EXE.
Pengidentifikasi jenis adalah kata-kata khusus dan harus menggunakan huruf kecil semua. Tipe API Win32 sering kali menggunakan huruf kapital semua dan mengikuti aturan untuk nama tipe tertentu di Windows.pas atau unit API lainnya. Untuk nama variabel lainnya, huruf pertama harus menggunakan huruf kapital, dan huruf lainnya harus menggunakan huruf bergantian. Berikut beberapa contohnya:
var
MyString: string; // kata-kata yang dicadangkan
Pegangan Windows: HWND; // tipe API Win32
I: Integer; //Jenis pengenal yang diperkenalkan di unit Sistem
Penggunaan tipe Real tidak disarankan karena hanya diperuntukkan bagi kompatibilitas dengan kode Pascal yang lebih lama. Biasanya, Double harus digunakan untuk bilangan floating point. Ganda dapat dioptimalkan oleh prosesor dan merupakan format data standar yang ditentukan oleh IEEE. Perluasan dapat digunakan ketika rentang yang lebih besar dari yang disediakan Double diperlukan. Extend adalah tipe khusus Intel dan tidak didukung oleh Java. Ketika jumlah byte fisik dari variabel floating point penting (mungkin menggunakan bahasa yang berbeda untuk menulis DLL), Single harus digunakan.
Umumnya tidak disarankan untuk menggunakan Variant dan OleVariant. Namun, kedua tipe ini diperlukan untuk pemrograman ketika tipe data hanya diketahui saat runtime (seringkali dalam aplikasi COM dan database). Saat melakukan pemrograman COM seperti mengotomatiskan kontrol ActiveX, Anda harus menggunakan OleVariant; untuk pemrograman non-COM, Anda harus menggunakan Variant. Hal ini karena Variant dapat secara efektif menyimpan string asli Delphi, sedangkan OleVariant mengubah semua string menjadi string OLE (yaitu string WideChar) dan tidak memiliki fungsi penghitungan referensi.
Dalam pernyataan if/then/else, kasus eksekusi yang paling mungkin terjadi harus ditempatkan di klausa maka, dan kasus yang lebih kecil kemungkinannya harus ditempatkan di klausa else. Untuk menghindari banyak pernyataan if, gunakan pernyataan case saja. Jika ada lebih dari 5 level, jangan gunakan pernyataan if. Silakan gunakan metode yang lebih jelas. Jangan gunakan tanda kurung tambahan dalam pernyataan if.
Jika ada beberapa kondisi yang akan diuji dalam pernyataan if, kondisi tersebut harus diurutkan dari kanan ke kiri sesuai urutan kompleksitas komputasi. Hal ini memungkinkan kode untuk memanfaatkan sepenuhnya logika estimasi hubung singkat kompiler. Misalnya, jika Kondisi1 lebih cepat dari Kondisi2 dan Kondisi2 lebih cepat dari Kondisi3, pernyataan if secara umum harus dibuat seperti ini:
jika Kondisi1 dan Kondisi2 dan Kondisi3 maka
Jika ada kemungkinan besar Kondisi3 Salah, dengan menggunakan logika estimasi hubung singkat, kita juga dapat menempatkan Kondisi3 di depan:
jika Kondisi3 dan Kondisi1 dan Kondisi2 maka
Konstanta untuk setiap kasus dalam pernyataan kasus harus disusun dalam urutan numerik atau abjad. Pernyataan tindakan untuk setiap situasi harus singkat dan biasanya tidak lebih dari 4 - 5 baris kode. Jika tindakannya terlalu rumit, kode tersebut harus ditempatkan dalam prosedur atau fungsi terpisah. Klausa else dari pernyataan Case hanya digunakan untuk kasus default atau deteksi kesalahan.
Pernyataan kasus mengikuti aturan indentasi dan penamaan normal.
Disarankan untuk tidak menggunakan prosedur Keluar untuk keluar dari perulangan while. Jika perlu, kondisi perulangan harus digunakan untuk keluar dari perulangan. Semua kode yang menginisialisasi perulangan while harus ditempatkan sebelum entri while dan tidak boleh dipisahkan dengan pernyataan yang tidak relevan. Pekerjaan tambahan apa pun untuk bisnis harus dilakukan segera setelah siklus.
Jika jumlah perulangan ditentukan, pernyataan for harus digunakan sebagai pengganti pernyataan while.
Pernyataan repeat mirip dengan perulangan while dan mengikuti aturan yang sama.
Pernyataan with harus digunakan dengan hati-hati. Hindari penggunaan pernyataan with secara berlebihan, terutama saat menggunakan beberapa objek atau rekaman dalam pernyataan with. Misalnya:
dengan Record1, Record2 lakukan
Situasi ini dapat dengan mudah membingungkan pemrogram dan mempersulit proses debug.
Pernyataan with juga mengikuti aturan bab ini untuk penamaan dan indentasi.
Penanganan pengecualian terutama digunakan untuk memperbaiki kesalahan dan melindungi sumber daya. Artinya dimanapun sumber daya dialokasikan, try...finally harus digunakan untuk memastikan bahwa sumber daya tersebut dilepaskan. Namun, pengecualian dibuat jika sumber daya dialokasikan/dilepaskan di bagian awal/akhir unit atau di konstruktor/penghancur objek.
Jika memungkinkan, setiap alokasi sumber daya harus cocok dengan struktur try...finally. Misalnya, kode berikut dapat menyebabkan kesalahan:
SomeClass1 := TSomeClass.Buat;
SomeClass2 := TSomeClass.Buat;
mencoba
{lakukan beberapa kode }
Akhirnya
SomeClass1.Gratis;
SomeClass2.Gratis;
akhir;
Solusi aman untuk alokasi sumber daya di atas adalah:
SomeClass1 := TSomeClass.Buat;
mencoba
SomeClass2 := TSomeClass.Buat;
mencoba
{lakukan beberapa kode }
Akhirnya
SomeClass2.Gratis;
akhir;
Akhirnya
SomeClass1.Gratis;
akhir;
Jika Anda ingin melakukan beberapa tugas ketika terjadi pengecualian, Anda dapat menggunakan coba...kecuali. Biasanya, tidak perlu menggunakan try...kecuali untuk sekadar menampilkan pesan kesalahan, karena objek aplikasi dapat melakukan ini secara otomatis berdasarkan konteksnya. Jika Anda ingin mengaktifkan penanganan pengecualian default di klausa, Anda dapat memicu pengecualian lagi.
Penggunaan try...kecuali dengan klausa else tidak disarankan karena ini akan memblokir semua pengecualian, termasuk pengecualian yang Anda tidak siap untuk menanganinya.
Nama prosedur dan fungsi harus bermakna. Yang terbaik adalah mengawali nama proses melakukan suatu tindakan dengan kata kerja yang mengungkapkan tindakan tersebut. Misalnya:
prosedur FormatHardDrive;
Nama prosedur pengaturan nilai parameter masukan harus diawali dengan Set, misalnya:
prosedur Set Nama Pengguna;
Nama prosedur untuk memperoleh nilai harus diawali dengan Dapatkan, misalnya:
fungsi Dapatkan Nama Pengguna: string;
Nama semua parameter formal harus menyatakan tujuannya. Bila perlu, nama parameter formal sebaiknya diawali dengan huruf a, misalnya:
prosedur SomeProc(aUserName:string; aUserAge:integer);
Awalan a diperlukan ketika nama parameter memiliki nama yang sama dengan atribut kelas atau bidang.
Ketika dua unit berisi prosedur dengan nama yang sama, jika prosedur tersebut dipanggil, maka prosedur dalam unit yang muncul kemudian dalam klausa Uses akan dipanggil. Untuk menghindari hal ini, tambahkan nama unit yang diinginkan sebelum nama metode, misalnya:
SysUtils.FindClose(SR);
atau Windows.FindClose(Menangani);
Nama variabel harus menyatakan tujuannya. Variabel kontrol loop seringkali berupa huruf tunggal, seperti I, J, atau K. Anda juga dapat menggunakan nama yang lebih bermakna, seperti UserIndex. Nama variabel Boolean harus secara jelas menunjukkan arti dari nilai Benar dan Salah.
Variabel lokal mengikuti aturan penamaan variabel lainnya.
Variabel global diawali dengan huruf kapital “G” dan mengikuti aturan penamaan variabel lainnya.
Nama jenis pencacahan harus mewakili tujuan pencacahan. Karakter T harus diawali sebelum nama untuk menunjukkan bahwa ini adalah tipe data. Awalan daftar pengidentifikasi tipe enumerasi harus berisi 2 - 3 karakter huruf kecil untuk diasosiasikan satu sama lain. Misalnya:
TSongType=(stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);
Nama instance variabel dari tipe enumerasi sama dengan tipenya, tetapi tanpa awalan T. Anda juga dapat memberi nama yang lebih khusus pada variabel tersebut, seperti: FavoriteSongTypel, FavoriteSongType2, dll.
Nama tipe array harus menyatakan tujuan dari array. Nama tipe harus diawali dengan huruf "T". Jika Anda ingin mendeklarasikan pointer ke tipe array, Anda harus mengawalinya dengan huruf P dan mendeklarasikannya sebelum deklarasi tipe. Misalnya:
jenis
PCycleArray = ^TCycleArray;
TCycleArray=array[1..100] bilangan bulat;
Faktanya, instance variabel dari tipe array memiliki nama yang sama dengan tipenya, tetapi tanpa awalan "T".
Nama jenis rekaman harus menyatakan tujuan rekaman. Nama jenis harus diawali dengan huruf T. Jika Anda ingin mendeklarasikan pointer ke suatu tipe record, Anda harus mengawalinya dengan huruf P dan mendeklarasikannya sebelum deklarasi tipe. Misalnya:
jenis
PEkaryawan = ^TEkaryawan;
Karyawan TE=catatan
Nama Karyawan: string;
Tingkat Karyawan: Ganda;
akhir;
Nama kelas harus mengungkapkan tujuan kelas tersebut. Umumnya huruf "T" harus ditambahkan sebelum nama kelas. Jika itu adalah kelas antarmuka, maka "I" harus ditambahkan sebelum nama kelas. dan tipe referensi kelas (tipe referensi kelas) harus ditambahkan sebelum nama kelas. Tambahkan "Kelas" setelah namanya. Misalnya:
jenis
Pelanggan = kelas(TObject);
Pelanggan saya = antarmuka;
TCustomerClass = kelas dari TCustomer
ECustomerException = kelas(Pengecualian);
Nama instance suatu kelas biasanya sama dengan nama kelasnya, tanpa awalan “T”.
var
Pelanggan: Pelanggan;
Catatan: Untuk penamaan komponen, lihat "Jenis Komponen".
Penamaan field mengikuti aturan yang sama seperti variabel, hanya saja awalan F ditambahkan untuk menunjukkan bahwa ini adalah field.
Semua bidang harus bersifat pribadi. Jika Anda ingin mengakses bidang di luar cakupan kelas, Anda dapat melakukannya dengan bantuan atribut kelas.
Penamaan metode mengikuti aturan yang sama seperti prosedur dan fungsi.
Metode statis harus digunakan ketika Anda tidak ingin suatu metode ditimpa oleh kelas turunan.
Bila Anda ingin suatu metode ditimpa oleh kelas turunan, Anda harus menggunakan metode virtual. Jika suatu metode kelas akan digunakan secara langsung atau tidak langsung oleh beberapa kelas turunan, maka metode dinamis (dinamis) harus digunakan. Misalnya, jika suatu kelas berisi metode yang sering diganti dan memiliki 100 kelas turunan, metode tersebut harus didefinisikan sebagai dinamis, yang dapat mengurangi overhead memori.
Jika suatu kelas akan membuat instance, jangan gunakan metode abstrak. Metode abstrak hanya dapat digunakan di kelas dasar yang tidak pernah membuat instance.
Semua metode akses properti harus didefinisikan di bagian kelas yang privat atau dilindungi. Metode akses properti mengikuti aturan yang sama seperti prosedur dan fungsi. Metode yang digunakan untuk membaca harus diawali dengan "Dapatkan", metode yang digunakan untuk menulis harus diawali dengan "Set", dan memiliki parameter bernama Nilai yang tipenya sama dengan tipe propertinya. Misalnya:
TSomeClass = kelas(TObject)
pribadi
fsomeField: Bilangan bulat;
terlindung
fungsi GetSomeField: Integer;
procedure SetSomeField(Nilai: Integer);
publik
properti SomeField: Integer baca GetSomeField tulis SetSomeField;
akhir;
Meskipun tidak diwajibkan, Anda disarankan untuk menggunakan metode akses tulis untuk mengakses properti yang mewakili bidang privat.
Properti berfungsi sebagai pengakses ke bidang pribadi dan mengikuti aturan penamaan yang sama seperti bidang, kecuali tanpa awalan F. Nama properti harus berupa kata benda, bukan kata kerja. Properti adalah data dan metode adalah tindakan. Nama properti array harus berbentuk jamak, sedangkan properti umum harus berbentuk tunggal.
Penamaan komponen mirip dengan penamaan kelas, hanya saja jika bertentangan dengan nama komponen lain, Anda dapat menambahkan awalan 3 karakter untuk mengidentifikasi perusahaan, individu, atau entitas lain. Misalnya, komponen jam dapat dideklarasikan seperti ini:
TddgClock = kelas(TKomponen)
Perhatikan bahwa tiga karakter awalan harus huruf kecil.
Nama instance komponen harus dapat menggambarkan arti sebenarnya. Konvensi penamaan di sini menggunakan konvensi penamaan awalan Hongaria yang dimodifikasi. Alasan penggunaan prefix daripada suffix adalah karena lebih mudah mencari nama komponen di Object Inspector dan Code Explorer daripada mencari tipe komponen. Dalam standar ini, nama instance komponen terdiri dari dua bagian: awalan dan pengidentifikasi atribut.
Awalan suatu komponen sebagian besar merupakan singkatan dari jenis komponen. Lihat awalan komponen pada tabel di bawah ini:
Nama kelas komponen | Awalan komponen |
TActionList, TAction mewakili item daftar tindakan | bertindak |
TButton, TSpeedButton, TBitBtn dan kelas tombol lainnya | btn |
TCheckBox, TDBCheckBox dan kotak centang lainnya | chk |
Kelas tombol radio TRadioButton | lakukan |
Bilah alat TToolBar | tb |
Semua kelas menu utama TMainMenu | mm |
Semua kelas item menu TMainMenuItem | mi |
Semua kelas menu pop-up dari TPopupMenu | pm |
Semua kelas item menu pop-up dari TPopupMenuItem | pmi |
TLabel, TStaticText dan kelas label lain yang digunakan untuk tampilan | lbl |
TPanel dan kelas panel lainnya | tidak |
TPageControl dan kelas kontrol halaman lainnya | hal |
TEdit, TMaskEdit dan kelas kotak edit satu baris lainnya | edisi |
TMemo, TRichEdit dan kelas kotak edit multi-baris lainnya | mmo |
TdrawGrid, TStringGrid dan kelas grid lainnya | grd |
TAnimate dan kelas animasi lainnya | ani |
TImageList dan kelas daftar gambar lainnya | sakit |
TIimage dan kelas gambar lainnya | gambar |
Kelas grafik TChart | cht |
TComboBox, TDBComboBox dan kelas kotak daftar drop-down lainnya | cbo |
TListBox, TDBList dan kelas kotak daftar lainnya | pertama |
Tampilan Pohon TT | televisi |
Tampilan Daftar T | lv |
Kunci Panas | hk |
TSplitter dan kelas pembatas lainnya | spt |
Semua kelas komponen dialog seperti TOpenDialog | dlg |
Semua kelas tabel data seperti TTable | tbl |
Semua komponen kueri SQL seperti TQuery | qry |
TClientDataSetSemua elemen kumpulan data klien | CD |
Sumber Data T | ds |
Basis Data T | db |
TSockConnection, TDCOMConnection dan kelas komponen koneksi lainnya | menipu |
TQuickRep, TFastReport dan kelas komponen laporan lainnya | Rpt |
TDDEClientConv, TDDEClientItem dan kelas komponen DDE lainnya | ya |
Semua kelas kalender seperti TMonthCalendar | kal |
TGroupBox dan kelas kontrol lainnya | grp |
Seperti yang ditunjukkan di atas, awalan tipe komponen berasal dari analisis properti tipe yang mendeskripsikan komponen. Biasanya, aturan berikut menjelaskan cara mendefinisikan awalan tipe komponen:
Catatan: Awalan suatu komponen adalah untuk menunjukkan jenis komponen, apakah itu tombol, label, dll., sehingga tidak perlu membuat awalan komponen untuk setiap kelas komponen khusus TMyButton masih belum ada.
Nama identifikasi properti komponen adalah deskripsi maksud komponen. Misalnya, komponen TButton yang digunakan untuk menutup formulir dapat diberi nama btnClose. Sebuah instance dari komponen edit nama dapat diberi nama edName.
Nama formulir atau tipe dialog harus menyatakan tujuan formulir, diawali dengan "Tfrm" untuk formulir atau "Tdlg" untuk kotak dialog, diikuti dengan nama deskriptif. Misalnya, nama tipe formulir Tentang adalah:
TfrmTentang = kelas(TForm)
Nama tipe formulir utama adalah:
TfrmMain = kelas(TForm)
Nama jenis formulir login pelanggan adalah:
TfrmCustomerEntry = kelas(TForm)
Nama jenis kotak dialog login adalah:
TdlgLogin = kelas(TForm)
Nama contoh formulir sama dengan nama tipe terkait, tetapi tanpa awalan T. Misalnya, nama tipe formulir dan contoh yang disebutkan sebelumnya adalah:
Ketik nama | Nama contoh |
Tentang Tfrm | dari Tentang |
TfrmUtama | dariUtama |
Entri Pelanggan Tfrm | frmCustomerEntry |
TdlgLogin | dlgLogin |
Kecuali ada alasan khusus, hanya formulir utama yang dibuat secara otomatis. Semua formulir lainnya harus dihapus dari daftar yang dibuat secara otomatis di kotak dialog Opsi Proyek. Untuk informasi lebih lanjut, lihat bagian berikut.
Semua unit formulir harus berisi fungsi instantiasi untuk membuat, menyiapkan, menampilkan modal, dan melepaskan formulir. Fungsi ini akan mengembalikan hasil mode yang dikembalikan oleh formulir. Parameter yang diteruskan ke fungsi ini mengikuti aturan penerusan parameter. Alasan enkapsulasi seperti ini adalah untuk memfasilitasi penggunaan kembali dan pemeliharaan kode.
Variabel formulir harus dihapus dari unit dan didefinisikan sebagai variabel lokal dalam fungsi instantiasi formulir (perhatikan bahwa ini memerlukan penghapusan formulir dari daftar yang dibuat secara otomatis di kotak dialog Opsi Proyek. Silakan lihat konten sebelumnya.
Misalnya, file unit berikut menunjukkan fungsi instantiasi GetUserData.
Satuan Data PenggunaFrm;
Antarmuka
Kegunaan
Windows, Pesan, SysUtils, Kelas, Grafik, Kontrol, Formulir,
Dialog, StdCtrls;
Jenis
TfrmUserData = kelas(TForm)
edtNama Pengguna: TEdit;
edtUserID: TEdit;
pribadi
{Deklarasi pribadi}
publik
{Pernyataan publik}
akhir;
fungsi GetUserData(var aUserName: String;var aUserID: Integer): Word;
pelaksanaan
{$R *.DFM}
fungsi GetUserData(var aUserName: String;var aUserID: Integer): Word;
var
frmUserData: TfrmUserData;
mulai
frmUserData := TfrmUserData.Buat(Aplikasi);
frmUserData.Caption:='Mendapatkan Data Pengguna';
Hasil : = frmUserData.ShowModal;
jika Hasil=mrOK maka
mulai
aUserName := frmUserData.edtUserName.Teks;
aUserID := StrToInt(frmUserData.edtUserID.Teks);
akhir;
Akhirnya
frmUserData.Gratis;
akhir;
akhir;
Akhir.
Jika struktur formulir terlalu rumit, maka harus dibagi menjadi bingkai formulir utama dan beberapa bingkai sub-bentuk yang tertanam dalam bingkai formulir utama. menyukai:
TfrmMainFrame: TfrmInfoFrame,TfrmEditorFrame
Tujuan utama penggunaan bingkai formulir adalah untuk memecahkan masalah antarmuka dan penggunaan kembali kode, dan untuk meningkatkan kohesi kode unit (setelah pembagian, setiap bingkai formulir adalah unit independen), sehingga meningkatkan kualitas rekayasa perangkat lunak. Anda harus mengekstrak kode terkait antarmuka (dapat digunakan kembali) dan kode terkait aplikasi (tidak dapat digunakan kembali).
Nama tipe modul data harus menyatakan tujuannya dan diawali dengan "Tdm" diikuti dengan nama deskriptif. Misalnya, nama jenis modul data Pelanggan adalah:
TdmPelanggan = kelas(TDataModule)
Nama jenis modul data Pesanan adalah:
TdmOrder = kelas(TDataModule)
Nama instance modul data harus sama dengan nama tipe terkait, namun tanpa awalan T. Misalnya, tipe modul data dan nama instance sebelumnya adalah sebagai berikut:
Ketik nama | Nama contoh |
TdmPelanggan | dmPelanggan |
Pesanan Tdm | pesanan dm |
Disarankan untuk menggunakan informasi header file terstruktur di semua file sumber, file proyek, dan file unit. Header file harus berisi setidaknya informasi berikut:
{
Hak Cipta @ Tahun oleh Penulis
}
Nama file proyek harus deskriptif. Misalnya, nama proyek "Manajer Bug Panduan Pengembang Delphi 5" adalah DDGBugs.dpr, dan nama program informasi sistem adalah SysInfo.dpr.
Nama file formulir harus menyatakan tujuan formulir dan memiliki akhiran Frm. Misalnya, nama file formulir Tentang adalah AboutFrm.dfm, dan nama file formulir utama adalah MainFrm.dfm.
Nama file modul data harus menyatakan peran modul data dan memiliki akhiran DM. Misalnya, nama file modul data Pelanggan adalah CustomersDM.dfm.
Nama file modul data jarak jauh harus menyatakan tujuan modul data jarak jauh. Tambahkan akhiran RDM setelah namanya. Misalnya, file untuk modul data jarak jauh Pelanggan disebut CustomersRDM.dfm.
Nama unit harus deskriptif. Misalnya, unit formulir utama aplikasi disebut MaimFrm.pas.
Klausa Penggunaan pada bagian Antarmuka hanya boleh berisi unit yang diperlukan oleh bagian tersebut. Jangan sertakan nama unit yang mungkin ditambahkan secara otomatis oleh Delphi. Klausa Penggunaan pada bagian Implementasi hanya boleh berisi unit yang diperlukan untuk bagian ini, dan tidak ada unit tambahan.
Bagian Antarmuka hanya berisi deklarasi tipe, variabel, prosedur, dan fungsi yang perlu diakses oleh unit eksternal. Selain itu, deklarasi ini harus mendahului bagian Implementasi.
Bagian Implementasi meliputi implementasi tipe privat, variabel, prosedur dan fungsi unit ini.
Jangan letakkan kode yang memakan waktu di bagian Inisialisasi. Jika tidak, ini akan menyebabkan aplikasi dimulai dengan sangat lambat.
Pastikan untuk melepaskan semua sumber daya yang dialokasikan di bagian Inisialisasi.
Nama file unit form sama dengan nama form yang bersangkutan, hanya saja awalannya diubah menjadi akhiran. Misalnya, nama unit formulir Tentang adalah AboutFrm.pas. Nama file unit formulir utama adalah MainFrm.pas.
Nama file unit modul data sama dengan nama modul data terkait. Misalnya nama unit modul datanya adalah CustomersDM.pas.
Nama unit umum harus menyatakan tujuannya dan harus diawali dengan "u". Misalnya, nama unit alat debugging praktis adalah uDebugUtilities.pas, dan nama unit yang berisi variabel global adalah uCustomerGlobals.pas.
Perhatikan bahwa nama unit harus unik dalam suatu proyek. Nama unit umum tidak boleh memiliki nama yang sama.
Sel komponen harus ditempatkan di jalur terpisah untuk menunjukkan bahwa sel tersebut adalah sel yang menentukan komponen. Mereka umumnya tidak ditempatkan di jalur yang sama dengan proyek. Nama file unit harus mengungkapkan isinya.
Catatan, lihat "Standar Penamaan untuk Tipe Komponen" untuk informasi lebih lanjut tentang standar penamaan komponen.
Sebuah sel komponen hanya dapat berisi satu komponen utama, yaitu komponen yang muncul pada palet komponen. Komponen atau benda pembantu lainnya juga dapat dimasukkan dalam unit yang sama.
Proses registrasi komponen sebaiknya dipindahkan keluar dari unit komponen dan ditempatkan pada unit tersendiri. Unit registrasi ini digunakan untuk mendaftarkan semua komponen, editor properti, editor komponen, wizard, dll.
Registrasi komponen harus dilakukan dalam paket desain. Oleh karena itu, unit registrasi harus disertakan dalam paket waktu desain daripada paket waktu proses. Disarankan agar unit registrasi diberi nama seperti ini:
xxxReg.pas
Diantaranya, awalan karakter xxx digunakan untuk mengidentifikasi nama paket komponen atau perusahaan, individu, atau entitas lainnya. Misalnya, unit registrasi diberi nama xxxReg.pas.
Paket runtime hanya boleh berisi unit yang diperlukan. Elemen editor properti dan editor komponen tersebut harus ditempatkan dalam paket waktu desain. Unit registrasi juga harus disertakan dalam paket tahap desain.
Penamaan paket mengikuti pola berikut:
dcliiiDescvvCn.pkg —Paket desain
iiiDescvvCn.pkg —paket waktu proses
Diantaranya, iii mewakili awalan 2-3 karakter, yang digunakan untuk mengidentifikasi perusahaan, individu atau hal lain yang perlu diidentifikasi. Ini opsional; Desc mewakili deskripsi singkat dari paket kontrol; paket. Anda dapat memilih sesuai dengan kebutuhan Anda. ;Awalan "dcl" menunjukkan paket waktu desain, tanpa awalan ini menunjukkan paket waktu proses, huruf "Cn" menunjukkan jenis kompiler dan nomor versi kompiler, seperti: Delphi5=D5, Delphi4=D4, CBuilder3=C3....
Perhatikan bahwa lib atau std dalam nama paket menunjukkan apakah ini masing-masing merupakan paket waktu desain atau paket waktu proses. Misalnya:
dclrbStdComPSD5.pkg —Paket waktu desain Delphi 5
rbStdCompsD5.pkg —Paket waktu proses Delphi 5
Meskipun sebagian besar alat pemformatan otomatis kode dapat membantu Anda mengatur ulang format program sumber dan memperbarui kapitalisasi kata dan pengidentifikasi yang dicadangkan, sebaiknya lakukan ini sebelum menggunakan kontrol versi. Jika Anda sudah menggunakan kontrol versi, Anda disarankan untuk tidak menggunakan kontrol versi. tidak mudah menggunakan alat pemformatan kode otomatis. Bahkan jika ada satu ruang lagi, alat kontrol versi akan berpikir bahwa baris tersebut telah diubah, sehingga menyebabkan perubahan pada manajemen program.