Tips untuk simple code: part 3. satu level indentation

By Yusida
29 Jul 2022

Part ketiga dari tips membuat kode kamu lebih simple ini adalah bagaimana caranya agar kode yang kamu buat memiliki minimal satu level indentation di dalam fungsi yang kamu buat. Kedengarannya  memang susah sih, tapi kita lihat dahulu sample kode di bawah ini.

Class BankAccount{

	protected $accounts;

	private _construct($accounts){
		$this->accounts = $accounts;
	}

	public function filterBy($accountType){
		//0 level
		$filtered = [];

		foreach($this->accounts as $account){
			//1 level
			if($account->type == $accountType){
				//2 level

				if($account->active){
					//3 level
					$filtered[] = $account;
				}

			}
		}

		return $filtered;
	}
}

Pada sample class di atas kita dapat melihat sebuah fungsi yg simple tapi sudah memiliki 3 level indentation dimana kita harus mencoba refactoring kode tersebut sehingga memenuhi rules yaitu 1 level indentation.

Work from inside to out.

Akan lebih mudah jika mulai refactoring dari dalam yaitu kita akan refactoing yang ada di dalam foreach.

Class BankAccount{

	protected $accounts;

	private _construct($accounts){
		$this->accounts = $accounts;
	}

	public function filterBy($accountType){
		//0 level
		$filtered = [];

		foreach($this->accounts as $account){
			//1 level
			if($account->type == $accountType && $account->active){
				//2 level
				$filtered[] = $account;

			}
		}

		return $filtered;
	}
}

Selanjutnya apa yang kita bisa sederhanakan lagi? Bagaimana jika kita membuat sebuah fungsi baru lagi untuk menghandle semua proses di dalam foreach tersebut?

Class BankAccount{

	protected $accounts;

	private _construct($accounts){
		$this->accounts = $accounts;
	}

	public function filterBy($accountType){
		//0 level
		$filtered = [];

		foreach($this->accounts as $account){
			//1 level
			if($this->isOfType($accountType,$account)){
				//2 level
				$filtered[] = $account;
			}
		}

		return $filtered;
	}

	private function isOfType($accountType,$account){
		return $account->type == $accountType && $account->active;
	}

}

Hmm, kita masih memiliki 2 level indentation. Jika kita perhatikan foreach tersebut bisa kita ganti dengan fungsi yang sudah ada di php yaitu array filter. Jadi ayo kita refactoring lagi.

Class BankAccount{

	protected $accounts;

	private _construct($accounts){
		$this->accounts = $accounts;
	}

	public function filterBy($accountType){
		//0 level
		$filtered = array_filter($this->accounts, function($account) use ($accountType)
		{
			//1 level
			$this->isOfType($accountType,$account)
		});

		return $filtered;

	}

	private function isOfType($accountType,$account){
		return $account->type == $accountType && $account->active;
	}

}

Yup, kali ini kita sudah punya 1 level indentation. Sedikit sentuhan akhir bagaimana kita ga usah pakai variable $filtered lagi jadi tinggal return saja array hasilnya.

Class BankAccount{

	protected $accounts;

	private _construct($accounts){
		$this->accounts = $accounts;
	}

	public function filterBy($accountType){
		//0 level
		return array_filter($this->accounts, function($account) use ($accountType)
		{
			//1 level
			$this->isOfType($accountType,$account)
		});

	}

	private function isOfType($accountType,$account){
		return $account->type == $accountType && $account->active;
	}

}

Saya kira kode di atas sudah cukup simple dan jika dibandingkan dengan kode saat di awal tentu saja kode akhir ini jauh lebih pendek tapi tetap memiliki fungsi akhir yang sama. Kita lihat hasil akhir dari refactoring kita kali ini dan kalian bisa bandingkan dengan kode sebelumnya.

Tips 1 level indentation ini memang lebih kepada selera masing-masing programmer. Dengan tips ini akan membuat design kode yang kita buat menjadi lebih rapi dan juga bisa meningkatkan kemampuan kode tersebut untuk dibaca oleh programmer lainnya.

Good code can read by computer, but good programmer write code that also can read by human. ~ bcscoder

Artikel Lainnya

Artikel lain yang mungkin menarik juga untuk kamu baca.

Tips untuk simple code: part 4. Batasi penggunaan variable yang tidak perlu

Tips untuk simple code adalah membatasi penggunaan variable yang tidak perlu. Mau tahu implementasinya seperti apa? Yuk baca artikel ini lebih lanjut.
Yusida
5 min read

Tips untuk simple code: part 2. Hindari penggunaan Else

Tips untuk simple code part 2 adalah menghindari penggunaan else yang berlebihan dalam kodingan kamu.
Yusida
5 min read

Tips untuk simple code: part 1. Hindari penggunaan singkatan dalam penamaan

Kali ini kita mau bahas beberapa tips untuk kamu yang jadi programmer (yg ga pro pastinya) tentang bagaimana menulis kode yang kamu buat menjadi lebih simple, lebih mudah di baca baik oleh kamu sendiri ataupun tim kerja kamu nanti. Mau tahu tipsnya seperti apa? Yuk baca artikel ini.
Yusida
5 min read

© 2022 - NGIDE.NET. All rights reserved.