[Stack Update] Exit Early

Muhammad Alfiansyah
2 min readDec 7, 2022
Photo by Ivy.D Design on Unsplash

you cant expect the person who broke you into pieces to bring those pieces and say i’m gonnna put you back together

you cant do that

you can but why would you choose to do that ?

someone who has the power to destroy you and use that power

why would you trust them with rebuilding you

Apa sih Exit Early dalam pemrograman ?

Kalo untuk menghandel Callback Hell kita bisa menggunakan Delegate, Promise, Functional (Declarative) sebagai replacement.

Tapi apa itu Exit Early ? sebenanya secara konsep masih sama dengan Callback Hell problem ketika kita menggunakan nested if yang terlalu dalam. Contoh:

if (a) {
if (b) {
if (c) {
if (d) {
// dan seterusnya
}
}
}
}

Yang membedakan senior dan junior sebenanya cuma cara penggunaan tools atau alat yang diberikan. Banyak kok fresh graduate programmer yang pinter bahkan lebih pinter dari programmer lama dan kadang bisa mencapai senior dengan waktu yang cepat.

Senior programmer sekarang bukan ditentukan dengan lama kerja, banyak faktor yang bisa dijadikan acuan, entah itu problem solving nya, cara komunikasi, dan bagaimana mereka bisa menghandle manusia.

Oke kembali ke topik …jadi bagaimana solusi nested if tersebut ?

Konsep Exit Early ini sebenarnya saya kenal pertama kali di bahasa Swift yaitu dengan guard let.

Dengan guard let kita bisa solve nested if ini. Contohnya sebagai berikut

guard a else {
// Call error function
return
}

guard b else {
// Call error function
return
}

guard c else {
// Call error function
return
}

guard d else {
// Call error function
return
}

Jadi gimana kalau dibahasa lain ? sebenarnya sama saja kita tetap bisa menggunakan if statement kok.

if !a {
// return or call error
}

if !b {
// return or call error
}

if !c {
// return or call error
}

if !d {
// return or call error
}

Contoh Penggunaan di real case

func fetchList() -> [String] {
if isReachable{
if isConnected{
return fetch()
} else {
return []
}
} else {
return []
}
}
func fetchList() -> [String] {
guard isReachable else { return [] } // Ketika tidak reachable return empty Array
guard isConnected else { return [] } // Ketika tidak connected return empty Array

return fetch()
}

What Next ?

Jadi sebisa mungkin hindari nested code karena maintenance nya agak njelimet kalau sudah banyak dan more cleaner buat dibaca. Semoga bisa membantu !!

Usefull Resources

--

--

Muhammad Alfiansyah

Power is dangerous. It corrupts the best and attracts the worst. Power is only given to those who are prepared to lower themselves to pick it up-Ragnar Lothbrok