Kamis, 24 Desember 2015

Teknik Pemrograman Part III - Variabel Global dan Variabel Lokal


Pendahuluan

   Pada tutorial ini kita akan membahas lebih dalam mengenai variabel berkenaan dengan ruang lingkup variabel. Jika anda belum membaca tutorial mengenai apa itu variabel dan konstanta silahkan klik disini.



Variabel Global


   Variable global adalah sebuah variabel yang dapat dikenali diseluruh fungsi. Variable global dideklarasikan di luar "fungsi setup (void setup(){})" dan "fungsi loop (void loop(){})". Perhatikan sketch berikut:

int x; // variabel global
float z; // variabel global

void setup() {

}

void loop() {

}

Variable x dan z akan dikenali penggunaanya di seluruh fungsi. Bagaimana, Masih bingung?? Tinggalkan dulu rasa bingung anda dan kita lanjutkan ke variabel lokal.




Variabel Lokal


   Variabel lokal merupakan sebuah variabel yang hanya dikenali didalam sebuah fungsi dimana variabel tersebut dideklarasikan. Sebelum itu saya akan jelaskan sedikit tentang fungsi karena ini akan mempermudah anda untuk memahami penggunaan variabel lokal dan variabel global. Perhatikan sketch berikut ini


void rumah()
{
  int a=20; // variabel lokal
  float b=9.9; // variabel lokal
  Serial.println(a);
  Serial.print(b);
}

void setup() {
Serial.begin(9600);
}

void loop() {
rumah(); // melakukan pemanggilan fungsi rumah
delay(2000);
}


void rumah(){} merupakan sebuah fungsi. Salah satu bentuk fungsi yang umum digunakan adalah sebagai berikut


void rumah()
{
   // letakkan program disini
}


   Hal ini sama saja dengan "fungsi void setup" dan "fungsi void loop". Saya rasa dengan ini anda sudah mulai mengerti apa itu sebuah fungsi. Kembali pada pembahasan tentang variabel lokal, pada contoh sketch diatas sebuah fungsi dengan nama rumah dideklarasikan. Didalam fungsi rumah terdapat variabel a dan variabel b. Kedua variabel tersebut dinamakan dengan variabel lokal karena hanya akan dikenali di dalam fungsi rumah. Ikuti sketch berikut, lakukan verify dan perhatikan apa yang akan terjadi?


void rumah()
{
  int a=20; // variabel lokal
  float b=9.9; // variabel lokal
  
}

void setup() {
  Serial.begin(9600);
}

void loop() {
              rumah(); // pemanggilan fungsi rumah
              Serial.println(a);
              Serial.print(b);
}


   Jika dilakukan verify maka akan muncul sebuah pesan error "a was not declated in this scope". Error terjadi karena variabel a tidak dikenali, variabel a hanya akan dikenali penggunaannya di dalam fungsi void rumah. Pada sketch sebelumnya pernyataan "Serial.println(a)" dan "Serial.print(b)" ditaruh di dalam fungsi rumah, jika dilakukan verify maka tidak akan muncul pesan error karena pemanggilan nilai a dan b pada pernytaan "Serial.println(a)" dan "Serial.print(b)" masih berada di dalam fungsi rumah. Perhatikan sketch berikut yang menunjukkan variabel a dan variabel b di deklarasikan sebagai variabel global.

int a=20; // variabel global
float b=9.9; // variabel global

void rumah()
{
    //program sengaja dibiarkan kosong  
}

void setup() 
{
    Serial.begin(9600);
}

void loop() 
{
       rumah(); // pemanggilan fungsi rumah

       Serial.println(a);
       Serial.print(b);
       delay(2000);
}



Jika dilakukan verify dan ditampilkan di Serial monitor maka akan muncul angka 20 dan 9.9 secara berkelanjutan. Dengan begini saya harap anda dapat memahami apa itu variabel global dan variabel lokal.


Variabel Statis


   Variabel Statis adalah variabel yang dideklarasikan didalam suatu fungsi dengan kata kunci static. Dengan menggunakan variabel statis maka nilai variabel akan tetap dipertahankan walaupun pemanggilan fungsi telah berakhir. Berikut akan di bandingkan sketch yang menggunakan variabel non-statis dan yang menggunakan variabel statis.


                      // Variabel non-statis 
void coba()
{
   int a=2;
   a++; // nilai a ditambah 1
   Serial.println(a); // tampilkan nilai a
}

void setup() 
{
   Serial.begin(9600);
}

void loop() 
{
   coba(); // pemanggilan fungsi coba 
   delay(2000);
}


   Pada void loop pemanggilan fungsi coba pada eksekusi yang pertama akan menampilkan nilai 3 pada serial monitor berdasarkan eksekusi pernyataan "Serial.println(a);Karena tidak menggunakan variabel statis maka pada eksekusi selanjutnya pun akan tetap bernilai 3. Pada prinsipnya, setelah fungsi coba selesai dieksekusi dan beralih ke eksekusi pernyataan delay(2000) maka nilai a akan direset kembali ke nilai 0. Ketika fungsi coba dieksekusi kembali maka baris perintah int a=2 memberikan a nilai 2. Silahkan coba sendiri pada Serial monitor untuk melihat hasil sketch diatas. Sekarang ikuti program berikut dan perhatikan apa yang terjadi.



void coba()
{
   static int a=2; // deklarasikan variabel statis
   a++; // nilai a ditambah 1
   Serial.print(a); // tampilkan nilai a
}

void setup() 
{
   Serial.begin(9600);
}

void loop() 
{
   coba(); // pemanggilan fungsi coba
   delay(2000);
}


Lakukan verify dan tampilkan hasilnya pada serial monitor. Dengan menggunakan kata kunci static maka nilai a tetap dipertahankan meskipun fungsi coba telah selesai dieksekusi, sehingga nilai a yang ditampilkan pada serial monitor akan terus bertambah.


Tutorial Selanjutnya : Teknik Pemrograman Part IV - Matematika-ria Basic Perhitungan








2 komentar:

  1. gan, gimana misalkan menjumlahkan tiap dua detik
    misalkan
    a = 2
    b =3
    maka c = a+b = 5, detik kedua = 8, detik ke tiga = 11 dan seterunya
    karena tiap detik di tambah b (3)

    BalasHapus
  2. Kak, kalau bikin fungsi loop jadi 2, bisa kah?

    BalasHapus