Formulir pendaftaran online selalu menutup layar isian setelah dikirim — entah isian berhasil diproses, entah ditolak karena data tidak lengkap. Kode program menuntut jaminan serupa: beberapa langkah pembersihan harus berjalan apa pun hasil percobaan. Blok finally menyediakan jaminan itu: isinya selalu dieksekusi, apa pun yang terjadi pada blok try dan catch.
Tiga Skenario, Satu finally #
Blok finally ditulis setelah blok try dan blok catch. Runtime menjalankannya dalam tiga skenario: try selesai tanpa galat, exception tertangkap di catch, dan bahkan ketika exception tidak tertangkap sebelum program berhenti. Tempat yang tepat untuk kode pembersihan (cleanup): menutup file, melepas koneksi, atau menandai layar selesai dipakai.
string[] inputPengguna = { "75000", "lupa isi" };
foreach (string input in inputPengguna)
{
try
{
int harga = int.Parse(input);
Console.WriteLine($"Harga berhasil dibaca: {harga}");
}
catch (FormatException)
{
Console.WriteLine("Input tidak valid");
}
finally
{
Console.WriteLine("Form input ditutup");
}
}Output yang Dihasilkan:
Harga berhasil dibaca: 75000
Form input ditutup
Input tidak valid
Form input ditutupMari kita telaah hasilnya:
- Iterasi 1:
"75000"berhasil dibaca; blok catch dilewati, tetapifinallytetap dieksekusi — output mencetakForm input ditutupsetelah pesan sukses. - Iterasi 2:
"lupa isi"melemparFormatException; blok catch mencetakInput tidak valid, lalufinallykembali dieksekusi. - Urutan output: Baris
Form input ditutupmuncul dua kali karena blokfinallytidak peduli jalur mana yang dilewati — jaminannya mutlak.
Kapan finally Dibutuhkan #
Pola umumnya muncul ketika satu resource dipakai di blok try:
| Langkah | Letak |
|---|---|
| Membuka file atau koneksi | Awal blok try |
| Memakai resource untuk pekerjaan utama | Isi blok try |
| Menangani kegagalan | Blok catch |
| Menutup resource | Blok finally |
Tanpa finally, penutupan resource harus ditulis di dua tempat — akhir jalur sukses dan akhir jalur galat — dan satu jalur saja terlewat membuat resource tetap terbuka.