Closure merupakan anonimous function atau fungsi tanpa nama. Biasa digunakan untuk membungkus suatu proses yang hanya digunakan sekali atau dipakai pada blok tertentu saja

Definis Closure

Closure adalah sebuah fungsi yang bisa disimpan pada sebuah variable. Dengan menerapkan konsep tersebut kita bisa membuat fungsi di dalam fungsi, atau bahkan bisa juga membuat fungsi yang mengembalikan fungsi.

Bagaimana implementasi Closure Pada Kode Program ?

Sebuah fungsi tanpa nama bisa dismpan dalam variable. Variabel yang menyimpan closure memiliki sifat seperti fungsi yang disimpannya. Di bawah ini adalah contoh program sederhana :

counter := func(x int) int {

y := 0
y += x

return y

}

fmt.Println(counter(1))

Cara pemanggilannya, dengan menuliskan nama variabel tersebut sebagai fungsi, seperti pemanggilan fungsi biasa.

fmt.Println(counter(1))

 

Closure Sebagai Nilai Kembalian

Salah satu keunikan closure lainnya adalah bisa dijadikan sebagai nilai balik fungsi, cukup aneh memang, tapi pada suatu kondisi teknik ini sangat membantu. Di bawah ini disediakan sebuah fungsi bernama findMax(), fungsi ini salah satu nilai kembaliannya berupa closure.

package main

import "fmt"

func findMax(numbers []int, max int) (int, func() []int) {
    var res []int
    for _, e := range numbers {
        if e <= max {
            res = append(res, e)
        }
    }
    return len(res), func() []int {
        return res
    }
}

Nilai kembalian ke-2 pada fungsi di atas adalah closure dengan skema func() []int. Bisa dilihat di bagian akhir, ada fungsi tanpa nama yang dikembalikan.

return len(res), func() []int {
    return res
}

Sedikit tentang fungsi findMax(), fungsi ini digunakan untuk mencari banyaknya angka-angka yang nilainya di bawah atau sama dengan angka tertentu. Nilai kembalian pertama adalah jumlah angkanya. Nilai kembalian kedua berupa closure yang mengembalikan angka-angka yang dicari.

Manfaat Closure

Closure dibuat dengan tujuan agar kamu bisa meng-enkapsulasi sebuah fungsi menjadi private function seperti halnya pada bahasa pemrograman objek oriented. Dengan adanya Closure diharapkan pemrogram bisa lebih mudah membedakan fungsi public dan fungsi private.

Baca artikel lainya :

*** artikel ini dibuat sebagai bahan pengingat penulis yang sedang belajar bahasa golang

** sumber referensi : dasarpemrogramangolang.novalagung.com