Fungsi Dalam Pemrograman

Artikel ini untuk seorang teman saya yang masih kurang paham dengan Fungsi dan Parameter. Seorang expert seharusnya tidak membuka artikel ini.

Yudi Supriyadi
3 min readDec 20, 2016

Dalam artikel ini saya akan merujuk Fungsi/Procedure dengan istilah Fungsi saja.

Memahami Fungsi secara jelas perlu pemahaman terhadap hal-hal yang berkaitan dengannya. Salah satunya adalah ruang lingkup variabel. Apa itu?

Variabel Memiliki Ruang Lingkup

Variabel adalah sebuah wadah untuk menyimpan nilai dengan mereferensikannya dengan sebuah nama yang didefinisikan. Dalam bahasa C int A = 2 berarti menciptakan variabel dengan nama A yang bertipe Integer lalu ia mengandung nilai 2 didalamnya. Dengan menyebutkan A secara tidak langsung merujuk pada nilai 2.

Pada faktanya, variabel memiliki “kawasan” yang bisa mengaksesnya, ini disebut Ruang Lingkup. Menciptakan sebuah variabel didalam fungsi X tidak menjadikan anda dapat mengakses variabel tersebut dari fungsi Y. Lihat contoh berikut.

#include <stdio.h>void tampilkanNilai()
{
printf(“%i \n”, A); // “berusaha” memanggil A dari `tampilkan`
}
int main()
{
int A = 2; // mendeklarasikan A didalam fungsi `main`
tampilkanNilai(); // memanggil fungsi `tampilkanNilai` return 0;
}

Dengan mengcompile source code diatas, didapat hasil error berikut:

/tmp/fungsi.c:5:21: error: ‘A’ undeclared (first use in this function)
printf(“%i \n”, A); // “berusaha” memanggil A

kata-kata error: ‘A’ undeclared mengimplikasikan bahwa variabel A telah dipanggil di baris ke-5 (didalam fungsi tampilkanNilai) namun variabel ini belum dideklarasikan. Artinya, A yang dideklarasikan didalam fungsi main tidak berlaku di kawasan fungsi tampilkanNilai.

Peristiwa ini ada kaitan eratnya dengan konsep variabel lokal (local variable) yakni, sebuah variabel yang dideklarasikan didalam fungsi X hanya bisa diakses di fungsi itu saja, tempat dimana ia dideklarasikan.

Lalu bagaimana jika saya ingin mengirim A yang ada di fungsi main ke fungsi lain?

Parameter dalam Fungsi

Dalam konsep fungsi dikenal istilah argumen atau parameter. Dimana ia berguna sebagai cara untuk mengirim nilai ke fungsi yang dituju. Lihat contoh berikut.

#include <stdio.h>// `cetak` mempunyai parameter usia
void cetak(int usia)
{
printf(“Usia anda = %i \n”, usia); // memanggil variabel usia
}
int main()
{
int umur = 60; // mendeklarasikan umur didalam fungsi `main`
cetak(umur); // memanggil `cetak` dengan mengirim isi umur return 0;
}

Penjelasan:

  1. Saya mendeklarasikan variabel umur didalam fungsi main.
  2. Masih didalam main, saya memanggil fungsi cetak dengan mengirim isi konten variabel umur ke fungsi tersebut. Sekali lagi, yang terkirim adalah isi konten bukan variabel tersebut.
  3. Didalam fungsi cetak, terdapat parameter dengan nama usia. Maka, nilai 60 yang dikirim ke fungsi cetak dari main akan disimpan kedalam variabel baru, yakni usia.
  4. Masih didalam fungsi cetak, terdapat printf yang mencetak isi konten variabel usia.

Untuk penamaan parameter, anda boleh menyamakan nama-nya dengan nama variabel yang didalam fungsi main. Sehingga source code seperti sebagai berikut.

#include <stdio.h>void cetak(int umur)
{
printf(“Usia anda = %i \n”, umur);
}
int main()
{
int umur = 60;
cetak(umur); return 0;
}

Meskipun kedua variabel yang di main dan cetak memiliki nama serupa tetapi mereka merujuk kepada alamat memori yang berbeda. Mari buktikan dengan menggunakan operator address-of & dimuka variabel. Operator ini akan mengembalikan alamat memori dari sebuah variabel. Saya juga akan menggunakan format %p untuk mencetak alamat memori dengan printf.

#include <stdio.h>void cetak(int umur)
{
printf(“Alamat memori `umur` didalam `cetak` = “);
printf(“%p \n”, &umur);
}
int main()
{
int umur = 17;
printf(“Alamat memori `umur` didalam `main` = “);
printf(“%p \n”, &umur);
cetak(umur); return 0;
}

Dengan mengcompile dan menjalankan program diatas, saya mendapatkan:

Catatan: Alamat memori di komputer saya dengan Anda akan berbeda.

Dari hasil, kita bisa melihat bahwa variabel umur di kedua fungsi memiliki alamat memori yang berbeda sehingga meskipun nama mereka serupa namun secara teknis mereka berbeda. Dampaknya, bila anda mengubah nilai umur didalam salah satu fungsi maka itu TIDAK akan mengubah isi variabel yang bernama serupa di fungsi lain.

#include <stdio.h>void cetak(int umur)
{
umur = 45; // mengubah umur dari 17 ke 45
printf(“Dari cetak\n”);
printf(“Umur = %i \n\n”, umur);
}
int main()
{
int umur = 17;
cetak(umur); printf(“Dari main\n”);
printf(“Setelah merubah var. umur didalam `cetak`: “);
printf(“Umur = %i \n”, umur); // umur masih 17
return 0;
}

hasil compile dan menjalakan sebagai berikut:

Dari cetak
Umur = 45
Dari main
Setelah merubah var. umur didalam `cetak`: Umur = 17

Tidak ada perubahan nilai umur didalam fungsi main setelah cetak mengubah isi variabel.

--

--

No responses yet