Advertisement
  1. Web Design
  2. HTML/CSS
  3. HTML

15 Latihan Terbaik untuk Menulis Kode Yang Sangat Mudah Dibaca

Scroll to top
Read Time: 11 min

() translation by (you can also view the original English article)

Dua kali dalam sebulan, kami meninjau kembali beberapa postingan favorit para pembaca dari riwayat Nettuts+.

Keterbacaan kode merupakan topik universal di dunia pemrograman komputer. Ini adalah salah satu hal yang harus kita pelajari sebagai pengembang. Artikel ini akan memberikan detail 15 praktik terbaik ketika ingin menulis kode yang mudah dibaca.


1- Mengomentari & Mendokumentasi

IDE ( Integrated Development Environment ) sudah berkembang jauh dalam beberapa tahun terakhir. Ini membuat komentar pada kode anda lebih berguna daripada sebelumnya. Standar tertentu dalam komentar  anda memungkinkan IDE dan alat lain untuk memanfaatkannya dalam hal yang berbeda.

Perhatikan contoh ini:

Komentar yang saya tambahkan pada fungsi dapat ditampilkan setiap kali saya menggunakan fungsi itu, bahkan pada file yang berbeda.

Ini adalah contoh lain di mana saya memanggil fungsi dari library pihak ketiga:

Dalam contoh-contoh tertentu, tipe komentar ( atau dokumentasi ) yang digunakan adalah basis dari PHPDoc, dan IDE seperti Aptana.


2- Indentasi Yang Konsisten

Saya anggap anda sudah paham bahwa anda harus memberikan indentasi pada kode anda. Namun, itu juga perlu diperhatikan apa itu merupakan ide yang baik untuk tetap memakai indentasi yang konsisten.

Ada lebih dari satu cara dalam mengindentasi kode.

Gaya 1:
1
2
function foo() {
3
  if ($maybe) {
4
		do_it_now();
5
		again();
6
	} else {
7
		abort_mission();
8
	}
9
	finalize();
10
}
Gaya 2:
1
2
function foo()
3
{
4
	if ($maybe)
5
	{
6
		do_it_now();
7
		again();
8
	}
9
	else
10
	{
11
		abort_mission();
12
	}
13
	finalize();
14
}
Gaya 3:
1
2
function foo()
3
{	if ($maybe)
4
	{	do_it_now();
5
		again();
6
	}
7
	else
8
	{	abort_mission();
9
	}
10
	finalize();
11
}

Saya menggunakan gaya ke-2 pada kode saya tapi terkadang berubah menjadi yang ke-1 Tapi itu hanya masalah preferensi. Tidak ada yang namanya gaya "terbaik" yang harus semua orang ikuti. Sebenarnya, gaya terbaik, adalah gaya yang konsisten. Jika anda merupakan bagian dari tim atau jika anda berkontribusi pada sebuah proyek, anda harus mengikuti gaya yang ada dalam proyek itu.

Gaya indentasi tidak benar-benar berbeda satu sama lainnya. Terkadang, mereka mencampurkan aturan yang berbeda. Misalnya, pada PEAR Coding Standards, kurung kurawal yang terbuka "{" berada pada baris yang sama sebagai struktur kontrol, tapi mereka melewatinya ke baris selanjutnya setelah definisi fungsi.

Gaya PEAR:

1
2
function foo()
3
{                     // placed on the next line

4
    if ($maybe) {     // placed on the same line

5
        do_it_now();
6
        again();
7
    } else {
8
        abort_mission();
9
    }
10
    finalize();
11
}

Perhatikan juga bahwa mereka menggunakan empat spasi, bukan tab untuk indentasi.

Berikut adalah artikel Wikipedia dengan contoh gaya indentasi yang berbeda.


3 - Hindari Komentar yang Jelas

Mengomentari kode Anda adalah sangat fantastis; namun, bisa jadi berlebihan atau hanya terlalu berlebihan. Ambil contoh ini:

1
2
// get the country code

3
$country_code = get_country_code($_SERVER['REMOTE_ADDR']);
4
5
// if country code is US

6
if ($country_code == 'US') {
7
8
	// display the form input for state

9
	echo form_input_state();
10
}

Bila teksnya sudah jelas, sebenarnya tidak produktif untuk mengulanginya dalam komentar.

Jika Anda harus mengomentari kode itu, Anda dapat menggabungkannya ke satu baris saja:

1
2
// display state selection for US users

3
$country_code = get_country_code($_SERVER['REMOTE_ADDR']);
4
if ($country_code == 'US') {
5
	echo form_input_state();
6
}

4 - Pengelompokan Kode

Lebih sering daripada tidak, tugas tertentu memerlukan beberapa baris kode. Sebaiknya simpan tugas ini di dalam blok kode yang terpisah, dengan beberapa spasi di antaranya.

Berikut adalah contoh yang disederhanakan:

1
2
3
// get list of forums

4
$forums = array();
5
$r = mysql_query("SELECT id, name, description FROM forums");
6
while ($d = mysql_fetch_assoc($r)) {
7
	$forums []= $d;
8
}
9
10
// load the templates

11
load_template('header');
12
load_template('forum_list',$forums);
13
load_template('footer');

Menambahkan komentar di awal setiap blok kode juga menekankan pemisahan visual.


5 - Skema Penamaan yang Konsisten

PHP sendiri terkadang bersalah karena tidak mengikuti skema penamaan yang konsisten:

  • strpos() vs str_split()
  • imagetypes() vs image_type_to_extension()

Pertama-tama, nama harus memiliki batas kata. Ada dua pilihan populer:

  • camelCase: Huruf pertama dari setiap kata dikapitalisasi, kecuali kata pertama.
  • underscore: Underscore antara kata-kata, seperti: mysql_real_escape_string().

Memiliki pilihan yang berbeda menciptakan situasi yang mirip dengan gaya indentasi, seperti yang saya sebutkan sebelumnya. Jika proyek yang ada mengikuti konvensi tertentu, Anda harus melakukannya dengan itu. Selain itu, beberapa platform bahasa cenderung menggunakan skema penamaan tertentu. Misalnya, di Java, kebanyakan kode menggunakan nama camelCase, sedangkan di PHP, mayoritas menggunakan underscore.

Ini juga bisa dicampur. Beberapa pengembang lebih suka menggunakan underscore untuk fungsi prosedural, dan nama kelas, tapi menggunakan camelCase untuk nama metode kelas:

1
2
class Foo_Bar {
3
4
	public function someDummyMethod() {
5
6
	}
7
8
}
9
10
function procedural_function_name() {
11
12
}

Jadi sekali lagi, tidak ada gaya "terbaik" yang jelas. Hanya bersikaplah konsisten.


6 - Prinsip DRY

DRY singkatan dari Don't Repeat Yourself. Juga dikenal sebagai DIE: Duplication is Evil.

Prinsipnya menyatakan:

"Setiap potongan pengetahuan harus memiliki representasi otoritatif tunggal, tidak ambigu di dalam sebuah sistem."

Tujuan sebagian besar aplikasi (atau komputer pada umumnya) adalah mengotomatisasi tugas yang berulang. Prinsip ini harus dijaga dalam semua kode, bahkan aplikasi web. Bagian kode yang sama tidak boleh diulang berkali-kali.

Misalnya, sebagian besar aplikasi web terdiri dari banyak halaman. Ini sangat mungkin bahwa halaman-halaman ini akan berisi elemen umum. Header dan footer biasanya merupakan kandidat terbaik untuk ini. Bukanlah ide yang bagus untuk tetap menyalin menempel header dan footer ini ke setiap halaman. Berikut ini Jeffrey Way menjelaskan cara membuat template di CodeIgniter.

1
2
$this->load->view('includes/header');
3
4
$this->load->view($main_content);
5
6
$this->load->view('includes/footer');

7 - Hindari Persarangan yang Dalam

Terlalu banyak tingkat persarangan bisa membuat kode lebih sulit dibaca dan diikuti.

1
2
function do_stuff() {
3
4
// ...

5
6
	if (is_writable($folder)) {
7
8
		if ($fp = fopen($file_path,'w')) {
9
10
			if ($stuff = get_some_stuff()) {
11
12
				if (fwrite($fp,$stuff)) {
13
14
					// ...

15
16
				} else {
17
					return false;
18
				}
19
			} else {
20
				return false;
21
			}
22
		} else {
23
			return false;
24
		}
25
	} else {
26
		return false;
27
	}
28
}

Demi keterbacaan, biasanya memungkinkan untuk membuat perubahan pada kode Anda untuk mengurangi tingkat persarangan:

1
2
function do_stuff() {
3
4
// ...

5
6
	if (!is_writable($folder)) {
7
		return false;
8
	}
9
10
	if (!$fp = fopen($file_path,'w')) {
11
		return false;
12
	}
13
14
	if (!$stuff = get_some_stuff()) {
15
		return false;
16
	}
17
18
	if (fwrite($fp,$stuff)) {
19
		// ...

20
	} else {
21
		return false;
22
	}
23
}

8 - Batas Panjang Baris

Mata kita lebih nyaman saat membaca kolom teks yang tinggi dan sempit. Inilah alasan mengapa artikel surat kabar terlihat seperti ini:

Adalah praktik yang baik untuk menghindari penulisan baris kode yang memanjang secara horisontal.

1
2
3
// bad

4
$my_email->set_from('test@email.com')->add_to('programming@gmail.com')->set_subject('Methods Chained')->set_body('Some long message')->send();
5
6
// good

7
$my_email
8
	->set_from('test@email.com')
9
	->add_to('programming@gmail.com')
10
	->set_subject('Methods Chained')
11
	->set_body('Some long message')
12
	->send();
13
14
// bad

15
$query = "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHERE post_id = '123'";
16
17
// good

18
$query = "SELECT id, username, first_name, last_name, status

19
	FROM users

20
	LEFT JOIN user_posts USING(users.id, user_posts.user_id)

21
	WHERE post_id = '123'";

Juga, jika ada yang ingin membaca kode dari jendela terminal, seperti pengguna Vim, ada baiknya membatasi panjang baris menjadi sekitar 80 karakter.


9 - Organisasi File dan Folder

Secara teknis, Anda bisa menulis keseluruhan kode aplikasi dalam satu file. Tapi itu akan menjadi mimpi buruk untuk dibaca dan dipelihara.

Selama proyek pemrograman pertama saya, saya tahu tentang gagasan dari penciptaan "include files." Namun, saya bahkan belum benar-benar teratur. Saya membuat folder "inc", dengan dua file di dalamnya: db.php dan functions.php. Seiring bertumbuhnya aplikasi, file fungsi juga menjadi sangat besar dan sulit dipelihara.

Salah satu pendekatan terbaik adalah dengan menggunakan kerangka kerja, atau meniru struktur folder mereka. Seperti inilah CodeIgniter:


10 - Nama Sementara yang Konsisten

Biasanya, variabel harus deskriptif dan mengandung satu atau beberapa kata. Tapi, ini tidak selalu berlaku untuk variabel sementara. Mereka bisa sesingkat karakter tunggal.

Ini adalah praktik yang baik untuk menggunakan nama yang konsisten untuk variabel sementara Anda yang memiliki peran yang sama. Berikut adalah beberapa contoh yang cenderung saya gunakan dalam kode saya:

1
2
3
// $i for loop counters

4
for ($i = 0; $i < 100; $i++) {
5
6
	// $j for the nested loop counters

7
	for ($j = 0; $j < 100; $j++) {
8
9
	}
10
}
11
12
// $ret for return variables

13
function foo() {
14
	$ret['bar'] = get_bar();
15
	$ret['stuff'] = get_stuff();
16
17
	return $ret;
18
}
19
20
// $k and $v in foreach

21
foreach ($some_array as $k => $v) {
22
23
}
24
25
// $q, $r and $d for mysql

26
$q = "SELECT * FROM table";
27
$r = mysql_query($q);
28
while ($d = mysql_fetch_assocr($r)) {
29
30
}
31
32
// $fp for file pointers

33
$fp = fopen('file.txt','w');

11 - Menggunakan Huruf Besar Kata-kata Khusus SQL

Interaksi database adalah bagian besar dari sebagian besar aplikasi web. Jika Anda menulis kueri SQL mentah, adalah ide bagus untuk membuatnya tetap terbaca juga.

Meskipun kata-kata khusus SQL dan nama fungsi tidak peka terhadap huruf besar, praktik yang umum adalah menggunakan huruf besar untuk membedakannya dari nama tabel dan kolom Anda.

1
2
SELECT id, username FROM user;
3
4
UPDATE user SET last_login = NOW()
5
WHERE id = '123'
6
7
SELECT id, username FROM user u
8
LEFT JOIN user_address ua ON(u.id = ua.user_id)
9
WHERE ua.state = 'NY'
10
GROUP BY u.id
11
ORDER BY u.username
12
LIMIT 0,20

12 - Pemisahan Kode dan Data

Ini adalah prinsip lainnya yang berlaku untuk hampir semua bahasa pemrograman di semua lingkungan. Dalam kasus pengembangan web, "data" biasanya menyiratkan output HTML.

Ketika PHP pertama kali dirilis bertahun-tahun yang lalu, ia terutama dilihat sebagai mesin template. Sudah umum untuk memiliki file HTML yang besar dengan beberapa baris kode PHP di antaranya. Namun, hal-hal telah berubah selama bertahun-tahun dan situs web menjadi lebih dan lebih dinamis dan fungsional. Kode sekarang menjadi bagian besar dari aplikasi web, dan bukan lagi praktik yang bagus untuk menggabungkannya dengan HTML.

Anda bisa menerapkan prinsip ini pada aplikasi Anda sendiri, atau Anda dapat menggunakan alat pihak ketiga (mesin template, kerangka kerja atau CMS) dan mengikuti konvensi mereka.

Kerangka PHP Populer:

Mesin Template Populer:

Sistem Manajemen Konten Populer


13 - Sintaks Alternatif di Dalam Template

Anda dapat memilih untuk tidak menggunakan mesin template mewah, dan sebaliknya pergi dengan PHP inline biasa di file template Anda. Ini tidak harus melanggar "Pemisahan Kode dan Data", asalkan kode inline berhubungan langsung dengan keluaran, dan dapat dibaca. Dalam hal ini Anda harus mempertimbangkan untuk menggunakan sintaks alternatif untuk struktur kontrol.

Inilah contohnya:

1
2
<div class="user_controls">
3
	<?php if ($user = Current_User::user()): ?>
4
		Hello, <em><?php echo $user->username; ?></em> <br/>
5
		<?php echo anchor('logout', 'Logout'); ?>
6
	<?php else: ?>
7
		<?php echo anchor('login','Login'); ?> |
8
		<?php echo anchor('signup', 'Register'); ?>
9
	<?php endif; ?>
10
</div>
11
12
<h1>My Message Board</h1>
13
14
<?php foreach($categories as $category): ?>
15
16
	<div class="category">
17
18
		<h2><?php echo $category->title; ?></h2>
19
20
		<?php foreach($category->Forums as $forum): ?>
21
22
			<div class="forum">
23
24
				<h3>
25
					<?php echo anchor('forums/'.$forum->id, $forum->title) ?>
26
					(<?php echo $forum->Threads->count(); ?> threads)
27
				</h3>
28
29
				<div class="description">
30
					<?php echo $forum->description; ?>
31
				</div>
32
33
			</div>
34
35
		<?php endforeach; ?>
36
37
	</div>
38
39
<?php endforeach; ?>

Ini memungkinkan Anda menghindari banyak kurung kurawal. Selain itu, kodenya terlihat dan terasa mirip dengan cara HTML terstruktur dan terindentasi.


14 - Berorientasi Objek vs Prosedural

Pemrograman berorientasi objek dapat membantu Anda membuat kode yang terstruktur dengan baik. Tapi itu tidak berarti Anda harus meninggalkan pemrograman prosedural sepenuhnya. Sebenarnya membuat perpaduan kedua gaya tersebut adalah bagus.

Objek harus digunakan untuk mewakili data, biasanya berada dalam database.

1
2
class User {
3
4
	public $username;
5
	public $first_name;
6
	public $last_name;
7
	public $email;
8
9
	public function __construct() {
10
		// ...

11
	}
12
13
	public function create() {
14
		// ...

15
	}
16
17
	public function save() {
18
		// ...

19
	}
20
21
	public function delete() {
22
		// ...

23
	}
24
25
}

Fungsi prosedural dapat digunakan untuk tugas-tugas tertentu yang dapat dilakukan secara independen.

1
2
function capitalize($string) {
3
4
	$ret = strtoupper($string[0]);
5
	$ret .= strtolower(substr($string,1));
6
	return $ret;
7
8
}

15 - Membaca Kode Open Source

Proyek Open Source dibangun dengan masukan dari banyak pengembang. Proyek-proyek ini perlu mempertahankan tingkat keterbacaan kode yang tinggi sehingga tim dapat bekerja sama seefisien mungkin. Oleh karena itu, ada baiknya menelusuri kode sumber proyek-proyek ini untuk mengamati apa yang sedang dilakukan pengembang ini.


16 - Refactoring Kode

Saat Anda "refactor," Anda membuat perubahan pada kode tanpa mengubah fungsinya. Anda bisa menganggapnya seperti "membersihkan," demi meningkatkan keterbacaan dan kualitas.

Ini tidak termasuk perbaikan bug atau penambahan fungsi baru apapun. Anda mungkin melakukan refactor pada kode yang telah Anda tulis sehari sebelumnya, sementara masih segar di kepala Anda, sehingga lebih mudah dibaca dan dapat digunakan kembali saat Anda berpotensi melihatnya dua bulan dari sekarang. Seperti moto mengatakan: "refactor awal, refactor sering."

Anda dapat menerapkan salah satu "praktik terbaik" dari keterbacaan kode selama proses refactoring.

Saya harap Anda menikmati artikel ini! Apa saja yang saya lewatkan? Beri tahu saya lewat komentar.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.