Menu
CoddyTech

Using vs. Try-Finally

Termasuk bagian Logika dan Alur dalam perjalanan C# di Coddy. Pelajaran 28 dari 66.

Baik pernyataan using maupun blok try-finally membantu mengelola resource yang perlu dibersihkan dengan benar. Pernyataan using menyediakan cara yang lebih rapi dan ringkas untuk memastikan object IDisposable dibersihkan dengan benar.

Catatan: using menggantikan pola try-finally untuk pembersihan resource. Namun, using tidak menggantikan try-catch. Kamu tetap bisa membungkus blok using di dalam try-catch untuk menangani exception.

Mari kita lihat pendekatan try-finally terlebih dahulu:

StreamReader reader = null;
try
{
    reader = new StreamReader("file.txt");
    string content = reader.ReadToEnd();
    Console.WriteLine(content);
}
finally
{
    if (reader != null)
    {
        reader.Dispose();
    }
}

Pernyataan using menyederhanakan kode ini:

using (StreamReader reader = new StreamReader("file.txt"))
{
    string content = reader.ReadToEnd();
    Console.WriteLine(content);
}

Pernyataan using otomatis memanggil Dispose() saat keluar dari blok, bahkan jika terjadi exception.

Apa itu StreamReader?
StreamReader adalah class yang digunakan untuk membaca teks dari file. Kamu membuatnya dengan memberikan nama file, lalu class ini membuka file untuk dibaca. Class ini mengimplementasikan IDisposable, jadi harus ditutup dengan benar setelah digunakan. Hal ini ditangani oleh using.

Beberapa method umum StreamReader:

  • ReadToEnd(): membaca seluruh file sebagai satu string
  • ReadLine(): membaca satu baris setiap kali, mengembalikan null saat mencapai akhir file

Untuk menghitung baris dalam sebuah file, kamu bisa menggunakan perulangan ReadLine():

using (StreamReader reader = new StreamReader("file.txt"))
{
    int lineCount = 0;
    while (reader.ReadLine() != null)
    {
        lineCount++;
    }
    Console.WriteLine(lineCount);
}

Kamu juga bisa menggabungkan using dengan try-catch untuk menangani exception seperti file yang hilang:

try
{
    using (StreamReader reader = new StreamReader("file.txt"))
    {
        int lineCount = 0;
        while (reader.ReadLine() != null)
        {
            lineCount++;
        }
        Console.WriteLine(lineCount);
    }
}
catch (FileNotFoundException)
{
    Console.WriteLine("File not found");
}
challenge icon

Tantangan

Mudah

Buat method bernama processFile yang:

  1. Menerima nama file sebagai parameter string
  2. Menggunakan pernyataan using dengan StreamReader untuk membaca semua baris dari file
  3. Mengembalikan jumlah baris dalam file
  4. Jika terjadi FileNotFoundException, cetak "File not found" dan kembalikan -1

Coba sendiri

using System;
using System.IO;

class ProcessFile
{
    public static int processFile(string filename)
    {
        // Tulis kodemu di sini
    }
}
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 C# online