Skip to main content

Scope Variabel

Scope dari suatu variable dimaksudkan sebagai rentang (range) dari statements dimana variable tersebut dikenali (visible). Di dalam suatu bahasa pemrograman, scope rules menentukan bagaimana suatu nama dikaitkan kepada suatu variable, atau menentukan bagaimana suatu nama dikaitkan kepada suatu expression pada bahasa functional languages. Beberapa terminologi yang berkaitan dengan scope diberikan sebagai berikut:
  • Suatu variable dikatakan visible bagi suatu statement jika variable tersebut dapat digunakan (referenced) oleh statement tersebut.
  • Suatu variable dikategorikan sebagai local variable bagi suatu subprogram jika variable tersebut dideklarasikan di dalam subprogram tersebut.
  • Suatu variable dikategorikan sebagai non-local variable bagi suatu subprogram jika variable tersebut tidak dideklarasikan di dalam subprogram tersebut namun visible di dalam subprogram dimaksud,
  • Global variable dimaksudkan sebagai salah satu kategori dari non-local variable.
Bahasa pemrograman umumnya menerapkan konsep scoping yang berbeda, yaitu static scoping atau dynamic scoping.
Pada static scoping, lingkup (scope) dari suatu variable ditentukan secara statis sebelum program dieksekusi. Dengan demikian kita maupun compiler dapat dengan mudah mengetahui tipe data setiap variable dengan cara melihat/membaca source code (program text) nya. Static scoping dapat dihasilkan melalui bahasa pemrograman yang menyediakan fitur nested subprogram (yang menghasilkan nested static scope), maupun bahasa pemrograman yang tidak menyediakan fitur nested subprogram. Nested scope dapat juga dihasilkan melalui nested class definition maupun melalui fitur block.

Dalam proses penentuan acuan (reference) terhadap suatu variable, reader bahasa pemrograman perlu menemukan statement dimana variable tersebut dideklarasikan (secara explicit ataupun implicit). Dalam bahasa yang menerapkan static-scoping dengan nested-subprogram (seperti Ada, Javascript, Common LISP, Scheme, Fortran 2003+, F#, dan Phyton), proses tersebut adalah sebagai berikut:
  • Misalkan di dalam subprogram sub1 (subprogram sub1 & sub2 lihat contoh potongan kode di bawah) terdapat statement yang mengacu (reference) pada variable x.
  • Proses pencarian (searching) terhadap deklarasi variable x dimulai dari subprogram sub1 .
  • Jika deklarasi tersebut tidak ditemukan di dalam sub1, maka pencarian dilanjutkan ke subprogram dimana sub1 di deklarasikan, yaitu static parent dari sub1.
  • Jika belum juga ditemukan, maka pencarian berlanjut ke subprogram berikutnya yang lebih besar, yang mengandung deklarasi static parent dari sub1, yang disebut static ancestor dari sub1. Pencarian deklarasi varaible x berhenti pada subprogram terbesar dari static ancestor. Jika tetap tidak ditemukan maka disimpulkan terdapat undeclared variable error.
Berikut adalah contoh static scoping pada Javascipt, dimana fungsi sub1 dan sub2 adalah nested di dalam fungsi big:
function big() {
function sub1() { 
var x = 7;  
sub2(); 
}
function sub2() { 
var y = x; 
}
var x = 3; 
sub1();
}

Dengan static scoping, acuan (reference) bagi variable x di dalam sub2 adalah variable x yang dideklarasikan di dalam big karena tidak ditemukan deklarasi variable x di dalam sub2, namun ditemukan pada static parent dari sub2. Deklarasi variable x pada sub1 tidak diperhatikan karena bukan salah satu static ancestor dari sub2.

Deklarasi suatu variable dapat tersembunyi (hidden) pada beberapa bahasa pemrograman dengan atau tanpa fitur nested subprogram. Dalam contoh Javascript di atas, variable lokal x di dalam sub1 digunakan oleh setiap acuan pada variable x yang ada di dalam sub1, dan karenanya variable x yang dideklarasikan pada big bersifat hidden bagi sub1.

Dalam bahasa pemrograman Ada, variable x yang dideklarasikan pada ancestor seperti variable x yang dideklarasikan pada big di atas, dapat diacu dengan cara mengikutsertakan nama ancestor tersebut, misalnya big.x untuk mengacu pada variable x yang dideklarasikan pada fungsi big.

Cara lain untuk menghasilkan static scoping adalah menggunakan fitur block. Dengan fitur ini, static scope terbentuk ketika program sedang berjalan (eksekusi) seperti yang konsepnya telah diperkenalkan oleh ALGOL 60. Variable jenis ini termasuk stack dynamic, dimana storage untuk variabe tersebut teralokasi saat memasuki block dan terdealokasi saat keluar dari block. Berikut ini adalah contoh penerapan block structure dalam bahasa C (berlaku di C and C++, tapi tidak berlaku pada Java and C#) :
void sub() {
int count; 
while (...) {
int count; 
count++; 
...
} 
}

Comments

Popular posts from this blog

Pengertian Binding dalam Bahasa Pemrograman dan Kapan Terjadinya

Binding dimaksudkan sebagai pengikatan (association) antara suatu entity dengan atributnya, misalnya binding/pengikatan antara suatu variable dengan tipe datanya atau dengan nilainya, atau dapat juga antara suatu operasi dengan simbol, misalnya simbol + dikenali sebagai operasi penjumlahan atau simbol ^ dikenali sebagai operasi pangkat, dll.  Peristiwa binding dan kapan terjadinya binding (biasanya disebut dengan binding time ) berperan penting dalam membicarakan semantics suatu bahasa pemrograman. Beberapa kemungkinan binding time adalah:

Contoh proses normalisasi relasi dari UNF – 1NF – 2NF – dan 3NF

Dalam posting tulisan tentang: “Tujuan dan Manfaat Normalisasi dalam Perancangan Database” , kita sudah mempelajari tentang: “Apa itu normalisasi” dan “Mengapa kita perlu melakukan normalisasi”. Kedua pertanyaan itu sudah terjawab dalam tulisan tersebut.  Kemudian dalam posting tulisan tentang: “Konsep Ketergantungan Fungsional, Normalisasi, dan Identifikasi Primary Key dalam Perancangan Sistem Database” , kita sudah mempelajari suatu konsep penting yang digunakan untuk melakukan normalisasi, yaitu konsep ketergantungan fungsional yang terdiri dari ketergantungan penuh, ketergantungan parsial atau sebagian, dan ketergantungan transitif. Proses normalisasi pertama-tama dilakukan dengan mengidentifikasi adanya ketergantungan-ketergantungan tersebut dalam relasi-relasi dan kemudian menghilangkannya. Cara melakukan normalisasi, mengidentifikasi berbagai macam ketergantungan, dan menghilangkan ketergantungan pada relasi-relasi bisa dipelajari ulang dalam postingan tulisan d...

Latihan Soal Jawab Matematika Diskrit

Berikut di bawah ini adalah latihan soal jawab untuk matematika diskrit dengan topik-topik: Pernyataan Logika Circuits dan Ekspresi Boolean Argumen (valid/tidak valid) Teori Himpunan Permutasi Fungsi --o0o-- Pernyataan Logika 1. Buatlah tabel kebenaran untuk menentukan yang mana tautology dan yang mana contradiction dalam pernyataan logika (a) dan (b) di bawah ini: a. (p ∧ q) ∨ (∼p ∨ (p ∧ ∼q)) b.  (p ∧ ∼q) ∧ (∼p ∨ q)