Skip to main content

Functions and Procedures

Pada materi sebelumnya, kita telah mempelajari variabel, operator, conditional, dan loop untuk menyusun alur program.

Namun, ketika program mulai menjadi lebih panjang, menuliskan seluruh instruksi di dalam main() dapat membuat kode sulit dibaca dan dirawat. Kita mungkin juga perlu menjalankan proses yang sama di beberapa tempat.

Untuk mengatasi hal tersebut, bahasa C menyediakan function. Dengan function, kita dapat memisahkan program menjadi bagian-bagian kecil yang masing-masing memiliki tugas tertentu.

Selain function yang menghasilkan nilai, kita juga dapat membuat function yang hanya melakukan suatu tindakan tanpa mengembalikan nilai. Dalam materi ini, bentuk tersebut akan kita bahas sebagai procedure atau void function.


Tujuan Praktikum​

Setelah menyelesaikan praktikum ini, kalian diharapkan mampu:

  • Memahami pengertian dan manfaat function.
  • Menjelaskan bagian-bagian dari sebuah function.
  • Membedakan function declaration, function definition, dan function call.
  • Memahami perbedaan parameter dan argument.
  • Memahami cara kerja passing argument by value.
  • Membuat function yang mengembalikan nilai menggunakan return.
  • Membuat procedure atau function bertipe void.
  • Memahami perbedaan local variable dan global variable.
  • Menggunakan function untuk menyelesaikan permasalahan sederhana.

Apa itu Function?​

Function adalah blok kode yang dirancang untuk melakukan tugas tertentu. Function membantu kita membagi program yang kompleks menjadi bagian-bagian yang lebih kecil sehingga lebih mudah dipahami, digunakan kembali, dan diperbaiki.

Misalnya, kita ingin menjumlahkan dua bilangan. Kita dapat menuliskan operasi penjumlahan secara langsung di dalam main():

#include <stdio.h>

int main(void) {
int a = 5;
int b = 3;
int hasil = a + b;

printf("Hasil = %d\n", hasil);

return 0;
}

Program tersebut menghasilkan:

Hasil = 8

Namun, jika operasi penjumlahan yang sama dibutuhkan beberapa kali, kita dapat memisahkannya ke dalam sebuah function.

int add(int a, int b) {
return a + b;
}

Function add() menerima dua nilai, menjumlahkannya, lalu mengembalikan hasilnya kepada bagian program yang memanggil function tersebut.

Manfaat Menggunakan Function​

Ada beberapa manfaat utama menggunakan function.

1. Modularity

Program dapat dibagi menjadi bagian-bagian kecil yang masing-masing memiliki tugas tertentu.

Contohnya, program dapat memiliki function calculateArea() untuk menghitung luas dan function printResult() untuk menampilkan hasil.

2. Reusability

Function dapat dipanggil berkali-kali tanpa harus menulis ulang instruksi yang sama.

int hasil1 = add(5, 3);
int hasil2 = add(10, 2);

Kedua baris tersebut menggunakan function add() dengan argument yang berbeda.

3. Maintainability

Ketika terdapat kesalahan atau perubahan pada suatu proses, kita dapat memperbaiki bagian function yang berkaitan tanpa harus menelusuri seluruh program.

4. Abstraction

Function menyembunyikan detail proses di dalamnya. Ketika menggunakan function, kita cukup mengetahui tugas dan cara memanggilnya tanpa harus selalu melihat setiap instruksi di dalam function tersebut.


Defining a Function​

Untuk membuat function dalam bahasa C, kita dapat menggunakan sintaks dasar berikut:

return_type function_name(parameters) {
// body of the function
}

Perhatikan contoh berikut:

int square(int x) {
return x * x;
}

Function tersebut digunakan untuk menghitung kuadrat sebuah bilangan.

Bagian-Bagian Function​

Sebuah function memiliki beberapa bagian utama.

BagianPenjelasan
return_typeTipe nilai yang dikembalikan oleh function, misalnya int, float, atau void jika tidak mengembalikan nilai.
function_nameNama yang digunakan untuk mengenali dan memanggil function.
parametersVariabel yang menerima nilai dari bagian program yang memanggil function.
bodyBlok kode yang berisi instruksi yang akan dijalankan.
returnPernyataan untuk mengembalikan nilai kepada pemanggil, jika function memang menghasilkan nilai.

Mari kita uraikan contoh berikut:

int square(int x) {
return x * x;
}
int → Return type
square → Function name
int x → Parameter
x * x → Proses yang dilakukan
return → Mengembalikan hasil proses

Pada contoh tersebut, square() menerima sebuah bilangan bertipe int melalui parameter x. Function kemudian menghitung x * x dan mengembalikan hasilnya sebagai bilangan bertipe int.

Contoh Program Function​

Function yang dibuat perlu dipanggil agar instruksi di dalamnya dijalankan. Berikut contoh program lengkapnya:

#include <stdio.h>

int square(int x) {
return x * x;
}

int main(void) {
int hasil = square(5);

printf("Hasil = %d\n", hasil);

return 0;
}

Output di terminal:

Hasil = 25

Pada baris:

int hasil = square(5);

program memanggil function square() dengan argument 5.

Di dalam function, nilai tersebut diterima oleh parameter x. Kemudian expression:

x * x

menghasilkan 25, dan return mengirimkan nilai tersebut kembali ke tempat function dipanggil.

Nilai 25 kemudian disimpan ke dalam variabel hasil.


Function Declaration vs. Definition​

Dalam bahasa C, kita perlu membedakan function declaration dan function definition.

Function Declaration (Prototype)​

Function declaration atau function prototype memberi tahu compiler tentang nama function, return type, serta parameter yang digunakan. Declaration tidak berisi implementasi atau body function.

Contoh:

int add(int a, int b);

Baris tersebut memberi tahu bahwa:

  • Nama function adalah add.
  • Function mengembalikan nilai bertipe int.
  • Function menerima dua parameter bertipe int.

Perhatikan bahwa declaration diakhiri dengan tanda titik koma (;).

Function Definition​

Function definition berisi implementasi sebenarnya dari function, yaitu instruksi yang dijalankan ketika function dipanggil.

Contoh:

int add(int a, int b) {
return a + b;
}

Body function tersebut berisi proses penjumlahan a + b.

Perbedaan Declaration dan Definition​

DeclarationDefinition
Memperkenalkan bentuk atau signature function kepada compiler.Menyediakan implementasi function.
Tidak memiliki body function.Memiliki body function di dalam {}.
Contoh: int add(int a, int b);Contoh: int add(int a, int b) { return a + b; }

Contoh Menggunakan Prototype​

Prototype berguna ketika kita ingin menuliskan main() lebih dahulu, sementara definition function diletakkan setelahnya.

#include <stdio.h>

int add(int a, int b);

int main(void) {
int hasil = add(5, 3);

printf("Hasil = %d\n", hasil);

return 0;
}

int add(int a, int b) {
return a + b;
}

Output di terminal:

Hasil = 8

Perhatikan urutan program tersebut:

Function declaration
↓
main()
↓
Function definition

Prototype memberi tahu compiler bagaimana add() digunakan sebelum compiler mencapai definition-nya.

Function juga dapat didefinisikan terlebih dahulu sebelum main(). Dalam susunan seperti itu, prototype terpisah tidak diperlukan karena definition sudah muncul sebelum pemanggilan function.


Calling a Function​

Function call adalah pernyataan yang digunakan untuk menjalankan function.

Bentuk sederhananya:

function_name(arguments);

Contoh pemanggilan function:

add(5, 3);

Jika function mengembalikan sebuah nilai, hasilnya dapat disimpan ke dalam variabel atau digunakan dalam expression.

int hasil = add(5, 3);

Perhatikan program lengkap berikut:

#include <stdio.h>

int add(int a, int b) {
return a + b;
}

int main(void) {
printf("%d\n", add(5, 3));
printf("%d\n", add(10, 2));

return 0;
}

Output di terminal:

8
12

Function add() dipanggil dua kali dengan argument yang berbeda. Karena function tersebut dapat digunakan kembali, kita tidak perlu menulis ulang proses penjumlahan untuk setiap pasangan bilangan.


Parameters and Arguments​

Parameter dan argument berkaitan erat, tetapi keduanya memiliki pengertian yang berbeda.

Parameter adalah variabel yang dituliskan pada declaration atau definition function untuk menerima nilai.

Argument adalah nilai atau data aktual yang diberikan ketika function dipanggil.

Perhatikan contoh:

int add(int a, int b) {
return a + b;
}

Pada function tersebut:

a dan b → Parameters

Sekarang perhatikan pemanggilannya:

add(5, 3);

Pada pemanggilan tersebut:

5 dan 3 → Arguments

Argument 5 diberikan kepada parameter a, sedangkan argument 3 diberikan kepada parameter b.

IstilahContohFungsi
Parameterint a, int bMenerima nilai di dalam function.
Argument5, 3Nilai yang dikirim saat function dipanggil.

Contoh Parameters dan Arguments​

#include <stdio.h>

int multiply(int a, int b) {
return a * b;
}

int main(void) {
int hasil = multiply(4, 6);

printf("Hasil perkalian = %d\n", hasil);

return 0;
}

Output di terminal:

Hasil perkalian = 24

Pada pemanggilan:

multiply(4, 6)

nilai 4 dan 6 merupakan argument. Di dalam function, nilai-nilai tersebut diterima oleh parameter a dan b.

Kemudian function menghitung:

4 * 6 = 24

dan mengembalikan hasilnya.


Passing Arguments to Functions​

Dalam bahasa C, argument sederhana seperti nilai bertipe int dikirim ke function by value.

Artinya, function menerima salinan nilai yang diberikan. Perubahan terhadap parameter di dalam function tidak secara langsung mengubah variabel asli milik pemanggil.

Perhatikan contoh berikut:

#include <stdio.h>

void increment(int x) {
x = x + 1;

printf("Nilai x di dalam function: %d\n", x);
}

int main(void) {
int angka = 5;

increment(angka);

printf("Nilai angka di luar function: %d\n", angka);

return 0;
}

Output di terminal:

Nilai x di dalam function: 6
Nilai angka di luar function: 5

Mengapa hasilnya berbeda?

Awalnya, variabel angka memiliki nilai:

angka = 5

Ketika program menjalankan:

increment(angka);

nilai 5 disalin ke parameter x.

Di dalam function:

x = x + 1;

nilai x berubah menjadi 6. Namun, x adalah parameter lokal yang menyimpan salinan nilai tersebut. Variabel angka di dalam main() tetap bernilai 5.

Secara sederhana:

angka = 5
│
└── Nilainya disalin ke x
│
▼
x = 5
│
x + 1
│
▼
x = 6

angka tetap = 5
info

Pembahasan ini menjelaskan passing by value untuk nilai sederhana, seperti int.

Pada bahasa C, pointer dapat digunakan ketika sebuah function perlu mengakses atau mengubah objek milik pemanggil melalui alamat memorinya. Pointer merupakan materi tersendiri dan tidak diperlukan untuk memahami contoh di atas.


Returning Values from Functions​

Function dapat mengembalikan hasil perhitungannya kepada bagian program yang memanggilnya dengan menggunakan keyword return.

Contoh:

int multiply(int a, int b) {
return a * b;
}

Pada function tersebut, hasil perkalian a * b dikembalikan sebagai nilai bertipe int.

Perhatikan program lengkap berikut:

#include <stdio.h>

int multiply(int a, int b) {
return a * b;
}

int main(void) {
int hasil = multiply(6, 4);

printf("Hasil = %d\n", hasil);

return 0;
}

Output di terminal:

Hasil = 24

Baris berikut:

return a * b;

mengembalikan hasil perkalian kepada pemanggil. Nilai yang dikembalikan kemudian disimpan ke dalam variabel hasil.

Perlu diperhatikan bahwa return type function harus sesuai dengan jenis nilai yang ingin dikembalikan.

Contoh:

int add(int a, int b) {
return a + b;
}

Function add() bertipe int karena mengembalikan sebuah bilangan bulat.


Void Functions (Procedures)​

Tidak semua function dibuat untuk menghasilkan suatu nilai.

Ada kalanya kita hanya ingin menjalankan suatu tindakan, misalnya menampilkan pesan ke terminal. Untuk kebutuhan tersebut, kita dapat menggunakan function dengan return type void.

Dalam konteks materi ini, function bertipe void disebut juga procedure.

Contoh:

void printMessage(void) {
printf("Hello, World!\n");
}

Function printMessage() hanya menampilkan pesan. Function tersebut tidak mengembalikan nilai kepada pemanggil.

Contoh Program Procedure​

#include <stdio.h>

void printMessage(void) {
printf("Hello, World!\n");
}

int main(void) {
printMessage();

return 0;
}

Output di terminal:

Hello, World!

Pada program tersebut:

void printMessage(void)

menandakan bahwa:

  • Return type void berarti function tidak mengembalikan nilai.
  • Nama function adalah printMessage.
  • Parameter void menandakan bahwa function tidak menerima argument.

Ketika baris:

printMessage();

dijalankan, instruksi printf() yang berada di dalam function akan dieksekusi.

tip

Gunakan function dengan return type void ketika tujuan utamanya adalah melakukan tindakan, seperti menampilkan pesan.

Gunakan function dengan return type tertentu, seperti int atau double, ketika hasilnya perlu dikembalikan untuk digunakan kembali.


Function vs. Procedure​

Dalam materi ini, kita membedakan keduanya berdasarkan apakah function mengembalikan nilai atau hanya melakukan suatu tindakan.

Function yang Mengembalikan NilaiProcedure (void function)
Mengembalikan nilai kepada pemanggil.Tidak mengembalikan nilai.
Biasanya digunakan untuk perhitungan atau menghasilkan suatu hasil.Biasanya digunakan untuk melakukan tindakan.
Memiliki return type seperti int atau double.Menggunakan return type void.
Contoh: int add(int a, int b)Contoh: void printMessage(void)

Perhatikan kedua contoh berikut.

Function yang mengembalikan nilai:

int add(int a, int b) {
return a + b;
}

Procedure yang melakukan tindakan:

void printMessage(void) {
printf("Hello!\n");
}

Perbedaan cara penggunaannya:

int hasil = add(5, 3);

Hasil add(5, 3) dapat disimpan di dalam variabel hasil.

Sementara itu:

printMessage();

digunakan untuk menjalankan tindakan di dalam printMessage().

Perlu diingat bahwa dalam bahasa C, keduanya secara teknis ditulis menggunakan function. Istilah procedure pada materi ini merujuk pada function bertipe void yang tidak mengembalikan nilai.


C Variable Scope​

Scope adalah wilayah di dalam program tempat sebuah variabel dapat diakses menggunakan namanya.

Dalam materi ini, kita akan mengenal dua jenis variabel berdasarkan scope-nya:

  • Local variable
  • Global variable

Perbedaan keduanya terletak pada tempat variabel dideklarasikan dan wilayah tempat variabel tersebut dapat diakses.

Local Variable​

Local variable adalah variabel yang dideklarasikan di dalam sebuah function atau blok, misalnya di dalam main(), function lain, loop, atau conditional statement.

Variabel lokal hanya dapat diakses di wilayah tempat variabel tersebut dideklarasikan.

Contoh:

void myFunction(void) {
int x = 10;
printf("%d\n", x);
}

Variabel x merupakan local variable karena dideklarasikan di dalam myFunction().

Variabel tersebut dapat digunakan di dalam function tersebut, tetapi tidak dapat langsung diakses dengan nama x dari function lain.

Perhatikan program lengkap berikut:

#include <stdio.h>

void showNumber(void) {
int localNumber = 10;

printf("Local number = %d\n", localNumber);
}

int main(void) {
showNumber();

return 0;
}

Output di terminal:

Local number = 10

Variabel localNumber hanya dapat digunakan di dalam showNumber(). Variabel tersebut tidak dapat langsung digunakan di dalam main().

Global Variable​

Global variable adalah variabel yang dideklarasikan di luar semua function, biasanya di bagian atas file program.

Global variable dapat diakses oleh function-function dalam file yang sama setelah deklarasinya diketahui.

Contoh:

#include <stdio.h>

int globalNumber = 100;

void showNumber(void) {
printf("Nilai global = %d\n", globalNumber);
}

int main(void) {
showNumber();

printf("Di dalam main = %d\n", globalNumber);

return 0;
}

Output di terminal:

Nilai global = 100
Di dalam main = 100

Variabel globalNumber dideklarasikan di luar seluruh function, sehingga dapat digunakan oleh showNumber() maupun main().

Perbandingan Local dan Global Variable​

Local VariableGlobal Variable
Dideklarasikan di dalam function atau blok.Dideklarasikan di luar semua function.
Hanya dapat diakses di wilayah deklarasinya.Dapat diakses oleh function dalam file yang sama setelah deklarasinya.
Variabel lokal otomatis biasa memiliki lifetime selama blok tempat variabel tersebut aktif.Memiliki lifetime sepanjang program berjalan.
warning

Hindari menggunakan global variable jika nilai tersebut sebenarnya hanya dibutuhkan oleh satu function.

Mengirimkan data melalui parameter biasanya membuat hubungan antar- function lebih jelas dan memudahkan program untuk dipahami serta dirawat.


Best Practices for Using Functions​

Ketika mulai membuat program yang lebih besar, ada beberapa kebiasaan baik yang dapat membantu menjaga kode tetap mudah dibaca.

1. Buat function dengan satu tugas yang jelas

Usahakan setiap function memiliki tanggung jawab utama yang mudah dijelaskan.

Contohnya, gunakan calculateArea() untuk menghitung luas dan printResult() untuk menampilkan hasil.

2. Hindari function yang terlalu panjang

Jika sebuah function melakukan terlalu banyak hal, pertimbangkan untuk memisahkan proses-proses tersebut menjadi beberapa function yang lebih kecil.

3. Gunakan nama function dan parameter yang deskriptif

Nama seperti:

calculateArea()

lebih mudah dipahami daripada nama yang tidak memberikan gambaran tentang tujuannya.

4. Gunakan kembali function yang sudah dibuat

Jika suatu proses dibutuhkan berkali-kali, buat function agar kita tidak perlu menulis ulang implementasi yang sama.

5. Perhatikan return type dan parameter

Pastikan return type sesuai dengan nilai yang dikembalikan dan argument yang dikirim sesuai dengan parameter function.


Common Mistakes to Avoid​

Ada beberapa kesalahan yang sering terjadi ketika mulai menggunakan function dalam bahasa C.

1. Lupa Mengembalikan Nilai​

Jika sebuah function memiliki return type selain void, pastikan function mengembalikan nilai yang sesuai.

Contoh yang salah:

int square(int x) {
x * x;
}

Function tersebut bertipe int, tetapi tidak mengembalikan hasil perhitungannya menggunakan return.

Perbaikannya:

int square(int x) {
return x * x;
}

2. Ketidaksesuaian Parameter dan Argument​

Perhatikan prototype:

int add(int a, int b);

Function tersebut mengharapkan dua argument.

Pemanggilan berikut tidak sesuai:

add(5);

Karena hanya satu argument diberikan, sedangkan function memerlukan dua argument bertipe int.

Pemanggilan yang sesuai:

add(5, 3);

3. Memanggil Function Sebelum Deklarasinya Diketahui​

Jika definition function diletakkan setelah main(), berikan prototype sebelum function tersebut dipanggil.

Contoh:

int add(int a, int b);

int main(void) {
int hasil = add(5, 3);
return 0;
}

int add(int a, int b) {
return a + b;
}

Prototype:

int add(int a, int b);

memberi tahu compiler signature function sebelum pemanggilannya.


Practice​

Setelah memahami function dan procedure, cobalah membuat function sendiri untuk menyelesaikan permasalahan berikut.

Pada bagian ini, fokuslah untuk memisahkan proses perhitungan ke dalam function, kemudian memanggilnya dari main().

Practice 1 — Konversi Suhu​

Buatlah dua function untuk mengonversi suhu:

  1. celsiusToFahrenheit() untuk mengonversi Celsius ke Fahrenheit.
  2. fahrenheitToCelsius() untuk mengonversi Fahrenheit ke Celsius.

Kedua function menerima sebuah nilai suhu dan mengembalikan hasil konversinya.

Gunakan rumus berikut:

Fahrenheit = (Celsius × 9 / 5) + 32

Celsius = (Fahrenheit - 32) × 5 / 9

Agar perhitungan pecahan tidak terpotong menjadi pembagian bilangan bulat, gunakan tipe data double dan pastikan pembagian dilakukan dengan nilai pecahan, misalnya 9.0 / 5.0.

Uji function dengan nilai berikut:

25 Celsius
77 Fahrenheit

Hasil konversi yang diharapkan:

25.00 Celsius = 77.00 Fahrenheit
77.00 Fahrenheit = 25.00 Celsius

Petunjuk:

  • Gunakan return type double.
  • Terima suhu melalui parameter.
  • Kembalikan hasil perhitungan menggunakan return.
  • Panggil kedua function dari main().
  • Gunakan printf() dengan %.2f untuk menampilkan dua angka di belakang koma.

Practice 2 — Maximum of Three Numbers​

Buatlah sebuah function bernama findMax yang menerima tiga bilangan bulat sebagai parameter dan mengembalikan bilangan terbesar dari ketiganya.

Gunakan signature berikut:

int findMax(int a, int b, int c);

Contoh pemanggilan:

findMax(12, 7, 20);

Hasil yang diharapkan:

Maximum = 20

Uji juga function tersebut dengan beberapa kombinasi nilai lain, termasuk ketika bilangan terbesar berada pada parameter pertama, kedua, atau ketiga.

Petunjuk:

  • Bandingkan ketiga nilai yang diterima function.
  • Tentukan nilai terbesar.
  • Kembalikan nilai terbesar menggunakan return.
  • Panggil findMax() dari main() dan tampilkan hasilnya.

Ringkasan​

Pada materi ini, kita telah mempelajari bahwa function membantu membagi program menjadi bagian-bagian yang lebih kecil dan dapat digunakan kembali.

Konsep utama yang perlu diingat:

Function
→ Blok kode untuk melakukan tugas tertentu.

Declaration / Prototype
→ Memberi tahu compiler tentang signature function.

Definition
→ Berisi implementasi atau body function.

Function Call
→ Menjalankan function.

Parameter
→ Variabel yang menerima nilai di dalam function.

Argument
→ Nilai yang diberikan ketika function dipanggil.

return
→ Mengembalikan nilai kepada pemanggil.

void function / Procedure
→ Function yang tidak mengembalikan nilai.

Local Variable
→ Variabel yang hanya dapat diakses pada wilayah deklarasinya.

Global Variable
→ Variabel yang dideklarasikan di luar semua function.

Dengan menggunakan function secara tepat, program menjadi lebih modular, lebih mudah digunakan kembali, dan lebih mudah dipelihara.