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.

0 0 votes
Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments

0
Would love your thoughts, please comment.x
()
x