Menu
CoddyTech

Menangkap Nilai

Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 40 dari 56.

Closure mengingat variabel yang berada dalam cakupan saat dibuat. Isi closure dapat membaca dan bahkan mengubahnya nanti, bahkan setelah fungsi yang melingkupinya selesai. Ini disebut capturing.

func makeCounter() -> () -> Int {
    var count = 0
    return {
        count += 1
        return count
    }
}

let next = makeCounter()
print(next())                    // 1
print(next())                    // 2
print(next())                    // 3

Setiap pemanggilan makeCounter memberimu count baru, jadi dua penghitung tidak pernah berbagi state:

let a = makeCounter()
let b = makeCounter()
print(a())                       // 1
print(b())                       // 1
print(a())                       // 2

Penangkapan membuat closure lebih kuat daripada fungsi biasa: closure membawa state bersamanya. Kamu akan melihat trik yang sama di JavaScript, Python, dan banyak bahasa lainnya.

challenge icon

Tantangan

Sedang

Buat pabrik penghitung sederhana.

Definisikan fungsi makeCounter(start: Int, step: Int) yang mengembalikan closure bertipe () -> Int. Setiap kali closure dipanggil, closure mengembalikan nilai berikutnya: pemanggilan pertama mengembalikan start, pemanggilan berikutnya mengembalikan start + step, pemanggilan selanjutnya mengembalikan start + 2*step, dan seterusnya.

Baca tiga bilangan bulat dari input: start, step, dan n. Buat penghitung dengan start dan step, lalu panggil penghitung itu n kali dan cetak setiap hasil pada barisnya sendiri.

Untuk input 5 / 3 / 4, outputnya adalah:

5
8
11
14

Coba sendiri

let start = Int(readLine()!)!
let step = Int(readLine()!)!
let n = Int(readLine()!)!

// TODO: buat fungsi makeCounter(start:step:) -> () -> Int yang menyimpan nilai yang terus berubah
// lalu panggil fungsi itu sebanyak n kali dan cetak setiap hasilnya
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Playground Swift