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) { }