Topik ini membahas deklarasi fungsi dengan kata kunci fn, peran fungsi Main sebagai titik masuk program, dan program hello world yang dijalankan di Carbon Explorer. Pembahasan mencakup anatomi deklarasi fungsi, aturan yang mengikat Main, serta cara membaca keluaran program yang selalu memuat baris result. Setelah membaca topik ini, program Carbon pertama dapat ditulis dan dieksekusi di Compiler Explorer lengkap dengan pemahaman atas setiap baris keluarannya.
Fungsi dengan fn#
Deklarasi fungsi dalam Carbon selalu diawali kata kunci fn, diikuti nama fungsi, daftar parameter dalam tanda kurung, tipe kembalian yang ditandai ->, dan tubuh fungsi dalam tanda kurung kurawal. Dokumen desain memperkenalkan fn sebagai kata pengantar (introducer keyword), yaitu kata yang menandai jenis deklarasi sejak baris pertamanya. Setiap parameter ditulis dengan pola nama: tipe, sehingga tipe setiap argumen selalu eksplisit. Pernyataan dan deklarasi dalam Carbon diakhiri titik koma atau berbentuk blok dengan kurung kurawal, seperti tubuh fungsi itu sendiri.
// tidak-dijalankan
fn Tambah(a: i32, b: i32) -> i32 {
return a + b;
}Fungsi pada contoh di atas bernama Tambah, menerima dua parameter bertipe i32, dan mengembalikan nilai i32 melalui pernyataan return. Program utuh berikut menggunakan fungsi itu di dalam Main, kemudian hasilnya dicetak melalui Print.
package sample api;
fn Tambah(a: i32, b: i32) -> i32 {
return a + b;
}
fn Main() -> i32 {
Print("Jumlah: {0}", Tambah(7, 5));
return 0;
}Jumlah: 12
result: 0Keluaran di atas diperoleh dari eksekusi nyata di Compiler Explorer. Angka 12 pada baris pertama adalah hasil pemanggilan Tambah(7, 5), sedangkan tempat penanda {0} pada teks format diganti dengan nilai argumen kedua pernyataan Print. Pemisahan antara perhitungan di Tambah dan pencetakan di Main memperlihatkan peran tipe kembalian, yaitu membawa nilai dari fungsi ke pemanggilnya tanpa variabel perantara.
Main sebagai titik masuk program#
Fungsi Main adalah titik masuk (entry point) yang dieksekusi Carbon Explorer ketika sebuah berkas dijalankan. Explorer mewajibkan Main memiliki tipe kembalian eksplisit, dan bentuk yang berjalan adalah fn Main() -> i32 yang diakhiri return 0;. Apabila tipe kembalian ditiadakan, pemeriksa menolak program dengan pesan error, dan pesan aslinya ditampilkan pada bagian kesalahan umum di bawah. Kata kunci fn, parameter, dan tipe kembalian berlaku sama untuk Main seperti untuk fungsi lain, sehingga Main hanyalah fungsi biasa yang dipanggil oleh alat, bukan oleh kode lain dalam program.
Dokumen desain menetapkan hal yang sedikit berbeda, yaitu titik masuk program bernama Run yang berada pada library default package Main, sementara bentuk deklarasi titik masuk yang sah masih tercatat sebagai keputusan yang belum rampung. Kesenjangan kecil ini wajar pada bahasa eksperimental, karena Explorer menjalankan perilaku yang sudah terimplementasi, sedangkan dokumen desain memuat arah yang belum sepenuhnya terwujud. Bagi pembelajar hari ini, bentuk yang perlu ditulis di Explorer tetap fn Main() -> i32, dan bentuk itulah yang digunakan seluruh contoh pada jalur ini.
Program halo dan keluarannya#
Program hello world pada Carbon ditulis dalam beberapa baris, dan seluruhnya dapat dijalankan di Compiler Explorer tanpa instalasi apa pun. Berkas berikut bernama halo.carbon dan berisi deklarasi package, fungsi Main, serta satu pernyataan Print.
package sample api;
fn Main() -> i32 {
Print("Halo, Carbon!");
return 0;
}Halo, Carbon!
result: 0Fungsi Print menerima satu atau dua argumen, dan argumen pertamanya wajib berupa string. Bentuk satu argumen mencetak teks apa adanya, sedangkan bentuk dua argumen memperlakukan teks pertama sebagai format dengan tempat penanda {0} yang diganti nilai argumen kedua bertipe i32. Pernyataan ini tidak menambahkan baris baru di akhir keluarannya. Nama Print dapat digunakan tanpa pernyataan import karena Explorer menyediakannya dari library bawaan, sedangkan dokumen desain menuliskannya sebagai Core.Print yang berasal dari library io pada package Core.
Baris result: 0 bukan keluaran program, melainkan penanda yang selalu ditambahkan Compiler Explorer dan berisi kode kembalian fungsi Main. Apabila Main mengembalikan nilai lain, angka pada baris itu ikut berubah, misalnya return 2; menghasilkan baris result: 2. Nilai ini berguna saat program diuji secara otomatis, karena keberhasilannya dapat diperiksa dari kode kembalian tanpa membaca teks keluarannya.
Kesalahan umum#
Tiga kesalahan berikut paling sering muncul ketika program Carbon pertama ditulis di Explorer, dan ketiganya diverifikasi melalui eksekusi nyata. Semua pesan di bawah adalah keluaran stderr asli dari Compiler Explorer, sehingga bentuknya dapat dibandingkan langsung dengan pesan yang muncul saat contoh serupa dicoba ulang. Kesalahan pertama adalah berkas tanpa deklarasi package sama sekali.
fn Main() -> i32 {
Print("Halo, Carbon!");
return 0;
}SYNTAX ERROR: <source>:1: syntax error, unexpected FN, expecting PACKAGEPesan expecting PACKAGE menyatakan bahwa tahap pembacaan sintaks menunggu kata package sebelum kata fn. Perbaikannya adalah menambahkan deklarasi package pada baris pertama, misalnya package sample api;.
Kesalahan kedua adalah Main tanpa tipe kembalian. Program terlihat selesai ditulis, tetapi pemeriksa menolaknya pada tahap kompilasi.
package sample api;
fn Main() {
Print("Halo, Carbon!");
}COMPILATION ERROR: <source>:3: `Main` must have an explicit return typePesan error ini sekaligus menyebut solusinya, yaitu memberi tipe kembalian eksplisit -> i32 dan mengembalikan nilai di akhir tubuh fungsi.
Kesalahan ketiga adalah menyambung string dengan operator +, misalnya untuk menggabungkan sapaan dengan nama.
package sample api;
fn Main() -> i32 {
Print("Halo, " + "Carbon!");
return 0;
}COMPILATION ERROR: <source>:4: type error in `+`:
could not find implementation of interface AddWith(U = String) for StringInterpreter Explorer belum menyediakan operasi penjumlahan untuk tipe String, sehingga penyambungan teks dengan + ditolak. Perbaikannya adalah menggunakan format Print, yaitu teks tetap ditulis pada argumen pertama, sedangkan bagian yang berubah ditulis sebagai {0} beserta nilainya pada argumen kedua.
Ringkasan#
- Deklarasi fungsi Carbon diawali
fn, menggunakan pola parameternama: tipe, dan dapat menyatakan tipe kembalian setelah->. Mainadalah titik masuk yang dieksekusi Explorer dan wajib bertipe kembalian eksplisiti32.Printmenerima satu atau dua argumen dengan tempat penanda{0}, tanpa menambahkan baris baru di akhir.- Baris
result: Npada keluaran Compiler Explorer berisi kode kembalianMaindan selalu ditampilkan.
Referensi#
- Design README — Carbon Language
— Bagian Tour of the basics menetapkan bentuk deklarasi
fn, pola parameternama: tipe, dan pernyataanreturn. - Compiler Explorer — Godbolt Compiler Explorer — Layanan tempat seluruh program dan pesan error pada topik ini dieksekusi.