PROCEDURE DAN FUNCTION Pada awal perkenalan bahasa C++ telah dibahas singkat seputar algoritma. Dasarnya, algoritma adalah suatu pemetaan yang membantu kita dalam merancang program. Hal ini dikarenakan sifat dari program adalah suatu proses tertentu yang memiliki susunan instruksi yang pasti. Masalah yang seringkali timbul adalah dalam suatu program dibutuhkan proses yang harus terjadi berulang-ulang. Mungkin proses perulangan menggunakan for atau while dapat mengatasi masalah ini. Namun kita akan membutuhkan hal lain apabila proses yang berulang itu adalah suatu program yang skalanya dapat dikatakan relatif kompleks. Fungsi/Prosedur merupakan suatu bagian dari program yang dimaksudkan untuk mengerjakan suatu tugas/perintah tertentu dan letaknya terpisah dari program utama. Dalam kesempatan ini kita akan membahas dengan fokus terhadap dua hal, yaitu prosedur dan fungsi. Pada dasarnya prosedur merupakan fungsi juga, namun prosedur tidak memberikan nilai balik seperti halnya fungsi. Format dari penulisan fungsi ini adalah : tipe_data namaFungsi [daftar_parameter] { …instruksi-instruksi dalam fungsi… return (nilai_balik_fungsi); } Selain format penulisan yang perlu diketahui, dalam pembentukan program yang melibatkan banyak fungsi kita perlu memahami struktur umum yang terjadi dalam program tersebut, yaitu :
1
a. Prototype (prosedur / fungsi pendukung) tipe_data namaFungsi [daftar_parameter]
Pada bagian ini, prosedur/fungsi pendukung yang akan digunakan pada fungsi utama dideklarasikan.
Karena
sifatnya
yang
berupa
prototype,
kita
hanya
perlu
mendeklarasikan tipe data, nama fungsi, dan daftar parameter. b. Prosedur / Fungsi Utama main () { …instruksi-instruksi dalam fungsi… …prosedur/fungsi pendukung digunakan… return [nilai_balik_fungsi]; }
Bagian ini adalah dimana fungsi utama dijalankan. Ciri khas yang membedakan fungsi utama ini dengan yang lainnya adalah fungsi ini dinamakan “main”. Hal ini menunjukkan bahwa instruksi-instruksi yang berada di dalam fungsi ini adalah instruksi yang akan dijalankan pertama kali. Instruksi-instruksi pada fungsi lain hanyalah bersifat pendukung. c. Prosedur / Fungsi Pendukung tipe_data namaFungsi [daftar_parameter] { …instruksi-instruksi dalam fungsi… return [nilai_balik_fungsi]; }
2
Bagian ketiga ini adalah tempat prosedur/fungsi pendukung dijelaskan. Nama daripada fungsi ini telah dideklarasikan pada bagian prototype. Kemudian, instruksi yang ada di dalam fungsi pendukung dijelaskan rinci disini.
PEMAHAMAN PRO SEDUR D AN FUNGSI Sebelum melangkah lebih jauh, pahami lebih dalam mengenai fungsi dalam bahasa C++. Andaikan kita menemukan soal fungsi seperti ini : F (x) = 2x + 3 Fungsi dalam bahasa C++ prinsipnya sama dengan fungsi dalam matematika. Kita akan mempunyai suatu instruksi (proses dengan operator matematika), suatu variabel input ( x ), dan suatu nilai balik ( F(x) ). Dengan kata lain, fungsi matematika di atas dapat diterjemahkan menjadi berikut : int jumlah (int x) { int y; y = 2*x+3; return (y); }
3
SUBPROGRAM : PROSEDUR Untuk lebih mudah memahaminya, perhatikan contoh berikut :
KETERANGAN Perhatikan contoh di atas. Program di atas dinamakan prosedur. Inti dari program tersebut adalah untuk mencetak karakter bintang, tanpa mengembalikan suatu nilai. Selain itu dapat juga membuat suatu prosedur dengan mengembalikan nilai dari program tersebut dengan nilai 0 (nol).
Selanjutnya, perhatikan contoh prosedur dengan bantuan prosedur pendukung :
4
Program di atas juga berupa prosedur. Namun pada program ini digunakan bantuan prosedur pendukung. Kita dapat melihat adanya prototype prosedur, prosedur utama dan prosedur pendukung. Pada fungsi utama, terjadi proses pemanggilan prosedur pendukung, yaitu dengan cara memanggil nama prosedurnya.
SUBPROGRAM : FUNGSI Berikut adalah bentuk dari fungsi :
OUTPUTNYA
Hasilnya adalah 15
KETERANGAN Fungsi pendukung dipanggil pada fungsi utama dengan cara memanggil nama fungsi, misal y=kali(5,3). Proses tersebut memanggil fungsi kali. Berikutnya nilai 5 disimpan ke variabel a dan nilai 3 disimpan ke variabel b. Dengan mengikuti instruksi dari fungsi kali, 5
nilai a dan b dikalikan dan hasilnya disimpan pada variabel x. Nilai dari x ini kemudian dikembalikan dan disimpan ke dalam variabel y. Apabila kita akan membuat program yang jauh lebih rumit, maka fungsi ini akan sangat terasa manfaatnya. III. PARAMETER FUNGS I Secara garis besar, paramater data yang sering digunakan untuk fungsi adalah Parameter Data Biasa dan Parameter Data Array. Bentuk dari Parameter Data Biasa adalah bentuk parameter yang bertipe skalar, misalnya int, float, double, char, dan lain sebagainya. Berikut adalah contoh Fungsi Data Terbesar dengan menggunakan parameter data biasa :
OUTPUTNYA Tulis angka bulat pertama : 20 Tulis angka bulat pertama : 45 Tulis angka bulat pertama : 33 Nilai terbesar adalah: 45
6
Untuk
menggunakan
Parameter
Data
Array,
terdapat
penulisan
khusus
untuk
melakukannya. Berikut adalah contohnya :
OUTPUTNYA Data ke-1 : 4 Data ke-2 : 2 Data ke-3 : 5 Data ke-4 : 8
KETERANGAN Parameter Data Array memiliki ciri kurung siku ( [...] ) di dalam daftar parameter fungsi. Namun struktur program sisanya tetap sama dengan Parameter Data Biasa.
7
IV. FUNGSI REKURSIF Fungsi rekursif adalah sebuah fungsi atau prosedur dimana salah satu isinya adalah pemanggilan kepada fungsi/prosedur yang sama dengan dirinya.
OUTPUTNYA 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880 10! = 3628800
KETERANGAN Perhatikan instruksi dari fungsi pendukung faktorial. Jika nilai angka masih diatas 1, maka kondisi if tidak terpenuhi. Hasilnya, proses akan berlanjut dengan memanggil fungsi faktorial (angka-1). Proses inilah yang dinamakan rekursif. Fungsi yang memanggil dirinya sendiri hingga akhirnya tercapai suatu kondisi yang dapat mengakhirinya.
8
V. FUNG SI CALL BY Dalam menggunakan fungsi, kita membutuhkan data parameter berupa variabel. Variabel tersebut dapat dieksekusi dengan menggunakan call by value atau call by reference. Untuk mudah memahaminya, perhatikan contoh berikut :
OUTPUTNYA x = 3 sebelum kuadratByValue Nilai yang dikembalikan oleh kuadratByValue: 9 x = 3 setelah kuadratByValue z = 5 sebelum kuadratByReference Nilai yang dikembalikan oleh kuadratByReference: 25 z = 25 setelah kuadratByReference
KETERANGAN Perhatikan baik-baik program di atas. Perbedaan terletak pada saat nilai variabel kembai dicetak setelah melewati proses pemanggilan fungsi. Pada kasus call by value, nilai x adalah 3, sama dengan saat fungsi kuadratByValue belum dipanggil. Sedangkan pada kasus call by reference, nilai z berubah menjadi 25 ketika mencetak kembali. 9
Call by Value : Hanya nilai dalam variabelnya diambil kemudian diproses lebih lanjut. Akan tetapi nilai yang terdapat pada variabel asal tidak terganggu (tidak mengalami perubahan). Singkat kata, kita hanya meng-copy nilai yang ada dalam variabel x. Call by Reference : Nilai beserta variabelnya ikut diproses bersamaan dengan pemanggilan fungsi. Hasilnya, nilai dalam variabel z akan ikut berubah mengikuti hasil dari fungsi call by
reference. Untuk menggunakan pemanggilan ini, kita harus menyertakan tanda (&) sebelum nama variabelnya.
VI. FUNGSI OVERLOADI NG
10
OUTPUTNYA : Pemanggilan pertama : + + + + + + + + + + + + + + + Pemanggilan kedua : * * * * * Pemanggilan ketiga : _ _ _ _ _ _ _ _ _ _
KETERANGAN Fungsi Overloading ditunjukkan pada program di atas. Terlihat terdapat 3 buah fungsi (dalam hal ini berupa prosedur) yang memiliki nama fungsi yang serupa yaitu, buatGaris. Meskipun begitu, setiap fungsi memiliki data parameter yang berlainan dan proses instruksi yang berlainan pula.
11