Algoritma Pemrograman [BS204] Good Programming Practices
Referensi : Diktat Algoritma dan Pemrograman B – ITB 2015
1
Perlunya Konvensi
Dibutuhkan standar yang sama dalam penulisan kode ◦ Practice yang umum dilakukan, setiap perusahaan bisa menetapkan coding standard sendiri Beberapa petunjuk dalam slides ini adalah konvensi yang ditetapkan di perkuliahan BS204 ◦ Bisa jadi berbeda dengan konvensi di tempat lain ◦ Konvensi berlaku untuk kode yang ditulis di komputer maupun di atas kertas Prinsipnya : KONSISTEN!!!
2
The Need of Good Coding Practices
Readability ◦ Program harus dapat dibaca dan dipahami dengan cepat dan baik oleh diri sendiri maupun orang lain Maintainability ◦ Program dengan readability yang baik akan lebih mudah dipelihara Menghindari code bad smelss ◦ Tidak ada hubungannya dengan eksekusi, tetapi lebih pada kebaikan source code
3
Konversi Struktur Program Utama Java
4
Konversi Struktur Program Utama Java
5
Komentar (in source code) Bebas menggunakan /* … */ atau // … asal konsisten Komentar wajib dalam program (konvensi) : ◦ Identitas + tanggal, spesifikasi program ◦ Spesifikasi fungsi dan prosedur (pada bagian protoype) Panjang yang wajar untuk komentar dalam 1 baris ◦ Tidak melebihi lebar window sehingga perlu scroll untuk membacanya ◦ Tentukan panjang maksimum komentar Komentar untuk hal-hal penting ◦ Tidak berlebihan sehingga teks penuh komentar
6
Block { … }
Selalu gunakan { … } untuk menandai suatu blok, walaupun hanya terdiri atas 1 instruksi ◦ Akan memudahkan membaca bagian-bagian program ◦ Memudahkan jika dibutuhkan penambahan instruksi
7
Indentasi (1)
Gunakan indentansi yang semakin menjorok ke dalam untuk menandai setiap inner block Gunakan spasi dengan jumlah yang sama untuk setiap identasi baru ◦ Tab dan spasi tidak bisa dicampur dengan baik ◦ Rapi di satu editor belum tentu rapi di editor lain ◦ Gunakan tab dan spasi dengan konsisten
8
Indentasi (2)
9
Spasi dan Baris Kosong
Gunakan spasi untuk memperjelas ekspresi dan daftar (misal : elemen array, daftar parameter fungsi / prosedur)
Gunakan baris kosong untuk mengorganisasikan kelompok-kelompok logis dari program ◦ Membantu pemahaman flow program dan bagianbagian kode
10
Penggunaan Baris Kosong
11
Konvensi Penamaan (1)
Gunakan nama-nama untuk 1 buah keperluan saja ◦ Hindari menggunakan variabel / subprogram dengan nama sama untuk keperluan yang berbeda Nama seharusnya menyatakan apa bukan bagaimana ◦ Contoh : int sum … bukan … int addAllX Gunakan nama yang memang menggambarkan hal yang direpresentasikan ◦ Hindari menggunakan nama yang membingungkan atau tidak merepresentasikan apa pun
12
Konvensi Penamaan (2)
Variabel : ◦ Perhatikan nama-nama yang memiliki arti dan penggunaan yang dikenal umum : e.g. flag, found, count, sum, idx, min, max, … hindari menggunakannya untuk keperluan lain ◦ i, j, k hanya digunakan dalam control loop ◦ Saran : Buat daftar awalan untuk menstandarkan nama, misalnya : Awalan tab atau arr untuk nama variabel array, contoh : tabMhs atau arrMhs Awalan I_ untuk variabel lokal dan g_ untuk variabel global Awalan is untuk variabel boolean 13
Konvensi Penamaan (3)
Konstanta ◦ Nama konstanta dengan huruf besar dan underscore, ◦ Contoh : PI, MAX_INT Subprogram (function dan procedure) ◦ Boleh : menggunakan awal F untuk function dan P untuk procedure ◦ Gunakan verb-noun untuk nama subprogram yang menggambarkan operasi pada suatu objek Contoh : hitungDenda; calculateKineticEnergy
◦ Gunakan awalan Is untuk function yang menghasilkan nilai boolean, mis : IsGenap, IsGreater
14
Menulis Kode di Atas Kertas
Perhatikan standar penulisan huruf cetak yang benar JAVA adalah bahasa case sensitive!!!
15
Good [Basic] Programming Practices
Pemanfaatan setiap constructor [basic] program dengan efisien Beberapa practice bila dilakukan dengan baik bahkan bisa mengarahkan pada program yang benar
16
Konstanta
Gunakan konstanta untuk : ◦ Konstanta umum, misal : PI, … ◦ Suatu nilai yang tidak akan berubah dan digunakan secara global dan berulang dalam program, misalnya ukuran maksimum array
17
Variabel
Gunakan variabel secara optimum ◦ Jika tidak harus menggunakan variabel, tidak perlu dibuat terkait penggunaan space
◦ Tidak membuat variabel yang tidak dipakai sama sekali dalam program ◦ Gunakan array hanya kalau benar-benar perlu Array sangat memakan memori ◦ Perhatikan scope dan lifetime dari variabel Keep as short as possible Variabel lokal dan global 18
Type Bentukan
Membuat type baru untuk : ◦ Ada kelompok data yang secara logika merupakan satu kesatuan objek, misal : data mahasiswa, data point, dll. ◦ Ada function yang harus menghasilkan lebih dari 1 nilai sehingga perlu type baru untuk range dari function tersebut
19
Analisis Kasus (1)
Gunakan konstruksi analisis kasus dengan tepat ◦ Contoh berikut ini tidak tepat, mengapa?
Kapan menggunakan switch dan if-else bersarang? ◦ Switch : kondisi kasus ditentukan oleh nilai-nilai konstan contoh : inputMenuMakanan == 1; inputMenuMinuman == ‘a’;
◦ if-else : untuk kondisi kasus yang lain 20
Analisis Kasus (2) Analisis kasus harus memenuhi 2 kriteria : ◦ COMPLETE : semua kasus terdefinisi secara lengkap ◦ DISJOINT : tidak ada kasus yang tumpang tindih/overlapped Contoh : Potongan kode ini digunakan untuk menuliskan nilai maksimum dari A, B, C (integer) Apa saja kesalahannya?
21
Analisis Kasus (3)
DILARANG menyusun analisis kasus seperti contoh berikut (walaupun bisa jadi secara eksekusi benar) : ◦ Apa masalahnya???
22
Analisis Kasus (4)
Untuk membantu mendapatkan analisis kasus, gunakan tool seperti : ◦ Tabel keputusan / decision table Mendefinisikan semua variabel kondisi dan aksi ◦ Pohon keputusan / decision tree Bermanfaat untuk analisis kasus yang bertingkat implementasi : analisis kasus bersarang Daun berisi aksi yang dilakukan
23
Contoh Tabel Keputusan
24
Contoh Pohon Keputusan (1)
25
Contoh Pohon Keputusan (2)
26
Loop (1)
Hanya ada 3 jenis loop : traversal, while-do, repeatuntil ◦ Harus tahu kapan menggunakan loop yang mana Loop HARUS BERHENTI!!! Konstruksi loop yang benar, harus dapat dikenal : ◦ Initialization (init variabel yang dipakai dalam proses) ◦ First-Elmt (init variabel kontrol pengulangan) ◦ Kondisi mengulang/berhenti (ekspresi boolean) ◦ Proses yang diulang ◦ Next-Elmt (perubahan variabel kontrol pengulangan untuk menuju kondisi berhenti) 27
Loop (2)
Traversal : ◦ Pengulangan dengan menggunakan pencacah. ◦ Variabel pencacah yang biasa digunakan : i, j, k ◦ Sintaks :
◦ Kondisi berhenti ditentukan oleh suatu nilai akhir ◦ Digunakan jika nilai awal dan nilai akhir dari kontrol pengulangan (pencacah) diketahui dengan baik
28
Loop (3)
While-do ◦ Pengulangan dengan pemeriksaan kondisi pengulangan dilakukan di awal ◦ Memungkinkan ada kasus kosong tidak pernah masuk ke body pengulangan sama sekali ◦ Sintaks :
29
Loop (4)
Repeat-Until ◦ Pengulangan dengan pemeriksaan kondisi berhenti/mengulang di akhir ◦ Proses yang diulang akan dilakukan minimum 1 kali ◦ Memungkinkan kebocoran … jika tidak hati-hati ◦ Sintaks :
30
Loop (5)
Hindari menggunakan break di dalam loop ◦ Pahami kondisi berhenti/mengulang yang sebenarnya
31
Subprogram (1) Function : ◦ Jelas type input (domain) dan jelas type outputnya (range) ◦ Rumus (khususnya yang kompleks dan dipakai berulang) Procedure : ◦ Potongan kode yang dipakai berulang-ulang dalam program ◦ Potongan kode yang secara lojik merupakan satu kesatuan Contoh : pembacaan data suatu type bentukan
32
Subprogram (2)
Bagian utama dalam subprogram : ◦ Kamus lokal ◦ Algoritma
33
Penggunaan Library
Tidak usah gunakan library standar jika tidak diperlukan ◦ Pada saat kompilasi, library di-”load” menambah waktu
34
35