Fungsi
Fungsi merupakan bagian
independen kode map nol atau lebih pada input parameter ke nol atau lebih parameter output. Fungsition
juga dikenal sebagai prosedur atau subrutin dan sering digambarkan sebagai
black box. Fungsi (Function) merupakan blok dari kode yang dirancang untuk
melaksanakan tugas khusus. Kegunaan dari fungsi ini adalah untuk:
- Mengurangi pengulangan penulisan program yang
berulangan atau sama.
- Program menjadi lebih terstruktur,
sehingga mudah dipahami dan dapat lebih dikembangkan.
Sekarang kita akan mulai menulis program yang menggunakan lebih dari satu fungsi dengan cara kerjanya yaitu menghitung sejumlah rata-rata angka. fungsi average adalah mengambil slice float64.
func
main() {
xs := []float64{98,93,77,82,83}
total := 0.0
for _, v := range xs {
total += v
}
fmt.Println(total / float64(len(xs))) // xs parameter fungis
}
Memulai fungsi dengan keyword func dengan
di ikuti dengan nama fungsi. Fungsi mulai dengan func kata kunci, diikuti
dengan nama fungsi. Parameter (input) dari fungsi didefinisikan seperti : name
type, name type, dan lain sebagainya. dalam program tersebut fungsi built-in dipanggil
yang disebut panik yang mana dapat menyebabkan kesalahan run time. Contoh mengambil code dari main fungsi dan dan fungsi ini akan memindahkanya ke dalama
rata-rata :
func average(xs []float64) float64 {
total := 0.0 for _, v := range xs {
total += v
}
return total / float64(len(xs))
}
Perhatikan
bahwa kita mengubah fmt.Println menjadi return sebagai gantinya. Pernyataan return
menyebabkan fungsi untuk menghentikan dan mengembalikan nilai setelah satu panggilan fungsi. Modifikasinya seperti ini
func main() {
xs := []float64{98,93,77,82,83}
fmt.Println(average(xs))
}
Dalam
menjalanka program ini ada beberapa yang harus di perkatikan yaitu
1. nama parameter tidak harus sesuai dengan fungsi yang di panggil misalnya
func main() {someOtherName := []float64{98,93,77,82,83}
fmt.Println(average(someOtherName))
}
22 fungsi tidak mempuyai akses untuk apa pun di
pemanggilan fungsi. Hal ini tidak akan bekerja:
func f() {
fmt.Println(x)
}
func main() {
x := 5
f()
}Karena tidak bekerja program diatas maka kita mencari solusi yaitu dengan membutuhkan salah satu fungsi
func f(x int) {
fmt.Println(x)
}
func main() {
x := 5
f(x)
}
atau
var x int = 5
func f() {
fmt.Println(x)
}
func main() {
f()
}
func main() {
fmt.Println(f1())
}
func f1() int {
return f2()
}
func f2() int {
return 1
}
Maka bentunya seperti ini
Variabel Function
MakeEvenGenerator mengembalikan fungsi yang menghasilkan angka genap. Setiap kali dipanggil akan ditambahkan 2 variabel dengan batasan sampai ke lokal i variabel which – unlike normal local variables – persists anara panggilan.Ada bentuk khusus yang tersedia untuk last parameter dalam fungsi Go:
func add(args ...int) int {
total := 0 for _, v := range args {
total += v
}
return total}func main() {
fmt.Println(add(1,2,3))
}
Menambah 1 variabel x yang didefenisiskan dalam fungsi scope. Variabel x ini dapat diakses dan dimodifikasi oleh fungsi increment. inilah sebabnya mengapa pertama kalianya kita buat incrument saat melihat 1 tampilan.fungsi seperti ini sama dengan fariabel non local pada referensi yang di kenal sebagai close. dalam hal ini variabel x membentuk closure. salah satu cara menggunakan closure adalah dengan menulis fungsi yang mengembalikan fungsi lain pada saat dipanggil sehingga menghasilkan urutan angka. sebgai contoh bagaimana kita mengasilkan semua nomor .
func makeEvenGenerator() func() uint {
i := uint(0)
return func() (ret uint) {
ret = i
i += 2
return
}
}
func main() {
nextEven := makeEvenGenerator()
fmt.Println(nextEven()) // 0
fmt.Println(nextEven()) // 2
fmt.Println(nextEven()) // 4
}
Recursi
Dalam pembahasan Recursi ini factorial akan memanggil dirinya sendiri.
Closure and recursion adalah tekini pemograman yang kuat yang menjadi dasar
paradigm yang dikenal sebagai pemograman fungsional. Salah satu cara menghitung
pengfaktorial nomor adalah
func factorial(x uint) uint {
if x == 0 {
return 1
}
return x * factorial(x-1)
}
Defer, Panic & Recover
Go memiliki pernyataan khusus yang disebut defer dengan pemanggilan fungsi yang akan dijalankan setelah fungsi selesai. Perhatikan contoh
berikut:
package main
import "fmt"
func first() {
fmt.Println("1st")
}
func second() {
fmt.Println("2nd")
}
func main() {
defer second()
first()
}
Defer
sering digunakan ketika membutuhkan beberapa cara. Misalnya ketika kita membuka file kita perlu memastikan untuk menutup nanti. Dengan defer yaituf, _ := os.Open(filename)
defer f.Close()
Panic & Recover
Sebelumnya telah dibahasa
tentang panic dan dalam panic itu sebenarnya dapat menyebabkan kesalahan run
time, solusi lain untuk mengangani kesalahan run time tersebut adalah dengan
memulihkan fungsi “built-in”. cara kerjanya yaitu menghentikan panic dan
mengemebalikan nilai yangn dilewatkan pada panic call dank arena panic akan
segera berhenti maka sebaliknya kita harus memasangkan defer
package main
import "fmt"
func main() {
defer func() {
str := recover()
fmt.Println(str)
}()
panic("PANIC")
}Pendukung dari fungsi ini : https://golang.org/ref/spec

Tidak ada komentar:
Posting Komentar