Prosedur dan Fungsi 1. Penamaan dan Format (1) Nama prosedur harus diawali dengan huruf besar, dan huruf besar dan kecil harus disusun secara berurutan agar lebih mudah dibaca. Berikut ini adalah cara penulisan yang salah: PROcedure thisisapoorlyformattedroutinename; ubah menjadi ini: procedure ThisIsMuchMoreReadableRoutineName; (2) Nama proses harus bermakna. Rutinitas yang melakukan suatu tindakan paling baik diawali namanya dengan kata kerja yang mewakili tindakan tersebut. Contoh: procedure FormatHardDrive; Nama rutin yang menetapkan nilai parameter masukan harus diawali dengan Set, contoh: procedure SetUserName: string 2. Parameter formal (1) Format: Jika memungkinkan, parameter formal dengan tipe yang sama harus dikelompokkan bersama. Misalnya: procedure ProcedureName (Param1, Param2, Param3: Integer; Param4: string); (2) Penamaan: Nama semua parameter formal harus menyatakan tujuannya. Jika sesuai, nama parameter formal harus diawali dengan huruf A. Misalnya: procedure ProcedureName (AUserName: string; AUserAge: integer); Jika nama parameter memiliki nama yang sama dengan atribut kelas atau field, awalan A diperlukan. (3) Urutan parameter: 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: procedure ProcedureName (APlanet, AContinent, ACountry, AState, ACity). Misalnya: Selama pemrosesan event, parameter Sender bertipe TObject sering kali menjadi parameter pertama yang diteruskan. (4) Parameter konstan: Untuk mencegah parameter record, array, string pendek atau tipe antarmuka diubah oleh rutinitas, parameter formal harus ditandai sebagai 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 rutinitas, parameter tersebut juga dapat ditandai dengan C onst. Meskipun hal ini tidak berdampak pada efisiensi, hal ini memberikan lebih banyak informasi kepada penelepon rutin. (5) Konflik penamaan: Ketika dua unit berisi rutinitas dengan nama yang sama, jika rutinitas tersebut dipanggil, maka rutinitas dalam unit yang muncul kemudian dalam klausa Penggunaan sebenarnya dipanggil. Untuk menghindari situasi ini, Anda dapat menambahkan nama unit yang diinginkan sebelum nama metode, misalnya: SysUtils.FindClose (SR);Windows.FindClose(Handle);3. Variabel (1) Penamaan dan format variabel: Nama variabel harus dapat mengungkapkan 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 dengan jelas menunjukkan arti dari nilai Benar dan Salah. (2) Variabel lokal: Variabel lokal digunakan di dalam rutinitas dan mengikuti aturan penamaan variabel lainnya. Jika perlu, variabel harus diinisialisasi segera pada saat masuknya rutin. Variabel tipe AnsiString lokal secara otomatis diinisialisasi ke string kosong; variabel antarmuka lokal dan tipe dispinterface secara otomatis diinisialisasi ke nil; variabel tipe Variant lokal dan variabel tipe OleVariant secara otomatis diinisialisasi ke Unassigned. (3) Variabel global: Penggunaan variabel global umumnya tidak dianjurkan. Namun, terkadang hal itu diperlukan. Meski begitu, variabel global harus dibatasi pada lingkungan dimana variabel tersebut dibutuhkan. Variabel global mungkin hanya bersifat global di bagian implementasi data global, jika akan digunakan oleh banyak unit, harus dipindahkan ke unit 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 nol seperti 0, nil, atau Unassigned. Variabel global yang diinisialisasi nol tidak memakan ruang di file .EXE. Inisialisasi nol data disimpan di Dalam segmen data virtual, segmen data virtual hanya mengalokasikan memori ketika aplikasi dimulai. Data global yang diinisialisasi bukan nol memakan ruang di file .EXE) . Tipe(1) Aturan kasus: Pengidentifikasi tipe adalah kata-kata khusus dan harus menggunakan huruf kecil semua. Tipe API Win32 sering kali menggunakan huruf besar semua dan mengikuti aturan untuk nama tipe tertentu seperti Windows.pas atau unit API lainnya. Untuk nama variabel lainnya, huruf pertama harus menggunakan huruf kapital dan huruf lainnya harus menggunakan huruf bergantian. Misalnya: varMyString: string; // Kata yang dicadangkan WindowsHandle: HWND; // Win32 API tipe I: Integer; // Pengidentifikasi tipe diperkenalkan di Unit sistem (2) Tipe floating point: Penggunaan tipe Real tidak disarankan karena adil Dicadangkan untuk 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. (3) Jenis pencacahan: 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 hingga 3 karakter huruf kecil untuk diasosiasikan satu sama lain. Misalnya: TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB); Nama instance variabel tipe enumerasi sama dengan tipenya, tetapi tanpa awalan T. Anda juga dapat memberi variabel lebih banyak nama khusus, seperti: Lagu FavoritTpe1, Lagu FavoritTpe2, dll. tunggu. (4)Varian dan OleVariant: Secara umum tidak disarankan 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 mengotomatisasi 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, sementara OleVariant mengkonversi semua string menjadi string OLE (yaitu, string Wide Char) tanpa penghitungan referensi. 5. Tipe yang dibangun (1) Tipe array: Nama tipe array harus menyatakan tujuan dari array. Nama jenis 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: typePCycleArray = ^TCycleArray; TCycleArray=array [1..100] dari integer; Faktanya, instance variabel dari tipe array memiliki nama yang sama dengan tipenya, tetapi tanpa awalan T. (2) Jenis rekaman: Nama jenis rekaman harus menyatakan tujuan rekaman tersebut. 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: typePStudent = ^ TStudent;TStudent = recordStudentName: string;StudentAge: Double;6. Kelas (1) Penamaan dan Format Nama kelas harus menyatakan tujuan kelas tersebut. Huruf T ditambahkan sebelum nama kelas untuk menunjukkan bahwa itu adalah suatu tipe. Contoh: typeTStudent= class (TObject); Nama instance kelas sama dengan nama kelas, tetapi tanpa awalan T. varStudent: TStudent; Perhatikan bahwa mengenai penamaan komponen, silakan lihat Bagian 6.6 "Komponen". (2) Penamaan dan format bidang: Penamaan bidang mengikuti aturan yang sama seperti variabel, hanya saja awalan F ditambahkan untuk menunjukkan bahwa ini adalah bidang. Visibilitas: Semua bidang harus bersifat pribadi. Jika Anda ingin mengakses bidang di luar cakupan kelas, Anda dapat melakukannya dengan bantuan atribut kelas. (3) Penamaan dan format metode: Penamaan metode mengikuti aturan yang sama seperti prosedur dan fungsi. Metode statis: Metode statis harus digunakan ketika Anda tidak ingin suatu metode ditimpa oleh kelas turunan. Metode virtual vs. metode dinamis: 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, metode 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. Metode abstrak: Jika suatu kelas ingin membuat instance, jangan gunakan metode abstrak. Metode abstrak hanya dapat digunakan di kelas dasar yang tidak pernah membuat instance. Metode akses properti: 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 Get, dan metode yang digunakan untuk menulis harus diawali dengan Set, dan mempunyai parameter bernama Value yang tipenya sama dengan tipe atributnya. Misalnya: TStudent = class (TObject)privateFName: string;protectedfunction GetName: string;procedure SetName (Nilai: string);publicproperty Name: string read GetName write SetName;end;(4) Properti properti berfungsi sebagai pengakses ke kolom privat dan diikuti sama Bidang tersebut memiliki aturan penamaan yang sama, tetapi 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. (5) Meskipun penggunaan metode akses tidak diperlukan, disarankan agar Anda menggunakan metode akses tulis untuk mengakses properti yang mewakili bidang pribadi.