Pada artikel ini, Anda akan belajar menggunakan pernyataan penjaga untuk mengontrol aliran eksekusi program Anda.
Pernyataan Swift If menjelaskan bagaimana Anda dapat melakukan tindakan berdasarkan kondisi tertentu (nilai boolean). Pada artikel ini, kita akan membahas manfaat pernyataan penjaga atas pernyataan if untuk mengontrol aliran program dan menulis kode yang lebih sederhana dan bersih.
Pernyataan Penjaga Cepat
Kegunaan utama dari pernyataan penjaga adalah untuk mentransfer kontrol program keluar dari ruang lingkup pada kondisi tertentu. Pernyataan ini mirip dengan pernyataan if yang mengeksekusi pernyataan berdasarkan kondisi tertentu (nilai boolean) tetapi tidak seperti if, pernyataan penjaga hanya berjalan ketika kondisi tertentu tidak terpenuhi.
Selain itu, pernyataan di dalam penjaga harus keluar dari ruang lingkup. Oleh karena itu, kita harus pernyataan kontrol program pengguna return
, break
, continue
atau throw
pada akhir pernyataan penjaga.
Syntax of Guard Statement
ekspresi penjaga lain (// pernyataan // harus berisi pernyataan kontrol: return, break, lanjutkan atau lempar.)
- Di sini, ekspresi adalah ekspresi boolean (mengembalikan
true
ataufalse
). - Jika ekspresi dievaluasi
false
, pernyataan di dalam blok kodeguard
dieksekusi. - Jika ekspresi dievaluasi ke
true
, pernyataan di dalam blok kodeguard
akan dilewati dari eksekusi.
Bagaimana cara kerja pernyataan penjaga?
Catatan: Akhir pernyataan penjaga harus berisi pernyataan kontrol return
, break
, continue
atau throw
.
Contoh 1: Bagaimana cara kerja pernyataan penjaga?
Pernyataan penjaga sederhana yang valid adalah sebagai berikut:
guard true else ( print("Condition not met") ) print("Condition met")
Saat Anda menjalankan program, hasilnya adalah:
Kondisi terpenuhi
Pada program di atas, guard berisi nilai boolean true (kondisi terpenuhi). Karena, guard statement hanya dijalankan jika kondisi tidak terpenuhi, maka statement di dalam guard tidak dijalankan. Itu sebabnya print("Condition met")
dieksekusi dan keluaran Kondisi terpenuhi di layar.
Sekarang mari kita ubah kondisi menjadi false sebagai:
Contoh 2: pernyataan penjaga harus keluar dari ruang lingkup
guard false else ( print("Condition not met") ) print("Condition met")
Dalam program di atas, kondisi penjaga dievaluasi ke false
. Jadi, pernyataan print("Condition not met")
di dalam else harus dieksekusi. Tetapi Anda akan mendapatkan pesan kesalahan yang mengatakan tubuh 'penjaga' mungkin tidak jatuh, pertimbangkan untuk menggunakan 'kembali' atau 'lempar' untuk keluar dari ruang lingkup.
Pesan kesalahan dalam berarti kata sederhana, Anda perlu untuk mentransfer kontrol program dari pernyataan penjaga menggunakan return
, break
, continue
atau throw
pernyataan. Untuk saat ini kami akan menggunakan return
. Dan karena return
pernyataan hanya dapat digunakan di dalam sebuah fungsi, kita akan membungkus kode di atas dalam Fungsi Swift.
Contoh 3: pernyataan penjaga di dalam suatu fungsi
Kita bisa menggunakan pernyataan penjaga di dalam fungsi di Swift sebagai:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
Ketika Anda menjalankan program di atas, hasilnya adalah:
Kondisi tidak terpenuhi Hello setelah pemanggilan fungsi
Dalam program di atas, kondisi penjaga dievaluasi false
, oleh karena itu pernyataan di dalam penjaga dijalankan. print("Condition not met")
Output pernyataan pertama Kondisi tidak terpenuhi di konsol.
Dan pernyataan tersebut return
menghentikan eksekusi suatu fungsi dan pernyataan tersebut print("Hello, after function call")
setelah pemanggilan fungsi dijalankan yang menghasilkan Hello after function call di konsol.
Contoh 4: Penjaga dengan opsional
Kita telah melihat di Swift Opsional penggunaan if-let
untuk membuka bungkusan opsional. Namun, kami juga dapat menggunakan pernyataan penjaga sebagai pengganti if-let
untuk membuka bungkus opsional dengan satu keuntungan. Keuntungan utama dari membuka bungkus opsional dengan pelindung daripada if-let
adalah kita dapat meningkatkan cakupan variabel yang tidak dibungkus.
Mari kita lihat pada contoh di bawah ini:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Ketika Anda menjalankan program di atas, hasilnya adalah:
Namanya nihil. Tidak dapat memproses
Dalam program di atas, Anda dapat melihat nilai temp yang tidak terbungkus digunakan di luar cakupan yang ditentukan oleh pernyataan penjaga. Karena, nama didefinisikan sebagai opsional dan berisi nilai nil, pernyataan penjaga gagal untuk membuka bungkusan nilai.
Jadi, pernyataan di dalam guard else mengeksekusi yang mencetak Name is nil. Tidak dapat memproses dalam output dan mengakhiri fungsi dengan return
pernyataan. Kode yang setara dari pernyataan penjaga di atas jika-else adalah:
func changeOptionalStringToUpperCase() ( var name:String? if let temp = name ( print("Uppercased:(temp.uppercased())") ) else ( print("Name is nil. Cannot process") return ) //how to access temp here?? Solution:Use Guard ) changeOptionalStringToUpperCase()
Perhatikan dua pernyataan di atas sama-sama valid dan melakukan pekerjaan yang sama. Tetapi menggunakan pernyataan if-let Anda tidak dapat menggunakan nilai yang tidak terbungkus di luar pernyataan if-let. Tetapi dengan pernyataan penjaga Anda dapat menggunakan nilai yang tidak terbungkus di seluruh fungsi.
Contoh 5: Penjaga dengan banyak kondisi
Pernyataan penjaga juga dapat merangkai beberapa ketentuan yang dipisahkan oleh koma (,) sebagai:
func changeOptionalStringToUpperCase() ( var name:String? = "" guard let temp = name , temp.count> 0 else ( print("Name is nil or an empty string. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Ketika Anda menjalankan program di atas, hasilnya adalah:
Nama tidak ada atau string kosong. Tidak dapat memproses
Dalam program di atas, pernyataan penjaga berisi dua kondisi yang dipisahkan oleh koma.
Kondisi pertama let temp = name
membuka bungkusan opsional yang kembali true
dalam kasus kita dan kondisi kedua temp.count> 0
memeriksa apakah string yang tidak dibungkus memiliki lebih dari 0 karakter yang dievaluasi false
dalam contoh kita.
Oleh karena itu, pernyataan di dalam pernyataan penjaga mengeksekusi pernyataan print("Name is nil or an empty string. Cannot process")
yang menghasilkan Nama nihil atau string kosong. Tidak dapat memproses di konsol dan menghentikan fungsi dengan return
pernyataan.