Tips untuk simple code: part 3. satu level indentation

29 Jul 2022
1990

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.

Daftar Isi

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.

Apa itu Persistance Layer?

Kali ini kita akan membahas tentang apa itu persistance layer khususnya dalam PHP OOP. Persistance layer biasa dijelaskan sebagai layer tempat untuk CREATE, UPDATE, DELETE data.
Agus Yusida
5 min read 2794

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.
Agus Yusida
5 min read 1976

Tips untuk simple code: part 2. Hindari penggunaan Else

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

© 2024