Closure dalam Swift

Disini Kamu akan mempelajari apa yang membuat closure berbeda dari fungsi biasa dalam swift. Kita mulai dengan “Apa itu Closure?”
Closure adalah blok fungsi yang bisa Kamu masukkan di kode Kamu. Kamu bisa memasukkan closure sebagai argumen suatu fungsi atau Kamu bisa menyimpannya sebagai properti suatu objek.
Bisa dikatakan juga Closure adalah fungsi tanpa nama dan key func (sampai saat ini).
Coding time… Silahkan buka Playground Kamu.
Fungsi
Sebelum masuk ke closure, kita mulai dengan fungsi dahulu. Silahkan buat fungsi penjumlahan.
func addition(number1: Int, number2: Int) -> Int {
return number1 + number2
}
var addFunction = addition
addFunction(10, 30) // 40Closure
Buat closure yang fungsinya sama/identik dengan contoh fungsi di atas. Blok Closure diawali dan diakhiri dengan { dan }.
var addClosures: (Int, Int) -> Int = {
(number1: Int, number2: Int) in
return number1 + number2
}
addClosures(4, 10) // 14Tipe dari addClosures adalah (Int, Int) -> Int dan itu identik dengan addition dari contoh pertama. number1 dan number2 adalah parameter. Apa pun yang muncul setelah keyword in adalah blok return.
Penulisan Singkat
Dalam penulisannya closure juga bisa tanpa return seletelah in jika closure hanya mengembalikan nilai.
var addClosuresTwo = {
(number1: Int, number2: Int) -> Int in
print("Hello")
return number1 + number2 // return required
}
var addClosuresThree = {
(number1: Int, number2: Int) in
number1 + number2 // return not required
}
addClosuresThree(4, 6)AddClosuresTwo memerlukan return karena ada tambahan baris kodeprint("Hello"). Selain itu, Kamu dapat skip return. Lalu kamu harus menambahkan tipe yang dikembalikan secara eksplisit ( -> Int).
Kita ingin membuat lebih singkat, tentu saja bisa mari kita buat menjadi 1 baris.
var addClosuresFour: (Int, Int) -> Int = { $0 + $1 }
addClosuresFour(4, 5) // 9Pada contoh di atas, $0 dan $1 merujuk pada parameter pertama dan kedua. Swift bisa mengetahui 4 sebagai $0 dan 5, $1 dari addClosuresFour (4, 5).
Bisakah Kamu mengembalikan 1 atau lebih fungsi ke sebuah fungsi?
Mulai dari sini mungkin akan lebih membingungkan, tetap fokus. Kamu akan belajar cara membuat fungsi khusus. Jadi tidak hanya menggunakan closure sebagai parameter dan tapi juga sebagai return.
Return Closure
Terdapat 2 cara untuk membuat closure sebagai return, tapi sebelum itu kita buat terlebih dahulu sebuah closure yang akan kita return
var addWithClosures: (Int, Int) -> Int = { (number1: Int, number2: Int) in
return number1 + number2
}Return Closure secara tidak langsung
Buat fungsi yang tipe return nya adalah (Int, Int) -> Int.
func returnClosure() -> ((Int, Int) -> Int) {
return addWithClosures
}
let addClosure = returnClosure()
addClosure(4, 10)
let addClosureTwo = returnClosure()(4, 10) // addWithClosure(4, 10)
print(addClosureTwo) // 14Kamu telah mengembalikan addWithClosures yang tipenya adalah (Int, Int) -> Int.
Return Closure secara langsung
Kamu dapat mengembalikan closure secara langsung, sebagai ganti dari addWithClosures.
func returnClosureDirectly() -> ((Int, Int) -> Int) {
return { (number1, number2) in number1 + number2 }
}
returnClosureDirectly()(4, 10) // 14Atau jika Kamu ingin lebih singkat
func returnClosureDirectlyTwo() -> ((Int, Int) -> Int) {
return { $0 + $1 }
}
returnClosureDirectlyTwo()(4, 10) // 14Passing Closure
Buat fungsi yang parameternya menerima () -> String. Kemudian, jalankan blok closure dalam fungsi.
func insertClosureBlock(closureBlock: () -> String) -> String {
return closureBlock()
}Buat closure yang akan diteruskan dalam fungsi insertClosureBlock.
func hello() -> String {
return "hello"
}Passing Closure secara tidak langsung
insertClosureBlock(closureBlock: hello) // "hello"
Passing Closure secara langsung
insertClosureBlock { () in return "hello" }
insertClosureBlock { () in "hello" }
insertClosureBlock(closureBlock: { return "hello" })
insertClosureBlock(closureBlock: { "hello" })Ingat bahwa tiap fungsi adalah closure. Dengan kata lain, aturan yang sama berlaku untuk closure yang tanpa nama.
Ada tiga jenis closure:
- fungsi global
- fungsi nested
- ekspresi closure
Closure merupakan konsep penting dan Kamu akan sering gunakan di Swift. Closure memungkinkan Kamu menulis kode yang fleksibel dan dinamis yang proses penulisannya mudah sekaligus mudah dipahami.
Semoga bermanfaat.
