Fungsi#
Perkenalan#
Fungsi adalah komponen fundamental dalam pemrograman C++, yang mengemas potongan kode menjadi bagian kode yang efisien dan dapat digunakan kembali, yang dirancang untuk melakukan tugas tertentu. Fungsi dapat dipanggil beberapa kali dalam sebuah program, sehingga memudahkan pengorganisasian kode dan membantu menghindari pengulangan kode. Fungsi juga membuat kode lebih mudah di-debug.
Halaman ini membahas dasar-dasar penggunaan fungsi dalam C++, termasuk:
Struktur dan Sintaks Fungsi — Cara penulisan fungsi dalam C++, termasuk tipe pengembalian, nama, dan parameter.
Prototipe Fungsi — Apa itu fungsi prototipe dan mengapa fungsi prototipe digunakan.
Mendefinisikan dan Memanggil Fungsi — Cara membuat fungsi dan memanggilnya dari program Anda.
Nilai Kembalian — Bagaimana fungsi dapat mengirim data kembali ke pemanggil.
Melewati dengan Referensi — Bagaimana fungsi dapat memodifikasi variabel di luar cakupannya sendiri.
Fungsi Callback — Bagaimana fungsi dapat diteruskan ke fungsi lain dan dipanggil secara otomatis sebagai respons terhadap suatu peristiwa.
Fungsi dengan Argumen Default — Cara parameter dapat diberi nilai default ketika tidak ada argumen yang diberikan.
Struktur dan Sintaksis Fungsi#
Dalam C++, fungsi harus dideklarasikan dengan tipe kembalian, nama, dan parameternya. Sintaks dasarnya adalah:
return_type function_name(parameters) {
// Code to execute when the function is called
return result; // Optional, used to return a value
}
Bagian Fungsional |
Keterangan |
|---|---|
|
Tipe data yang dikembalikan oleh fungsi, beberapa opsi umum adalah:
|
|
Nama fungsi tersebut. |
|
Opsional. Daftar parameter bertipe yang dipisahkan koma, ditulis sebagai |
|
Optional. The value returned by the function. If the function’s |
Catatan: Sebuah fungsi harus selalu dideklarasikan sebelum dipanggil, atau Anda harus menyediakan prototipe fungsi.
Prototipe Fungsi#
Dalam C++, kode dibaca dari atas ke bawah. Ini berarti sebuah fungsi harus dikenal oleh kompiler sebelum dapat dipanggil.
Prototipe fungsi memungkinkan Anda menggunakan sebuah fungsi sebelum menulis kode lengkapnya. Ini memungkinkan Anda untuk tetap menempatkan main() di dekat bagian atas program Anda sambil menempatkan definisi fungsi di bagian selanjutnya, di mana lebih mudah untuk diatur dan dibaca.
Tanpa prototipe, Anda harus mendefinisikan setiap fungsi di atas main(), yang dapat membuat proyek lebih sulit diikuti seiring perkembangannya.
// The function's prototype
void greeting();
int main() {
greeting();
}
// Write the function's body after
void greeting() {
Brain.Screen.print("Hello!");
}
Mendefinisikan dan Memanggil Fungsi#
Functions with No Parameters#
Jika suatu fungsi tidak memerlukan input, Anda dapat mendefinisikannya tanpa parameter. Gunakan void sebagai tipe kembalian jika fungsi tersebut tidak mengembalikan nilai.
// Define a function to display a message
void greeting() {
Brain.Screen.print("Hello!");
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Call the function to display the message
greeting();
}
Functions with Parameters#
Anda juga dapat menambahkan parameter ke fungsi, yang memungkinkan Anda untuk memberikan informasi yang akan digunakan oleh fungsi tersebut.
Catatan: Teks dapat dilewatkan menggunakan string gaya C (const char*) atau string C++ (std::string).
// Define a function with a parameter
void namedGreeting(const char* name) {
Brain.Screen.print("Hello, %s!", name);
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
namedGreeting("Stranger");
}
Nilai Kembalian#
Fungsi dapat mengirim data kembali ke pemanggil menggunakan kata kunci return Ini memungkinkan Anda untuk menangkap dan menggunakan output dalam proyek Anda.
// Define a function that multiplies numbers by 2
int timesTwo(int number) {
return number * 2;
}
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Display the return value
Brain.Screen.print("%d", timesTwo(2));
}
Referensi yang Dilewati#
Secara default, C++ meneruskan parameter fungsi berdasarkan nilai, artinya fungsi tersebut menerima salinan dari variabel asli. Perubahan yang dilakukan di dalam fungsi tidak memengaruhi nilai aslinya.
// Add 1 to the number
void addOne(int number) {
number++;
}
int main() {
int value = 5;
addOne(value);
// "value" will still be 5
}
Untuk memungkinkan suatu fungsi memodifikasi variabel asli, parameter dapat dilewatkan dengan referensi menggunakan simbol &.
// Add 1 to the number
void addOne(int& number) {
number++;
}
int main() {
int value = 5;
addOne(value);
// "value" will now be 6
}
Melewatkan dengan referensi memungkinkan fungsi untuk memperbarui variabel yang didefinisikan di luar fungsi tanpa mengembalikan nilai.
Fungsi Panggilan Balik#
Fungsi callback adalah fungsi yang diteruskan ke fungsi lain dan dipanggil secara otomatis ketika suatu peristiwa tertentu terjadi.
Fungsi callback umumnya digunakan untuk peristiwa seperti penekanan tombol atau pembaruan sensor.
Alih-alih memanggil fungsi tersebut sendiri, proyek akan memanggilnya untuk Anda ketika peristiwa itu terjadi.
void onPressed() {
Brain.Screen.print("Screen pressed!");
}
// Call onPressed whenever the screen is pressed
int main() {
vexcodeInit();
Brain.Screen.pressed(onPressed);
}
Callback Signatures#
Setiap fungsi callback harus mengikuti tanda tangan tertentu, yang mendefinisikan:
Tipe pengembalian
Jumlah parameter
Jenis parameter
Tanda tangan yang dibutuhkan ditentukan oleh API. Fungsi callback harus sama persis dengan tanda tangan ini.
// This callback function cannot include any parameters
void callback(void);
// This callback function includes four parameters
void callback(axisType axis, double x, double y, double z);
Nama parameter bersifat deskriptif dan dapat bervariasi, tetapi tipe kembalian, urutan parameter, dan tipe parameter harus sama persis.
Fungsi dengan Argumen Default#
Fungsi dapat menentukan nilai default untuk satu atau lebih parameter. Argumen default digunakan ketika tidak ada nilai yang diberikan untuk parameter tersebut saat fungsi dipanggil.
Aturan untuk argumen default:
Argumen default harus menjadi parameter terakhir dalam definisi fungsi.
Setelah suatu parameter memiliki nilai default, semua parameter setelahnya juga harus memiliki nilai default.
Jika suatu fungsi menentukan argumen default dalam prototipe, nilai default tersebut tidak boleh ditentukan lagi dalam definisi fungsi.
// Required parameter first, default parameter last
void greeting(const char* name, int repeatCount = 1) {
for (int i = 0; i < repeatCount; i++) {
Brain.Screen.print("Hello, %s!", name);
Brain.Screen.newLine();
}
}
int main() {
vexcodeInit();
// Say what name to greet (V5) and
// use default value for repeatCount (1)
greeting("V5");
Brain.Screen.newLine();
// Overrides the default value to 3
greeting("V5", 3);
}