Section 9/111 menit

9. Kapan Tidak Digunakan

9. Kapan Tidak Digunakan

Hindari borrowing ketika:

1. Tipe kecil (Int, Bool, struct dengan sedikit field primitif)

swift
// Tidak perlu — copy Int sangat murah, tidak ada manfaat borrowing
func double(value: borrowing Int) -> Int { value * 2 }  // overkill

// Cukup:
func double(_ value: Int) -> Int { value * 2 }

2. Fungsi perlu menyimpan referensi atau mengirim ke async context

swift
// borrowing tidak bisa escape ke async atau stored reference
func cache(data: borrowing LargeData) {
    // ❌ tidak bisa: self.cachedData = data  (escape)
    // ❌ tidak bisa: Task { process(data) }  (async escape)
    
    // Kalau butuh ini, gunakan default (copy) atau consuming
}

Hindari consuming ketika:

1. Caller masih butuh nilai setelah call

swift
// Jika caller butuh nilai setelah call, jangan consuming
func logAndProcess(data: consuming UserData) { }

let userData = UserData(...)
logAndProcess(data: userData)
// print(userData.name)  // ❌ ERROR jika consuming — tidak bisa

2. Tipe yang perlu di-share ke banyak tempat

swift
// Config yang dibaca dari banyak service — jangan consuming
func configure(service: Service, with config: consuming Configuration) {
    // service mengambil alih config — tidak bisa dipakai untuk service lain!
}

// Lebih baik: borrowing atau default copy
func configure(service: Service, with config: borrowing Configuration) { }