Return Early/Early Exit - Pattern
Pendahuluan
Return Early/Early Exit Pattern merupakan salah satu Best Practice yang perlu diketahui oleh Software Engineer.
Return Early/Early Exit Pattern merupakan salah satu cara agar membuat Method atau Function dari coding kita mudah dibaca dan lebih bersih.
Langsung contoh saja kali ya …
Contoh 1
Misalkan kita punya code seperti ini :
|
|
Ada yang salah dengan code diatas ?
Hmmm…sepertinya tidak..
Cobaa..lihat lagi..
Iyaa..sepertinya tidak..tidak ada yang salah..
Logicnya sepertinya benar dan memang begitu seharusnya ..
Iyaa, tapi codenya membuat Brain overloaded dan tidak mudah dibaca.
Hmmm, dibagian mananya ?
Secara sederhana bisa kita lihat :
- Terlalu banyak If .. else di code nya.
- Terkait dengan banyak If .. else, maka otak kita secara natural mesti menyimpan kondisi-kondisi positif dan negatif di setiap kondisi If..Else yang ada di code nya tersebut, agar kita bisa paham logicnya. Dan ini membuat otak kita berputar-putar seperti gasing, membuat kasus yang namanya Brain Overload.
- Membuat Unit test untuk mengetes logic dari codenya, membutuhkan kombinasi kasus yang kita mesti sedikit mengerenyitkan dahi.
Lihat kaan..
Dengan code seperti diatas, maka hidup kita akan cukup tersiksa dengan cara coding seperti diatas.
Oleh karenanya muncul Best Practice, namanya Return Early/Early Exit pattern
Apa itu Return Early/Early Exit Pattern ?
Return Early/Early Exit pattern adalah cara coding untuk sebuah fungsi/method dimana sesegera mungkin melakukan termination dari eksekusi (dengan melakukan return fungsi atau throw exception) ketika ada kondisi yang tidak cocok.
Caranya bagaimana ?
Simple..sesuai namanya :
- Letakkan kondisi / If .. yang negatif di bagian paling atas code.
- Lakukan Return .. seketika sudah ketemu kasus yang diinginkan, tanpa menunggu sampai seluruh code sampai akhir fungsi dijalankan.
- Segera lakukan Throw … ketika terjadi kondisi negatif.
- Sebisa mungkin hindari menggunakan variable boolean yang selalu diupdate untuk pengecekan kondisi, langsung kembalikan Return atau Throw.
Ok,coba kita langsung ke code nya saja :
Kita ambil contoh code diatas.
Setelah direfactoring, maka akan menjadi sbb :
|
|
Code kita diatas sebenarnya sama dengan code di code yang pertama diatas.
Tetapi dengan pendekatan Return Early pattern.
Coba kita lihat, apa yang berbeda, sbb :
- Analisa kondisi negatif dilakukan di awal-awal line of code, dan langsung Throw Exception
- Sisa dari code nya hanya merupakan kondisi positif. Dalam hal ini ditaruh di bagian terakhir dari line of code nya method validate.
- Struktur penulisan code nya juga lebih flat, dan tidak berkalang seperti code yang pertama di atas.
- Memahami code nya juga lebih mudah, karena pemisahan kasus-kasus yang negatif.
- Membuat unit test juga lebih mudah, karena tidak ada percabangan if yang membuat banyak kasus.
See.. code kita jadi lebih mudah dibaca, dipahami, dilihat, diraba, diterawang. (udah kayak memeriksa uang saja)