Akademi Manajemen Informatika

Closure Di Golang

Closure adalah kombinasi dari function yang dibundle Serempak dengan scope di sekitarnya. Di dalam closure, kita Bisa mengakses scope yang berada di luar function dari dalam function itu sendiri karena merupakan satu scope yang sama. Ketika menggunakan closure, Anda harus berhati-hati agar terhindar dari ketidaksengajaan merubah data diluar function. Secara sederhana, closure adalah function yang berada di dalam function.

Misalnya Closure

package main

import "fmt"

func main() {
	name := "Rizky Kurniawan"

	printName := func() {
		fmt.Println(name)
	}

	printName()
}

output:

Dari Misalnya diatas, Anda Bisa Memperhatikan bahwa kita Membikin sebuah function di dalam function main. Di dalamnya, kita memprint nilai dari variabel name yang berada diluar function. Keadaan inilah yang disebut sebagai closure.

READ  Android Gravity and Layout Gravity

Hati-hati Ketika Menggunakan Closure

Seperti penjelasan sebelumnya, kita harus berhati-hati ketika menggunakan closure. Karena kita Bisa mengakses variabel yang berada diluar function (seperti Ketika mengakses variable name), maka kita Bisa saja Kagak sengaja merubah nilai dari variable tersebut. Pada beberapa kasus, hal ini akan berbahaya. Contohnya sebagai berikut:

package main

import "fmt"

func main() {
	name := "Rizky Kurniawan"

	printName := func() {
		// anggap saja Kagak sengaja merubah isi variabel name
		name = "Tony Stark"

		fmt.Println(name)
	}

	printName()
}

output:

Nah itu dia, dari Misalnya tersebut dapat Anda lihat bahwa kita Bisa mengganti nilai variable name dari dalam function printName. Maka, ketika kita print yang ditampilkan adalah nama Kagak sengaja kita ubah.

READ  Kenali Apa itu Deep Learning, 4Jenis dan Penerapannya

Perlu Anda ketahui bahwa perubahan ini Kagak hanya berlaku di dalam function printName saja, tetapi juga berlaku di luar function printName setelah function tersebut di panggil. Kalau Anda mencoba memprint variabel name di luar function printName setelah pemanggilan function, maka nilainya akan tetap seperti setelah dirubah Adalah Tony Stark.

package main

import "fmt"

func main() {
	name := "Rizky Kurniawan"

	printName := func() {
		// anggap saja Kagak sengaja merubah isi variabel name
		name = "Tony Stark"
		fmt.Println("Di dalam function printName")
		fmt.Println(name)
	}

  // kita panggil function-nya
	printName()

	fmt.Println("Di luar function printName")
	fmt.Println(name)
}

output:

Di dalam function printName
Tony Stark
Di luar function printName
Tony Stark

Berikutnya: #29: Defer, Panic, & Recover

READ  Penyebab dan Langkah Mengatasi HTTP Error 500: Internal Server Error