Materi ini sebenarnya sudah dibahas di pelajaran sebelumnya, namun kita akan memperdalam pemahaman kembali dengan melihat cara penyimpanan data di memori.
Tutorial ini berasal dari situs foxdevelop.com. Cantumkan sumber apabila Anda membagikan ulang.
Kita bisa menaruh blok kode lain di dalam badan metode.
class Program
{
static void Main()
{
int age = 19;
{
int one = 23;
}
}
}
Code language: C# (cs)

Tidak ada batasan jumlah blok kode. Blok bisa disusun berurutan atau bersarang berlapis tanpa batas kedalaman.
class Program
{
static void Main()
{
int age = 19;
{
int one = 23;
{
int two = 45;
{
int three = 56;
}
}
}
}
}Code language: C# (cs)

Perhatikan, baris int xxxx = xxx; di atas blok bersarang anak merupakan pernyataan yang sejajar dengan blok tersebut.

Sebagai contoh, int age = 19; dan blok kode bersarang di bawahnya adalah dua pernyataan sejajar. Jangan salah mengira struktur ini sebagai badan metode secara utuh.
Siklus Hidup
Lihat contoh berikut
static void Main()
{
int a = 10;
{
int b = 20;
}
}Code language: C# (cs)
Dalam contoh ini terdapat dua variabel lokal. Variabel a bagian luar berada di lingkup fungsi Main, sedangkan variabel b termasuk dalam blok bersarang bagian dalam.
Mari ikuti eksekusi langkah demi langkah untuk melihat bagaimana memori tumpukan bekerja.

Langkah 1: Hanya baris int a = 10; yang dijalankan. Memori tumpukan dialokasikan untuk a dengan nilai 10;
Langkah 2: Masuk ke blok dalam lalu jalankan int b = 20;. Variabel b ditambahkan ke tumpukan. Urutan dari atas ke bawah: b, a;
Langkah 3: Blok kode bagian dalam selesai dijalankan. Variabel b dikeluarkan dari tumpukan, hanya tersisa a.
Langkah 4: Metode Main selesai dieksekusi. Variabel a juga dikeluarkan dari tumpukan, semua variabel program dihapus dan program berhenti.
Ringkasan
Variabel yang dideklarasikan di dalam blok bersarang memiliki siklus hidup mulai dari baris deklarasi hingga blok tempat variabel berada selesai dieksekusi.
Ketika blok bersarang selesai berjalan, semua variabel lokal di dalamnya akan dikeluarkan dari tumpukan dan dihapus.
Badan metode sendiri pada dasarnya adalah satu blok kode besar.
Lingkup (Scope)
Selama lingkup variabel pertama masih aktif, Anda tidak bisa mendeklarasikan variabel lokal lain dengan nama yang sama, seberapa dalam pun tingkat sarangnya.
Lihat contohnya
static void Main()
{
int a = 10;
{
int a = 20;
}
}Code language: C# (cs)

Pada contoh di atas, variabel a di blok bersarang bagian dalam namanya sama dengan variabel a di luar. Hal ini akan menimbulkan galat dan kompilasi gagal berjalan.
Alasannya: lingkup dari int a = 10; mencakup semua kurung kurawal yang membungkusnya. Di dalam lingkup ini tidak boleh ada variabel bernama sama. Meskipun int a = 20; berada di blok bersarang, blok tersebut masih termasuk badan metode tempat variabel a sudah ada. Kompiler akan mendeteksi nama variabel ganda dan memberi tanda garis bergelombang merah.
Aturan ini tetap berlaku meskipun Anda mengganti tipe data variabel a yang kedua.

Nama variabel harus unik dalam satu lingkup, tidak bergantung pada tipe data variabel.

Seperti terlihat pada gambar, lingkup variabel a luar ditandai kuning dan variabel a dalam berwarna hijau. Jelas lingkup luar mencakup seluruh lingkup dalam sehingga terjadi bentrokan nama.
Cara mengatasinya cukup mudah: ganti nama variabel a yang ada di bagian dalam.

Mari lihat contoh lainnya
Apakah akan ada bentrokan nama jika ditulis seperti ini?
class Program
{
static void Main()
{
int a = 10;
{
double b = 20;
}
{
double b = 30;
}
}
}Code language: C# (cs)
Jawabannya tidak. Meskipun ada dua variabel bernama b, lingkup keduanya tidak saling tumpang tindih sehingga kompilasi berhasil. Variabel b pertama hanya berlaku di bloknya sendiri, sedangkan variabel b kedua ada di blok terpisah. Silakan lihat gambar berikut.

Area berwarna pada gambar menunjukkan lingkup masing-masing variabel b. Semoga pembaca sudah paham sekarang.
Blok Kode Bersarang dan Lingkup Variabel