Guard Statement Swift
Guard Statement hanya berjalan jika kondisinya salah, dan akan keluar dari fungsi melalui return
. Jika kondisinya benar, Swift mengabaikan guard statement. Jadi kita statement ini bermanfaat untuk early exit dan meminimalisir bracket.
func checkDoorProgram() { let isUnlocked = true guard isUnlocked else { // if isUnlocked == false, kode ini dijalankan print("Kamu tidak diizinkan masuk") return } print("Kamu diizinkan masuk") }
guard
statement tidak hanya berguna untuk mengganti typical conditional block
dengan pernyataan else-if, tetapi juga bagus untuk unwrap optional dengan meminimalkan jumlah tanda kurung. Untuk membandingkan, pertama-tama mari kita mulai cara membuka beberapa opsi dengan yang else-if.
Pertama, mari kita buat tiga optional yang akan dibuka.
var publicName: String? = "Adika" var publicPhoto: String? = "Adika's photo" var publicAge: Int? = nil
Jangan lagi memakai cara ini.
func unwrapOneByOne() { if let name = publicName { if let photo = publicPhoto { if let age = publicAge { print("\(name), \(photo), \(age)") } else { print("umur tidak ditemukan") } } else { print("poto tidak ditemukan") } } else { print("nama tidak ditemukan") } }
Kode memang berfungsi tetapi melanggar DRY Principle
. oke saya pun setuju kode di atas bikin sakit mata. jadi kita tinggalkan.
DRY: Don’t Repeat Yourself
Mungkin kamu juga pernah menulis seperti ini.
func unwrapBetter() { if let name = publicName { print(name) } else { print("tidak ada nama") return } if let photo = publicPhoto { print(photo) } else { print("tidak ada poto") return } if let age = publicAge { print(age) } else { print("tidak ada umur") return } }
Kode di atas lebih mudah dibaca dibandingkan kode sebelumnya.
Ketika Swift masuk ke
return
, itu berarti langsung berhenti dan keluar dari fungsi, jadi tidak melanjutkan kode dibawahnya.
Unwrap dengan Guard
func unwrapOneByOneWithGuard() { guard let name = publicName else { print("Nama tidak ditemukan") return } guard let photo = publicPhoto else { print("Poto tidak ditemukan") return } guard let age = publicAge else { print("Umur tidak ditemukan") return } print(name) print(photo) print(age) }
Unwrap beberapa optional dengan Else-If
Swift juga memungkinkan kita untuk membuka beberapa optional sekaligus. Namun, Jika salah satu dari mereka berisi nil
, itu akan mengeksekusi blok yang lain.
func unwrap() { if let name = publicName, let photo = publicPhoto, let age = publicAge { print("\(name), \(photo), \(age)") } else { // jika ada variable yang nil print("Ada data yang hilang") } }
Penting: Ketika membuka beberapa optional sekaligus, kamu tidak dapat mengidentifikasi mana yang mengandung nil.
Unwrap beberapa optional dengan guard
Oke kita juga bisa unwrap beberapa optional sekaligus dengan guard
func unwrapWithGuard() { guard let name = publicName, let photo = publicPhoto, let age = publicAge else { // jika ada variable yang nil print("Ada data yang hilang") return } print("\(name), \(photo), \(age)") }
Semoga bermanfaat.