Di sebagian besar bahasa komputer, kasus atau bersyarat (juga dikenal sebagai beralih) pernyataan membandingkan nilai suatu variabel dengan beberapa konstanta atau literal dan menjalankan path pertama dengan case yang cocok. Di Rubi, ini sedikit lebih fleksibel (dan kuat).
Alih-alih tes kesetaraan sederhana dilakukan, operator kasus kesetaraan digunakan, membuka pintu bagi banyak kegunaan baru.
Ada beberapa perbedaan dari bahasa lain. Di C, pernyataan switch adalah jenis pengganti untuk serangkaian jika dan kebagian pernyataan. Kasing secara teknis adalah label, dan beralih pernyataan akan masuk ke label yang cocok. Ini menunjukkan perilaku yang disebut "fallthrough," karena eksekusi tidak berhenti ketika mencapai label lain.
Ini biasanya dihindari dengan menggunakan pernyataan break, tetapi fallthrough kadang disengaja. Pernyataan kasus di Ruby, di sisi lain, dapat dilihat sebagai singkatan untuk serangkaian jika pernyataan. Tidak ada kesalahan, hanya kasus pencocokan pertama yang akan dieksekusi.
Bentuk Dasar Pernyataan Kasus
Bentuk dasar dari pernyataan kasus adalah sebagai berikut.
Seperti yang Anda lihat, ini adalah sesuatu yang terstruktur seperti pernyataan kondisional if / else if / else. Nama (yang akan kami sebut nilai), dalam hal ini yang dimasukkan dari keyboard, dibandingkan dengan masing - masing kasus dari kapan klausa (yaitu kasus), dan yang pertama saat blok dengan case yang cocok akan dieksekusi. Jika tidak ada yang cocok, maka lain blok akan dieksekusi.
Yang menarik di sini adalah bagaimana nilainya dibandingkan dengan masing-masing kasus. Seperti disebutkan di atas, dalam C ++, dan bahasa sejenis C lainnya, perbandingan nilai sederhana digunakan. Di Ruby, operator kesetaraan kasus digunakan.
Ingat bahwa jenis sisi kiri dari operator kasus kesetaraan penting, dan kasing selalu sisi kiri. Jadi, untuk masing-masing kapan klausa, Ruby akan mengevaluasi nilai kasus sampai menemukan kecocokan.
Jika kita memasukkan Bob, Ruby akan mengevaluasi terlebih dahulu "Alice" "Bob", yang akan menjadi salah sejak itu Tali# didefinisikan sebagai perbandingan string. Lanjut, /[qrz[.+/i "Bob" akan dieksekusi, yang salah sejak itu Bob tidak dimulai dengan Q, R atau Z.
Karena tidak ada kasus yang cocok, Ruby kemudian akan menjalankan klausa yang lain.
Bagaimana Type Datang Ke Play
Penggunaan umum dari pernyataan kasus adalah untuk menentukan jenis nilai dan melakukan sesuatu yang berbeda tergantung pada jenisnya. Meskipun ini mematahkan kebiasaan mengetik bebek Ruby, terkadang perlu dilakukan.
Ini berfungsi dengan menggunakan Kelas# (secara teknis, Modul#) operator, yang menguji jika sisi kanan adalah? sisi kiri.
Sintaksnya sederhana dan elegan:
Kemungkinan Bentuk Lain
Jika nilai dihilangkan, pernyataan kasus bekerja sedikit berbeda: ia bekerja hampir persis seperti pernyataan if / else if / else. Keuntungan menggunakan pernyataan kasus atas suatujika Pernyataan, dalam hal ini, hanyalah kosmetik.
Sintaks yang Lebih Ringkas
Ada kalanya ada sejumlah besar kecil kapan klausa. Pernyataan kasus seperti itu dengan mudah tumbuh terlalu besar untuk muat di layar. Ketika hal ini terjadi (tidak ada permainan kata-kata yang dimaksudkan), Anda dapat menggunakan kemudian kata kunci untuk meletakkan tubuh kapan klausa pada baris yang sama.
Sementara ini membuat beberapa kode yang sangat padat, asalkan masing-masing kapan klausa ini sangat mirip, sebenarnya menjadi lebih dapat dibaca
Ketika Anda harus menggunakan satu-baris dan banyak-baris ketika klausa terserah Anda, itu masalah gaya. Namun, mencampur keduanya tidak dianjurkan - pernyataan kasus harus mengikuti pola agar dapat dibaca.
Penugasan Kasus
Seperti pernyataan if, pernyataan kasus mengevaluasi pernyataan terakhir di kapan ayat. Dengan kata lain, mereka dapat digunakan dalam tugas untuk menyediakan semacam tabel. Namun, jangan lupa bahwa pernyataan kasus jauh lebih kuat daripada array sederhana atau pencarian hash. Tabel seperti itu tidak perlu menggunakan literal di kapan klausa.
Jika tidak ada kecocokan saat klausa dan tidak ada klausa lain, maka pernyataan kasus akan dievaluasi nol.