Fungsi
Merupakan kumpulan kode yang dibungkus menjadi satu Biasa digunakan untuk kode yang sering digunakan, alih-alih menuliskannya berkali-kali, cukup tulis sekali, dan panggil saja kapan pun, dimanapun dibutuhkan.
Format sederhananya
func namaFungsi() {
/*
Tulis blok kode nya di sini
*/
}
contoh
package main
import . "fmt"
func main() {
greeting()
// Hello there
}
func greeting() {
Println("Hello there")
}
Dengan parameter
func namaFungsi(param1 tipeDataParam1, param2 tipeDataParam2) {
}
Parameter kita tulis dalam kurung, seperti bahasa lain, tipe data parameter kita tulis tepat setelah parameter tersebut dengan spasi, tiap parameter terpisah koma. contoh
package main
import . "fmt"
func main() {
greeting("Abdul", "Andi")
// Hello Abdul & Andi
}
func greeting(param1 string, param2 string) {
Println("Hello", param1, "&", param2)
}
Dengan parameter bertipe data sama
func namaFungsi(param1, param2 tipeDataParam) {
}
Bila banyak parameter, dan bertipe sama, cukup kita tulis di bagian akhir, tidak perlu menulis semuanya contoh
package main
import . "fmt"
func main() {
greeting("Abdul", "Andi")
// Hello Abdul & Andi
}
func greeting(param1, param2 string) {
Println("Hello", param1, "&", param2)
}
Dengan return value
func namaFungsi(param1, param2 tipeDataParam) tipeDataReturn {
return hasil
}
Bila fungsi mengembalikan nilai, kita definisikan tipe data return setelah kurung parameter. dan mengembalikan nila di dalam body fungsi dengan keyword return
contoh
package main
import . "fmt"
func main() {
var bruto float32 = 73
var netto float32 = 71.5
tara := hitungTara(bruto, netto)
Println(tara)
// 1.5
}
func hitungTara(bruto, netto float32) float32 {
return bruto - netto
}
Return lebih dari satu
func namaFungsi(param1, param2 tipeDataParam) (tipeDataReturn1, tipeDataReturn2) {
return hasil1, hasil2
}
Bila mengembalikan hasil lebih dari satu nilai, cukup memberi kurung dan koma pada tipe data return, dan memisah nilai return dengan koma.
package main
import . "fmt"
func main() {
var bruto float32 = 73
var netto float32 = 71.5
tara, taraInPercent := hitungTara(bruto, netto)
Println(tara, taraInPercent)
// 1.5 2.0547945
}
func hitungTara(bruto, netto float32) (float32, float32) {
var tara float32 = bruto - netto
var taraInPercent float32 = tara / bruto * 100
return tara, taraInPercent
}
Predefined Return
func namaFungsi(param1, param2 tiperDataParam) (hasil1 tipeDataReturn1, hasil2 tipeDataReturn2) {
hasil1 = param1
hasil2 = param2
return
}
Bila kita menentukan variabel apa yang akan dikembalikan, dalam kurung tipe data return, tulis juga nama variabel-nya, dan dalam body fungsi, kita hanya perlu menulis keyword return
. Berlaku juga bila hanya mengembalikan 1 nilai. Perlu diketahui bahwa predefined
berarti kita telah mendeklarasi variabel tersebut, kita hanya perlu inisialisasi di dalam body fungsi
func hitungTara(bruto, netto float32) (tara, taraInPercent float32) {
tara = bruto - netto
taraInPercent = tara / bruto * 100
return
}
kita pun dapat menyingkat tipe data return yang sama seperti tipe data paremeter yang sama.
Variadic
Bila kita memasukkan banyak parameter dengan tipe data sama, dan ingin menerimanya sebagai satu variabel seperti slice. Inilah yang disebut variadic
func namaFungsi(params ...tipeDataParams) {
}
namaFungsi(param1, param2, param3, param4)
Perlu diingat bahwa ini hanya berlaku pada tipe data yang sama. dengan begitu param1, param2, param3, param4
akan diterima sebagai [param1, param2, param3, param4]
Dan tentunya kita dapat meng-iterate params
package main
import . "fmt"
func main() {
avr := hitungRatarata(9, 9, 5, 3, 6, 7, 6, 7, 6)
Println(avr)
// 6.4444447
}
func hitungRatarata(semuaNilai ...float32) (avr float32) {
var totalNilai float32 = 0
for _, nilai := range semuaNilai {
totalNilai += nilai
}
avr = totalNilai / float32(len(semuaNilai))
return
}
Lantas bagaimana bila kita hendak melempar parameter slice sebagai variadic?
var slice = []int{1, 2, 3, 4}
namaFungsi(slice...)
Cukup menambah ...
di belakangnya.
var semuaNilai = []float32{9, 9, 5, 3, 6, 7, 6, 7, 6}
avr := hitungRatarata(semuaNilai...)
Atau barangkali teman-teman lebih suka menerimanya sebagai slice, pun bisa dilakukan.
Namun tipe data parameter di fugsi harus dirubah jadi slice.
Yang berarti kita pun tidak bisa memanggil fungsi seperti namaFungsi(param1, param2, param3, param4)
.
Perlu digarisbawahi bahwa variadic berbeda dengan slice.
- Dengan variadic, kita bisa menerima banyak param sebagai slice, ataupun menerima slice, tentu dengan tanda
...
- Namun dengan slice, kita tidak bisa menerima banyak param sebagai slice.
Param Variadic & Biasa
Kita pun dapat mengkombinasikan param biasa dengan variadic.
Dengan ketentuan variadic harus di belakang
func namaFungsi(param1 tipeDataParam1, otherParams ...tipeDataOtherParams) {
}
namaFungsi(param1, param2, param3)
namaFungsi(param1, slice...)
contoh
package main
import . "fmt"
func main() {
greeting("Abdul", "Andi")
// Hello Abdul & 1 temannya
greeting("Abdul", "Budi", "Agung", "Rizki")
// Hello Abdul & 3 temannya
siswa := []string{
"Eko",
"Anu",
"Ani",
"Ehm",
}
greeting(siswa[0], siswa[1:]...)
// Hello Eko & 3 temannya
}
func greeting(nama string, teman ...string) {
Println("Hello", nama, "&", len(teman), "temannya")
}
Demikian artikel kali ini, Semoga mudah dipahami, Terima kasih.