Halo! Selamat datang kembali di “Seri Belajar Dasar Pemrograman Bahasa C#“. Sampai di sini, pastinya Anda sudah memahami apa itu variabel dan bagaimana cara mendeklarasikannya. Namun, satu hal yang belum kita pelajari adalah tentang lingkup variabel di C#.
Apa Itu Lingkup Variabel Di C#?
Pada saat mendeklarasikan sebuah variabel, kita perlu memperhatikan sejauh mana variabel tersebut nantinya bakal diakses oleh kode program kita. Apakah variabel tersebut akan diakses dari beberapa method dalam sebuah class atau hanya akan diakses oleh sebuah blok perulangan, misalnya, untuk melakukan pencacahan saja?
Sejauh mana sebuah variabel bisa diakses oleh bagian kode program yang lain disebut dengan lingkup variabel. Di C#, setidaknya ada tiga lingkup variabel yang perlu kita perhatikan, yaitu:
Lingkup Variabel Pada Tingkatan class
Sebuah variabel yang dideklarasikan dalam tingkatan class biasa disebut dengan field. Variabel ini merupakan variabel “global” yang bisa diakses oleh setiap member pada class tersebut.
Untuk membantu pemahaman Anda, coba perhatikan kode program di bawah ini.
class Program
{
// Deklarasi variabel pada tingkatan class
static string message;
static void Main(string[] args)
{
// Akses variabel dari method Main() yang merupakan member (bagian) dari class Program
message = "Halo dari Main()";
Console.WriteLine(message);
classMember();
}
static void classMember()
{
// Akses variabel dari method classMember() yang juga merupakan member (bagian) dari class Program
message = "Halo dari classMember()";
Console.WriteLine(message);
}
}
Pada kode program di atas, kita mendeklarasikan sebuah variabel message
pada tingkatan class. Oleh karena itu, variabel tersebut bisa kita akses baik dari method Main()
maupun method classMember()
yang merupakan member atau bagian dari class Program
.
Catatan
Kata kunci static harus ditambahkan pada deklarasi variabel message karena method Main() dan classMember() menggunakan kata kunci static. Karena secara default method Main() didefinisikan dengan kata kunci static, agar method classMember() bisa dipanggil dari dalam method Main(), method tersebut juga harus menggunakan kata kunci static.
Untuk memahami mengapa secara default method Main() didefinisikan dengan kata kunci static, Anda bisa merujuk materi ini: Fungsi static Main().
Jika dijalankan, kode program di atas akan menghasilkan keluaran seperti berikut ini.
Halo dari Main()
Halo dari classMember()
Lingkup Variabel Pada Tingkatan method
Jika sebuah variabel dideklarasikan di dalam sebuah method, konsekuensinya variabel tersebut hanya bisa diakses dari dalam method tersebut saja.
Coba modifikasi kode program sebelumnya menjadi seperti pada kode program di bawah ini.
class Program
{
static void Main(string[] args)
{
// Deklarasi variabel di dalam method Main()
string message;
// Variabel tersebut bisa diakses dari dalam blok method Main()
message = "Halo dari Main()";
Console.WriteLine(message);
classMember();
}
static void classMember()
{
// Kode program di bawah ini menghasilkan eror.
// method classMember() tidak bisa mengakses variabel yang di deklarasikan di dalam method Main()
message = "Halo dari classMember()";
Console.WriteLine(message);
}
}
Kode program di atas tidak bisa dijalankan karena menghasilkan eror. Kali ini, kita mendeklarasikan variabel message
di dalam method Main()
. Oleh karena itu, variabel ini hanya bisa diakses dari dalam method Main()
saja. Kita akan mendapat protes dari compiler apabila mencoba untuk mengakses variabel message
dari luar method Main()
.
Selanjutnya, coba modifikasi kembali kode program di atas menjadi seperti berikut ini.
class Program
{
static void Main(string[] args)
{
// Deklarasi variabel di dalam method Main()
string message;
// Variabel tersebut bisa diakses dari dalam blok method Main()
message = "Halo dari Main()";
for (int i = 0; i < 5; i++)
{
// dan juga bisa diakses dari dalam blok perulangan for
Console.WriteLine(message);
}
}
}
Jika dijalankan, kode program di atas akan menghasilkan keluaran seperti berikut ini.
Halo dari Main()
Halo dari Main()
Halo dari Main()
Halo dari Main()
Halo dari Main()
Perhatikan bahwa kali ini baris Console.WriteLine(message)
kita letakkan di dalam blok perulangan for. Karena variabel message
merupakan variabel dengan lingkup pada tingkatan method, kita masih bisa mengakses variabel tersebut dari dalam perulangan for yang menjadi bagian dari method Main()
.
Lingkup Variabel Pada Tingkatan Blok Pernyataan
Lingkup deklarasi variabel ini merupakan lingkup terkecil dalam mendeklarasikan variabel. Sebuah variabel yang dideklarasikan di dalam sebuah blok pernyataan, hanya bisa diakses dari dalam blok pernyataan tersebut.
Perhatikan contoh kode program di bawah ini.
class Program
{
static void Main(string[] args)
{
// Deklarasi pada tingkatan method
int nilai = 50;
if (nilai >= 50) // variabel nilai bisa diakses dari pernyataan if
{
// Deklarasi pada tingkatan blok pernyataan if
// Warning: variabel pesan tidak pernah digunakan
string pesan = "Anda lulus.";
}
else
{
// Deklarasi pada tingkatan blok pernyataan else
// Error: tidak bisa menemukan deklarasi variabel pesan
pesan = "Anda tidak lulus.";
}
// Mengakses variabel pesan dari luar blok pernyataan if dan else
// Error: tidak bisa menemukan deklarasi variabel pesan
Console.WriteLine(pesan);
}
}
Pada kode program di atas, kita mendeklarasikan variabel pesan
di dalam blok pernyataan if. Kemudian, kita mencoba mengakses variabel tersebut dari dalam blok pernyataan else dan dari luar blok pernyataan if-else.
Kode program di atas tidak bisa dijalankan karena menghasilkan eror. Sampai saat ini, Anda pastinya sudah paham dengan eror yang dihasilkan oleh baris Console.WriteLine(pesan)
. Tapi mengapa baris pesan = "Anda tidak lulus."
di dalam blok pernyataan else juga menghasilkan eror? Bukannya blok tersebut masih merupakan bagian dari pernyataan if-else?
Kita perlu memahami bahwa blok pernyataan if dan blok pernyataan else merupakan dua blok pernyataan yang berbeda. Sehingga variabel yang dideklarasikan di dalam blok pernyataan if, tidak bisa diakses dari dalam blok pernyataan else, begitu pula sebaliknya.
Catatan
Di C#, sebuah blok adalah sesuatu yang terletak di dalam tanda kurung kurawal {}. Sebuah variabel yang dideklarasikan di dalam sebuah tanda kurung kurawal, tidak bisa diakses dari luar tanda kurung kurawal tersebut.
Menghindari Konflik Penamaan Variabel
Satu hal lagi yang perlu diperhatikan dari adanya linkup variabel di C# adalah konflik penamaan variabel.
Perhatikan deklarasi variabel i
di dalam kode program di bawah ini.
class Program
{
static void Main(string[] args)
{
int i = 0;
Console.WriteLine($"nilai i adalah {i}");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"nilai i: {i}");
}
}
}
Pertama-tama kita mendeklarasikan variabel i
pada lingkup method. Setelah itu pada lingkup pernyataan for, kita kembali mendeklarasikan variabel i
.
Tentu saja, variabel i
yang dideklarasikan pada lingkup pernyataan for hanya bisa diakses dari dalam blok pernyataan for saja.
Dengan anggapan begitu, kita akan mengira apabila kita mendeklarasikan variabel dengan nama dan dari tipe data yang sama di luar lingkup pernyataan for, keberadaan variabel tersebut tidak akan terpengaruh oleh deklarasi variabel pada lingkup pernyataan for.
Namun masalahnya, deklarasi variabel i
pada lingkup method masih bisa diakses dari lingkup pernyataan for. Oleh karena itu, compiler akan mengatakan bahwa kita tidak bisa mendeklarasikan variabel i
yang sudah pernah dideklarasikan sebelumnya pada satu lingkup variabel yang sama.
Jadi, kode program di atas akan menghasilkan eror karena terjadi konflik penamaan.
Untuk menghindari konflik penamaan variabel seperti di atas, sebaiknya kita menggunakan penamaan yang jelas untuk setiap variabel. Dalam kata lain, setiap nama variabel sebaiknya mengekspresikan nama data yang disimpan oleh variabel tersebut.
Catatan
Variabel i
pada pernyataan for sudah menjadi common practice atau sesuatu yang lazim digunakan. Huruf i
sendiri biasanya digunakan untuk mengekspresikan kata index.
Penutup
Pada materi kali ini, kita telah mempelajari dan memahami lingkup variabel di C#.
Ada tiga lingkup variabel yang perlu kita perhatikan, yaitu lingkup class, lingkup method, dan lingkup blok pernyataan.
Jika Anda merasa kesulitan dalam memahami materi ini, jangan menyerah! Tulis kesulitan atau pertanyaan Anda di kolom komentar, saya akan membantu.
Selamat belajar!