begin / rescue
Termasuk bagian Logika dan Alur dalam perjalanan Ruby di Coddy. Pelajaran 44 dari 56.
Untuk mencegah exception membuat programmu crash, bungkus kode yang berisiko dengan begin ... rescue ... end. Jika ada sesuatu di dalam begin yang memunculkan exception, Ruby akan beralih ke blok rescue yang sesuai alih-alih menghentikan program.
begin
result = 10 / 0
puts result
rescue ZeroDivisionError
puts "Cannot divide by zero!"
end
# Tidak bisa membagi dengan nol!Kamu bisa menangkap object exception itu sendiri dengan => e dan membaca .message miliknya:
begin
Integer("hello")
rescue ArgumentError => e
puts "Bad input: #{e.message}"
end
# Input salah: nilai tidak valid untuk Integer(): "hello"Jika kamu tidak menyebutkan class exception, rescue saja akan menangkap StandardError dan turunannya, yaitu sebagian besar kegagalan yang umum terjadi. Penangkapan paling berguna saat kamu bisa melakukan sesuatu di blok rescue: mengganti dengan nilai default, mencatat masalah, atau meminta pengguna mencoba lagi.
Tantangan
MudahBaca dua baris dari input, keduanya seharusnya berupa bilangan bulat, tetapi baris kedua mungkin bukan angka yang valid.
Bungkus parsing baris kedua dengan begin / rescue:
- Gunakan
Integer(input)(yang memunculkanArgumentErrorjika string tidak valid) - Jika parsing berhasil, cetak
Sum: <a + b> - Jika gagal, cetak
Bad number!
Untuk input 3 lalu 4, output-nya adalah Sum: 7. Untuk 3 lalu abc, output-nya adalah Bad number!.
Coba sendiri
a = gets.to_i
raw_b = gets.chomp
# TODO: gunakan begin/rescue untuk Integer(raw_b); cetak jumlahnya atau teks persis seperti dalam instruksi
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