Pengertian Fungsi C : Parameter, Return, dan Scope

9

Sebagian besar bahasa pemrograman memungkinkan Anda membagi program yang berantakan dan sudah berjalan lama menjadi beberapa bagian yang rapi dan diberi nama. Potongan-potongan ini disebut fungsi. Mereka memungkinkan Anda untuk menggunakan kembali kode alih-alih menulis ulang logika yang sama berulang kali. Suatu fungsi mengambil masukan, yang dikenal sebagai parameter, dan mengeluarkan hasilnya. Di C, Anda dapat meneruskan parameter sebanyak yang Anda perlukan. Kompiler tidak peduli dengan urutan fungsi dalam file sumber Anda, selama ia mengetahui nama fungsi tersebut sebelum mencoba menjalankannya.

Kami menyinggung hal ini secara singkat dengan fungsi rand. Ini adalah fungsi yang paling sederhana. Tidak memerlukan apa pun dan mengembalikan bilangan bulat.

Baris int rand() memberi tahu kompiler bahwa rand adalah sebuah fungsi. Ia tidak menerima parameter dan mengembalikan bilangan bulat. Versi khusus ini tidak memiliki variabel lokal. Jika ya, mereka akan berada tepat di bawah kurung kurawal pembuka {. C memungkinkan Anda mendeklarasikan variabel di mana saja setelah {. Mereka ada sampai } yang cocok ditemukan. Lalu mereka menghilang. Saat variabel lokal masih aktif, variabel lokal tetap berada di tumpukan sistem.

Perhatikan tidak adanya titik koma setelah rand(). Jika Anda secara tidak sengaja memasukkannya, Anda akan mendapatkan sejumlah besar pesan kesalahan dari kompiler yang tidak masuk akal. Meskipun tanpa parameter, Anda harus menggunakan tanda kurung. Tanpa mereka, Anda tidak mendeklarasikan suatu fungsi. Anda baru saja mendeklarasikan bilangan bulat.

Pernyataan Pengembalian dan Beberapa Titik Keluar

Pernyataan return sangat penting untuk fungsi apa pun yang memberikan hasil. Ini menetapkan nilai yang akan dikembalikan dan segera keluar dari fungsi. Anda dapat menempatkan beberapa pernyataan pengembalian dalam satu fungsi untuk membuat beberapa titik keluar.

Jika Anda lupa pernyataan return dalam fungsi yang seharusnya mengembalikan nilai, fungsi tersebut akan keluar ketika mencapai tanda kurung kurawal penutup. Ini mengembalikan nilai sampah acak. Kebanyakan kompiler modern akan memperingatkan Anda jika Anda gagal mengembalikan nilai tertentu. C mendukung pengembalian jenis apa pun: int, float, char, struct, dan banyak lagi.

Ada beberapa cara yang benar untuk memanggil fungsi rand. Yang paling umum adalah tugas:

Di sini, variabel x mendapatkan nilai yang dikembalikan oleh rand. Anda harus menyertakan tanda kurung dalam panggilan, meskipun tidak ada parameter. Tanpanya, x menerima alamat memori dari fungsi rand. Jarang sekali hal itu yang Anda inginkan.

Anda juga dapat memanggilnya dalam kondisi:

Atau abaikan saja hasilnya:

Dalam kasus terakhir, fungsi berjalan tetapi nilai yang dikembalikan akan dibuang. Anda mungkin tidak ingin melakukan ini dengan rand, namun banyak fungsi menggunakan nilai kembalian sebagai kode kesalahan. Jika Anda tahu bahwa kesalahan tidak mungkin terjadi, membuang kode tersebut tidak masalah.

Menangani Pengembalian Batal

Terkadang Anda tidak ingin mengembalikan apa pun. Anda menggunakan tipe pengembalian void untuk ini.

Fungsi ini mengeluarkan teks tetapi tidak mengembalikan nilai. Anda menyebutnya seperti ini:

Sekali lagi, sertakan tanda kurung. Jika Anda menghilangkannya, fungsinya tidak dipanggil. Ini akan dikompilasi dengan benar di banyak sistem, tetapi tidak akan melakukan apa pun.

Parameter dan Kode C Gaya Lama

Fungsi C dapat menerima parameter jenis apa pun. Berikut adalah fungsi yang menghitung faktorial suatu bilangan:

Parameter i diteruskan sebagai bilangan bulat. Untuk meneruskan beberapa parameter, pisahkan dengan koma.

C telah berevolusi. Kadang-kadang Anda akan melihat kode lama ditulis dengan “gaya lama”. Ini terlihat seperti ini:

Anda harus bisa membaca notasi lama ini. Ini dijalankan dengan cara yang persis sama. Itu hanya sintaksis yang berbeda. Anda harus menggunakan “gaya baru”, yang dikenal sebagai ANSI C, yang tipenya dideklarasikan dalam daftar parameter. Hanya gunakan gaya lama jika Anda tahu Anda mengirimkan kode ke seseorang dengan kompiler non-ANSI.

Mengapa Ini Penting bagi Pengguna Sehari-hari

Anda mungkin tidak menulis fungsi C setiap hari. Namun memahami cara kerjanya mengubah cara Anda berpikir tentang perangkat lunak. Setiap kali Anda mengklik tombol di aplikasi web, suatu fungsi kemungkinan besar memproses klik tersebut, memeriksa parameter, dan mengembalikan status. Jika Anda pernah melihat “runtime error” atau “stack overflow”, Anda mengalami keterbatasan dari mekanisme ini.

Perbedaan antara meneruskan nilai dan meneruskan referensi (alamat memori) adalah sumber bug yang umum. Dalam bahasa tingkat tinggi, hal ini sering kali disembunyikan. Di C, ini eksplisit. Mengetahui bahwa rand tanpa tanda kurung mengembalikan alamat, bukan nomor, menghemat waktu proses debug.

Perdebatan gaya lama vs. gaya baru sebagian besar diselesaikan pada proyek-proyek baru. ANSI C adalah standarnya. Namun basis kode lama masih ada. Mengetahui cara membaca int add(i,j) int i; int j; mencegah Anda terjebak pada kode yang terlihat salah tetapi berfungsi dengan sempurna. Ini adalah masalah literasi.

Apakah tumpukan itu penting bagi Anda? Jika program Anda mogok secara tidak terduga, pelacakan tumpukan adalah satu-satunya petunjuk Anda. Hilangnya variabel lokal saat mencapai kurung kurawal penutup bukanlah suatu bug. Ini adalah sebuah fitur. Itu membuat penggunaan memori dapat diprediksi.

Tidak ada cara sempurna untuk menulis kode. Hanya ada cara yang mengkompilasi dan ada cara yang tidak. Simpan tanda kurung. Perhatikan pengembalian Anda. Dan jangan berasumsi kompiler akan menyelamatkan Anda dari kesalahan sintaksis Anda sendiri. Itu tidak akan terjadi.