ensure dan raise
Termasuk bagian Logika dan Alur dalam perjalanan Ruby di Coddy. Pelajaran 46 dari 56.
Dua bagian lagi melengkapi perangkat penanganan error.
ensure adalah blok yang dijalankan apa pun yang terjadi, baik begin selesai secara normal, cabang rescue menangkap pengecualian, maupun pengecualian tidak tertangkap. Di sinilah kamu menaruh kode pembersihan:
begin
puts "opening file"
raise "something broke"
rescue
puts "caught it"
ensure
puts "closing file"
end
# membuka file
# berhasil menangkapnya
# menutup fileraise adalah cara untuk membuat exception sendiri. Berikan string sebagai pesan, atau class beserta pesan:
def withdraw(amount)
raise ArgumentError, "amount must be positive" if amount <= 0
# ... lakukan penarikan dana
endKonvensinya adalah menggunakan raise sejak awal, di bagian atas method, agar program segera gagal saat argumen salah. Pemanggil dapat menggunakan rescue jika memiliki cara pemulihan yang masuk akal, atau membiarkan error terus merambat.
Tantangan
MudahTentukan sebuah method safe_divide(a, b) yang:
- Memunculkan
ArgumentErrordengan pesan"b cannot be zero"jikab == 0 - Jika tidak, mengembalikan
a / b
Lalu baca dua bilangan bulat dari input. Panggil safe_divide di dalam begin / rescue / ensure:
- Jika berhasil, cetak
Result: <value> - Jika terjadi
ArgumentError, cetakError: <message> - Di dalam
ensure, selalu cetakDone.
Untuk input 10 / 2, output-nya adalah:
Result: 5
Done.Untuk input 10 / 0:
Error: b cannot be zero
Done.Coba sendiri
# TODO: definisikan safe_divide(a, b), yang memunculkan ArgumentError saat b == 0
a = gets.to_i
b = gets.to_i
# TODO: gunakan begin ... cetak Result; rescue ArgumentError => e ... cetak Error; ensure ... cetak Done.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami String
Ringkasan Method StringInterpolasi StringMenelusuri StringMemisahkan dan MenggabungkanRekap: Perangkai String4Block, Proc, dan Lambda
Apa Itu Block?do..end vs Kurung KurawalKata Kunci yieldParameter BlockProc dan LambdaRangkuman, Iterator Kustom5Andalan Enumerable
Select dan RejectMerangkai MapReduce / Injectcount, all?, any?, none?group_by dan partitionsort_by, min_by, max_byRekap: Alur Data8Pengambilan Keputusan Lanjutan
Case dengan class & regexwhen dengan Banyak NilaiOperator Ternaryif / unless SebarisUlasan, Pengklasifikasi Nilai3Array 2D
Dasar Array 2DMengakses Elemen Array 2DMenelusuri Array 2DPola Umum Array 2DRekap: Operasi Matriks6Proyek: Pengelola Perpustakaan
Ikhtisar ProyekTambahkan Buku9Penanganan error
Apa Itu Exception?begin / rescueBeberapa Klausa rescueensure dan raiseRingkasan, Kalkulator AmanLatihan sendiri: Compiler Ruby online