Fungsi

Fungsi adalah blok kode yang bisa digunakan ulang (reusable). Mendefinisikan fungsi dengan kata kunci fungsi.

Mendefinisikan Fungsi

Sintaks
fungsi namaFungsi(parameter1, parameter2) {
    // kode fungsi
    kembalikan nilai
}

Fungsi Tanpa Parameter

Contoh
fungsi sapa() {
    tampilkan("Selamat datang di NusaScript!")
}

sapa()  // panggil fungsi
Output
Selamat datang di NusaScript!

Fungsi dengan Parameter

Contoh
fungsi luas_persegi(sisi) {
    kembalikan sisi * sisi
}

fungsi luas_segitiga(alas, tinggi) {
    kembalikan (alas * tinggi) / 2
}

tampilkan("Luas persegi 5:", luas_persegi(5))
tampilkan("Luas segitiga 8x6:", luas_segitiga(8, 6))
Output
Luas persegi 5: 25
Luas segitiga 8x6: 24

Fungsi Rekursif

Contoh — Faktorial
fungsi faktorial(n) {
    jika n <= 1 {
        kembalikan 1
    }
    kembalikan n * faktorial(n - 1)
}

tampilkan("5! =", faktorial(5))   // 120
tampilkan("10! =", faktorial(10)) // 3628800
Output
5! = 120
10! = 3628800

Fungsi Anonim

Fungsi anonim adalah fungsi tanpa nama yang bisa disimpan dalam variabel atau dikirim sebagai argumen.

Contoh
// Fungsi anonim disimpan dalam variabel
buat tambah = fungsi(a, b) {
    kembalikan a + b
}

buat kali = fungsi(a, b) {
    kembalikan a * b
}

tampilkan(tambah(3, 4))   // 7
tampilkan(kali(3, 4))     // 12
Output
7
12

Fungsi sebagai Argumen (Higher-Order Function)

Contoh
fungsi lakukan_dua_kali(fn, nilai) {
    kembalikan fn(fn(nilai))
}

buat tambah_sepuluh = fungsi(x) {
    kembalikan x + 10
}

tampilkan(lakukan_dua_kali(tambah_sepuluh, 5))  // 5+10+10 = 25
Output
25

Tipe Kembali (Opsional)

Contoh dengan Anotasi Tipe
// Anotasi tipe bersifat opsional (dokumentasi)
fungsi hitung_umur(tahun_lahir: bilangan) -> bilangan {
    kembalikan 2026 - tahun_lahir
}

fungsi nama_lengkap(depan: teks, belakang: teks) -> teks {
    kembalikan depan + " " + belakang
}

tampilkan(hitung_umur(2000))
tampilkan(nama_lengkap("Budi", "Santoso"))
Output
26
Budi Santoso
Tipe data pada parameter (: bilangan) dan tipe kembali (-> teks) bersifat opsional — hanya untuk dokumentasi. NusaScript menggunakan dynamic typing.