PEMROGRAMAN MODULAR
b. Uraian Materi
1. Definisi Fungsi
Function adalah sebuah struktur, Pengelompokan yang mengandung
sekelompok pernyataan yang akan dilaksanakan oleh CPU jika nama function
tersebut dipanggil untuk dieksekusi, kecuali untuk function utama yaitu int
main() yang akan dieksekusi secara otomatis.
4
Sebelumnya kita sering meilihat tanpa mengerti int main() pada contoh
program yang pernah diberikan sebelumnya. Pada setiap program pasti
memiliki satu function utama dan merupakan awal dari program berjalan atau
CPU melakukan eksekusi dari sekelompok pernyataan yang diberikan, semua
itu akan di mulai dari function int main(), function tersebut merupakan function
utama yang akan menjadi kepala dari program dimana semua eksekusi
pernyataan berawal. Bisakah anda bayangkan melakukan pemrograman sebuah
program yang sangat-sangat besar dan memerlukan pernyataan yang sangat
panjang, apa lagi jika sebuah proses mempunyai banyak pernyataan dan
dibutuhkan tidak hanya sekali, itu pasti akan membuat anda pusing jika di dunia
ini tidak ada function. Maka, disini Function sangat membantu kita untuk
membuat pengelompokan pernyataan berdasarkan tugas, proses atau katagori.
Ketika kita membutuhkan kelompok pernyataan tersebut kita cukup memanggil
nama function tersebut.
Tipe adalah sebuah return type/data type dari Function, function dapat
memiliki nilai di saat akhir hidup dari function dan hal itu disebut pengembalian
nilai. beberapa function dapat mengembalikan nilai hasil operasi yang
dilakukan di dalam function tersebut. tapi juga ada function yang tidak akan
mengembalikan nilai dari operasi di dalam function tersebut, untuk membuat
function tanpa melakukan pengembalian nilai kita bisa menggunakan tipe data
void, jika berniat membuat function yang dapat mengembalikan nilai,
sesuaikanlah tipe data dengan tipe nilai yang akan dikembalikan.
Nama atau identifier, adalah sebuah identitas atau nama dari function
tersebut.
5
bagi function tersebut, tidak bisa digunakan diluar function. Kita bisa membuat
parameter lebih dari satu, dan masing-masing parameter akan dipisah dengan
tanda koma. Kita dapat mengkosongi jika tidak membutuhkan.
Pernyataan adalah tempat dimana pernyataan-pernyataan di tulis. Semua
itu Berada di tengah-tengah { dan }.
2. Dekalarasi Fungsi
Untuk bentuk penulisan sama seperti apa yang pernah kita tulis untuk
membuat function utama int main(), yang berbeda adalah kita bebas memberi
nama function, memberi return type, menambahkan parameter pada function
kustom kita dan function kustom tidak akan dieksekusi oleh CPU jika nama
function buatan tidak dipanggil di dalam function utama.
//Tanpa Parameter
void cetakPesan (){
cout<<”Belajar Function C++”;
}
//Dengan Parameter
Int tambah (int a, int b){
return a+b;
}
6
Jalur pembacaan CPU, CPU akan melaksanakan semua pernyataan yang
dilewati. Ketika CPU itu melewati sebuah pernyataan yang merupakan sebuah
nama dari function maka CPU akan melaksanakan semua pernyataan di dalam
function itu hingga selesai. jika sudah, CPU akan melanjutkan pembacaan
pernyataan pada function sebelumnya. Kita juga bisa membuat function buatan
memanggil function buatan lainya.
Untuk memanggil function, kita cukup menuliskan nama dari function
tersebut dan memberi sepasang tanda ( ), itu merupakan tempat dimana nilai
arguments untuk parameter function tersebut, kita bisa mengkosonginya jika
memang function tersebut tidak membutuhkan argument.
//Function Tanpa Parameter
cetakPesan ();
//Function Dengan Parameter
tambah (argument1, argument2);
7
Bukan hanya itu saja, Function tersebut juga bisa memanggil function itu
sendiri. Itu sangat membantu saat melakukan rumus matematika, salah satunnya
seperti rumus factorial.
4. Standart Function
5. Parameter
Function biasanya membutuhkan data untuk beroperasi, Yang biasa kita lalukan
dalam mendapatkan data adalah dengan memanggil variabel, tapi kita harus
ingat dengan peraturan variabel lokal dalam ruang lingkup. Kita tidak bisa
dengan mudah mendapatkan data dari scope lain.
Hal tersebut merupakan satu alasan kenapa parameter itu ada dalam Bahasa
pemrograman. Jika kita tidak bisa mendapatkan data dari scope lain secara
langsung, kita bisa memberikan data tersebut saat pemanggilan function dengan
perantara yaitu parameter.
Jika kita mempunyai variabel int a dalam function utama dan function kustom
dengan satu parameter int b, ketika kita memberikan nilai dari variabel int a ke
dalam function kustom. Kita dapat menggunakan parameter int b untuk
perantara sekaligus tempat yang akan menjadi variabel local dalam function
8
kustom. apa yang terjadi adalah Data dari int a akan di salin ke variabel int b.
dengan hal itu function kustom kita akan memiliki data dari scope luar (scope
pemanggil). Dan juga data tersebut akan sampai ke tujuan dengan aman.
6. Jenis-jenis parameter
nama(arguments);
pengembalian function atau merupakan hasil dari operasi. Pemberian
data ke dalam function harus mengikuti aturan yang telah ditetapkan
oleh function parameter. Bentuk penulisannya secara umum adalah
sebagai berikut:
myFunction(2) ;
myFuntion(a+b, a+4) ;
myFunction(“Arguments”, ‘A’,
variabel) ;
Contoh programmnya adalah sebagai berikut:
#include <iostream>
using namespace std;
void myFunction(int a, int b, int c=20){ // Fuction
Parameter atau Parameter Formal
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
}
int main(){
myFunction(1,2,3); //Arguments atau Parameter
Actual
return 0;
}
7. Function Prototype
Function Prototype adalah sebuah pernyataan deklarasi function tanpa
menggunakan badan atau definisi dari function dan di akhiri dengan
semicolon ;. Function prototype berfungsi memberitahukan kepada kompiler
bahwa function tersebut ada.
#include <iostream>
int main(){
std::cout<<welcomeBanner();
return 0;
}
std::string welcomeBanner(){
return "belajar C++";
10
}
Mungkin kalian berpikiran bahwa program di atas baik-baik saja. Dan
memproduksi program yang dapat mengeluarkan keluaran berupa string.
Tetapi faktanya bahwa contoh program di atas bahkan tidak bisa
dikompilasi. Karena terdapat kesalahan yang kompiler tidak bisa atasi.
Mungkin keluhan kesalahan pada beberapa kompiler akan berbeda-beda tapi
intinya tetap sama yaitu bahwa kompiler tidak mengenal function dengan
identitas welcomeBanner().
Kita harus mengerti bahwa kompiler membaca kode kita, baris-perbaris
dari atas ke bawah. Alasan dari pesan error tersebut karena penulis menuliskan
program, menggunakan function welcomeBanner() terlebih dahulu sebelum
dibuat. Dan itulah alasan kenapa kompiler tidak mengenal function tersebut.
hanya karena function belum terbuat. Solusi dari permasalahan tersebut cukup
mudah, yaitu memindahkan deklarasi dan definisi function sebelum function
utama int main.
#include <iostream>
std::string welcomeBanner(){
return "Belajar C++";
}
int main(){
std::cout<<welcomeBanner();
return 0;
}
11
Asumsikan bahwa kita memiliki 2 function kustom dengan nama a dan
b. dengan letak menurut urutan alphabet. Dalam kasus tersebut kita masih
dimungkinkan untuk memanggil function kustom a dari function kustom b.
karena function a didirikan sebelum di panggil. Tapi bagaimana jika function a
memanggil b. hal tersebut akan menghasilkan keluhan dari kompiler karena b
digunakan dan belum dibuat. Meskipun kita membalikan tata letak function
dengan urutan b terlebih dahulu. Hal itu sama saja kita membalikan masalah
kita. Dari hal tersebut, bagaimana jika kedua function tersebut saling
memanggil, dalam khasus ini, kita tidak bisa memutuskan function mana yang
harus didirikan dahulu, dan mungkin masalah ini tidak akan pernah berakhir.
Dari semua permasalahan di atas, hal itu dapat merupakan alasan kenapa fitur
function prototype itu ada.
Function prototype adalah pernyataan dari deklarasi function, yang
terdiri dari retun type, identitas, parameter dan tanpa badan dari function
(definisi). Karena merupakan pernyataan maka mendirikan function prototype
harus di akhiri dengan semicolon ;. Bentuk umum penulisannya adalah sebagai
berikut:
tipeReturn identitas(Parameter);
13
8. Pass By Value
#include <iostream>
using namespace std;
int tambah (int a, int b){
return a+b;
}
int main () {
cout<<tambah(5,6)<<endl; //pass by value
cout<<tambah(19,24)<<endl; //pass by value
cout<<tambah(79,64)<<endl; //pass by value
return 0;
}
14
Dari program di atas, terlihat bahwa function kustom tambah() dipanggil
berulang kali. Dengan argument yang berbeda-beda. Itu bukan berarti bahwa
nilai function parameter selalu diperbaharui setiap function itu di panggil dan
diberi argument baru, melainkan function parameternya lah yang selalu baru.
Sama seperti variabel lokal, bahwa function parameter termasuk dalam
Automatic duration dengan arti bahwa variabel tersebut hanya akan ada pada
saat function tersebut sedang berjalan. sebelum itu dan sesudah itu, semua local
variabel di dalamnya akan hilang atau tidak ada. Contohnya adalah sebagai
berikut:
#include <iostream>
using namespace std;
int ubah(int x){
x = 99;
cout<<"x = "<<x<<endl;
}
int main () {
int a = 1;
cout<<"a = "<<a<<endl;
ubah(a); //pass by value
cout<<"a = "<<a<<endl;
return 0;
}
//parameter
void myFunction (int &a,int &b){
}
//pemanggilan
myfunction (argument1,argument2);
pada pass by value kita mengetahuhi sifat dari metode pass by value, yaitu
#include
ketika <iostream>argument kepada function parameter, yang CPU
kita memberikan
using namespace std;
lakukan
adalah nilai dari variabel argument akan disalin kepada variabel
void myF(int x);//function prototype
function
paremeter, keduanya akan berdiri sendiri sebagai variabel.
Jadi,int main(){
ketika terjadi perubahan nilai pada function parameter tidak akan
int a=1;
mempengaruhi
argument, Nilai pada argument akan selalu aman saat function
cout<<"a = "<<a<<endl;
tersebut sedang berjalan. Contoh programnya adalah sebagai berikut:
myF(a);
cout<<"a = "<<a<<endl;
return 0;
}
16
void myF(int x){
x++;
cout<<"x = "<<x<<endl;
}
tapi hal itu akan berbeda jika kita menggunakan reference pada function
parameter. Reference pada function parameter masih memiliki fungsi yang
sama seperti kita menggunakanya pada variabel biasa. Apa yang terjadi pada
argument adalah cpu akan membuat function parameter sebagai referensi dari
argument, atau dengan arti lain bahwa function parameter akan menjadi alias /
variabel dari memori argument yang deberikan.
Jadi function parameter akan menjadi argument tersebut dengan identitas
berbeda, apapun yang terjadi pada nilai function parameter maka akan
berpengaruh kepada argument tersebut. hal itu terjadi karena function parameter
dan argument memiliki satu memori yang sama. Contoh programnya adalah
sebagai berikut:
#include <iostream>
using namespace std;
void myF(int &x);
int main(){
int a=1;
cout<<"a = "<<a<<endl;
myF(a);
cout<<"a = "<<a<<endl;
return 0;
}
#include <iostream>
using namespace std;
void naik_turun(int &penaikan, int &penurunan, int
nilai, int jumlah);//function prototype
int main(){
int hasilNaik=0, hasilTurun=0, nilai=10;
naik_turun(hasilNaik, hasilTurun, nilai, 3);
cout<<"hasilNaik = "<<hasilNaik<<endl;
cout<<"hasilTurun = "<<hasilTurun<<endl;
return 0;
}
void naik_turun(int &penaikan, int &penurunan, int
nilai, int jumlah){
penaikan = nilai + jumlah;
penurunan = nilai - jumlah;
}
18
Bukan hanya itu saja keuntungan dalam menggunakan metode ini.
Metode pass by reference juga dapat meningkatkan performa program anda,
khususnya saat kita mencoba untuk memberikan variabel yang cukup besar
seperti array, object dan lain-lain. Jika kalian ingin menggunakan pass by
reference untuk menambahkan performa program anda tapi tidak ingin nilai dari
argument dapat di ubah anda dapat mendambahkan fitur konstanta pada
function parameter, dengan itu nilai dari argumen akan tetap aman.
10. Pass By Address
//function parameter
int myFunction (int *par){
}
//function parameter
myFunction(&var);
19
Dalam segi pemberian argument kepada function parameter mirip seperti
metode pass by value, ketika kita memberikan argument kepada function
parameter, apa yang terjadi adalah nilai dari argument yang diberikan akan
disalin dan diberikan kepada function parameter.
Untuk memberikan nilai yang berupa alamat memoir dari sebuah variabel ke
sebuah variabel pointer, meskipun variabel pointer tersebut merupakan function
parameter, kita tetap akan membutuhkan operator Address-of &.
Pada contoh program di atas kita diperlihatkan kemampuan dari penggunaan
pemberian argument dengan metode pass by address. Pada program di atas
function parameter x memiliki kemampuan dapat mengakses variabel a yang
diberikan sebagai argument, Meskipun variabel tersebut berada pada luar
function.
20
Pada program di atas kita diperlihatkan bahwa function parameter x dapat
mengubah dan melihat nilai dari variabel a yang berada di luar function dan
diakses secara langsung. Berikut adalah contoh program:
#include <iostream>
using namespace std;
void cetakArrayInt(int *theArr, int panjang)
{
//Jika argumen adalah null
if(!theArr){
cout<<"Array tidak ditemukan"<<endl;
return;
}
//jika array kosong
if(!panjang){
cout<<"Array kosong"<<endl;
return;
}
for(int i=0; i<panjang; i++){
cout<<theArr[i]<<" ";
}
}
int main()
{
int myArr[]={2, 3, 5, 8, 1};
cetakArrayInt(myArr, sizeof(myArr)/sizeof(int));
return 0;
}
a) Jika akan memberikan argument yang memiliki tipe data dasar, cukup
gunakan Pass by value.
21
b) Jika akan memberikan argument yang merupakan class, struct dan
argument yang cukup memakan banyak memori, gunakan Pass by
reference.
d) Jika akan membuat argument yang nilainya tidak bisa diubah, gunakan
pass by value atau anda juga bisa gunakan pass by address dan reference
dengan mengubah function parameter menjadi literal/konstanta.
e) Jika akan membuat nilai dari argument yang diberikan dapat di ubah,
jangan gunakan pass by value.
c. Rangkuman
a. Function adalah sebuah struktur, Pengelompokan yang mengandung
sekelompok pernyataan yang akan dilaksanakan oleh CPU jika nama function
tersebut dipanggil untuk dieksekusi, kecuali untuk function utama yaitu int
main() yang akan dieksekusi secara otomatis.
b. Function prototype adalah pernyataan dari deklarasi function, yang terdiri
dari retun type, identitas, parameter dan tanpa badan dari function (definisi)
c. Parameter adalah tempat penyimpanan (variabel) di dalam function, yang
digunakan untuk melakukan pemeberian data dari pemanggil ke dalam
function. Parameter terletak di antara tanda kurung ( dan ) setelah identitas
dari function
d. Terdapat 2 jenis paramater, yaitu Function parameter dan Argument.
d. Latihan/Tugas
1. Buatlah program beserta analisisnya untuk menghitung luas persegi
panjang dengan menggunakan prinsip modular (multi-function).
Dengan ketentuan sebagai berikut:
a) Input panjang dan lebar
b) Output luas
22
2. Buatlah program untuk menghitung nilai rata-rata dari 10 nilai
dengan menggunakan konsep modular.
23