Section 5/81 menit
5. Kapan Harus Digunakan
5. Kapan Harus Digunakan
Gunakan Parameter Packs + Pack Iteration ketika:
1. Library function yang harus bekerja dengan beberapa tipe berbeda
swift
// Validation, transformation, atau combination dari beberapa nilai berbeda tipe
func allSatisfy<each T: Validatable>(_ values: repeat each T) -> Bool {
for value in repeat each values {
guard value.validate().isValid else { return false }
}
return true
}
// Penggunaan:
let isFormValid = allSatisfy(username, email, password, phoneNumber)
2. Type-safe tuple operations
swift
// Map atas tuple dengan tipe berbeda
func mapTuple<each Input, each Output>(
_ values: repeat each Input,
transform: (repeat each Input) -> (repeat each Output)
) -> (repeat each Output) {
transform(repeat each values)
}
3. Menggantikan overloading yang repetitif
swift
// SEBELUM: harus tulis banyak overload
func assertEqual<T: Equatable>(_ a: T, _ b: T) { }
func assertAllEqual<T: Equatable>(_ a: T, _ b: T, _ c: T) { }
func assertAllEqual<T: Equatable>(_ a: T, _ b: T, _ c: T, _ d: T) { }
// SESUDAH: satu fungsi dengan pack
func assertAllEqual<each T: Equatable>(_ pairs: repeat (each T, each T)) {
for (a, b) in repeat each pairs {
assert(a == b, "\(a) != \(b)")
}
}
4. Type-safe dependency injection
swift
// Factory yang menginstansiasi banyak tipe dari pack
func makeAll<each T: Service>(types: repeat (each T).Type) -> (repeat each T) {
(repeat (each types).init())
}