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