Menu
CoddyTech

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 file

raise 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
end

Konvensinya 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.

challenge icon

Tantangan

Mudah

Tentukan sebuah method safe_divide(a, b) yang:

  • Memunculkan ArgumentError dengan pesan "b cannot be zero" jika b == 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, cetak Error: <message>
  • Di dalam ensure, selalu cetak Done.

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.
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Ruby online