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.

csharp
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:

text
Harga berhasil dibaca: 75000
Form input ditutup
Input tidak valid
Form input ditutup

Mari kita telaah hasilnya:

  1. Iterasi 1: "75000" berhasil dibaca; blok catch dilewati, tetapi finally tetap dieksekusi — output mencetak Form input ditutup setelah pesan sukses.
  2. Iterasi 2: "lupa isi" melempar FormatException; blok catch mencetak Input tidak valid, lalu finally kembali dieksekusi.
  3. Urutan output: Baris Form input ditutup muncul dua kali karena blok finally tidak peduli jalur mana yang dilewati — jaminannya mutlak.

Kapan finally Dibutuhkan #

Pola umumnya muncul ketika satu resource dipakai di blok try:

LangkahLetak
Membuka file atau koneksiAwal blok try
Memakai resource untuk pekerjaan utamaIsi blok try
Menangani kegagalanBlok catch
Menutup resourceBlok 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.