Jenis-jenis fungsi
Terdapat 3 jenis fungsi, atau aripicu, dalam Gara:
- Metode
- Fungsi bebas
- Fungsi statis
Metode
Setiap data dalam Gara adalah objek dan setiap objek itu sendiri berasal dari suatu kelas. Sebelumnya kita pernah diskusikan bagaimana suatu kelas bisa memiliki tingkah laku. Tingkah laku itulah yang disebut sebagai metode. Jadi, metode adalah fungsi yang didefinisikan di dalam kelas, dan terikat dengan objek dari kelas tersebut.
Penting
Metode adalah fungsi yang didefinisikan di dalam kelas, dan terikat dengan objek dari kelas tersebut
Kita akan membuat kelas Negara
yang akan kita lengkapi satu per satu dengan berbagai contoh fungsi.
kelas Negara {
ada nama = ""
ada luasTanah = 0.0
ada kota = []
// menghitung kepadatan penduduk per 1km2
fn kepadatan(jmlPenduduk) {
1.0 * jmlPenduduk / luasTanah
}
}
Kelas Negara
diatas memiliki suatu metode bernama kepadatan
untuk menghitung kepadatan penduduk per 1km persegi di suatu negara. Mari kita coba:
ada nkri = Negara.baru()
nkri.nama = "Indonesia"
nkri.luasTanah = 1811570
cetak("Terdapat " + nkri.kepadatan(276730535) + " penduduk per 1km2 di " + nkri.nama)
Dengan menjalankan kode diatas, kita akan mendapatkan hasil berikut:
Terdapat 152.75729615747667 penduduk per 1km2 di Indonesia
Fungsi statis
Fungsi statis hampir mirip dengan metode karena sama-sama berada dalam kelas. Bedanya, fungsi statis didefinisikan menggunakan fn sta
sedangkan metode didefinisikan menggunakan fn
saja. Bedanya lagi, fungsi statis adalah milik kelas, sedangkan metode dimiliki oleh instansi suatu kelas.
kelas Matematika {
fn sta maksimal(angka1, angka2) {
jika angka1 == angka2 {
angka1
} lain jika angka1 > angka2 {
angka1
} lain {
angka2
}
}
}
Matematika.maksimal(24, 22)
Penting
Fungsi statis adalah milik kelas, sedangkan metode dimiliki oleh instansi suatu kelas
Fungsi bebas
Fungsi bebas adalah fungsi yang tidak terikat oleh suatu objek. Fungsi ini dapat ditempatkan pada variabel:
ada sapa = fn (nama) { "Hai, " + nama }
Pada contoh diatas, kita membuat suatu fungsi bebas baru yang kemudian kita tempatkan pada variabel sapa
. Karena sapa
adalah suatu variabel yang berisi fungsi, kita bisa memicunya seperti pada contoh diatas. Menjalankan kode diatas akan menghasilkan keluaran:
Hai, Gara
Perbedaan fungsi dan metode
Fungsi dan metode sama-sama diadakan menggunakan kata kunci fn
, namun ada perbedaan diantara keduanya. Pertama, dari segi penempatan, metode adalah fungsi yang diciptakan dalam sebuah kelas, dan menjadi bagian dari instansi kelas tersebut. Sedangkan fungsi selalu diciptakan diluar kelas, atau, saat fungsi diciptakan didalam kelas namun terdapat kata kunci sta
yang berarti fungsi tersebut adalah fungsi statis.
Kedua, ketika kita menyebut pengenal metode/fungsi statis di dalam kelas, meski tanpa operator picu (()
), Gara akan mengartikan itu sebagai perintah pemicuan (demo):
kelas Xyz {
fn sta c() {
cetak("c() terpicu")
}
fn a() {
cetak("a() terpicu")
}
fn b() {
a
Xyz.c
}
}
Xyz.baru().b()
Perhatikan bahwa pada konteks pemicuan metode b
diatas, kita hanya menyebut a
dan Xyz.c
tanpa melakukan pemicuan. Namun, Gara mengartikan itu sebagai pemicuan.
Ketika kita menyebut pengenal fungsi diluar kelas dan objek, maka kita akan mendapatkan fungsi itu sendiri, bukan hasil dari pemicuan fungsi tersebut.
ada a = fn () { "a() terpicu" }
ada b = a
cetak(b)
cetak(b())
Pada contoh kasus diatas, kita menciptakan fungsi anonim dan menempatkannya ke dalam variabel a
. Kemudian, kita menyebut variabel a
dan menempatkannya ke dalam variabel b
. Perhatikan bahwa dalam kasus ini, a
tidak dipicu oleh Gara. Sebaliknya, kini variabel b
berisi fungsi yang sama dengan variabel a
.
Perbedaan ini ada karena di dalam kelas, pengguna tidak diperkenankan untuk mendapatkan aripicu itu sendiri. Sehingga, mau tidak mau penyebutan nama dari suatu aripicu dianggap oleh Gara sebagai pemicuan. Sedangkan diluar kelas dan objek, penyebutan pengenal suatu fungsi, tanpa operasi picu (()
), akan mengutus fungsi itu sendiri.