المكرّرات المخصّصة ونصائح الأداء
طبّق مكرّرات وتسلسلات مخصّصة وحافظ على كفاءتها: سلوك المرور لمرة واحدة، وتجنّب عمليات التخصيص الإضافية، واستخدم العروض الكسولة.
المكرّرات المخصّصة ونصائح الأداء درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 3 دروس في المجموع.
المكررات المخصصة 101
أنشئ IteratorProtocol وSequence الخاصين بك. تكون المكررات عادةً للمرور مرة واحدة فقط، ويجب أن تُرجع nil عند النهاية.
مثال على IteratorProtocol
نفّذ next() لإنتاج عنصر واحد في كل استدعاء وتحديث الحالة؛ وأرجع nil عند الانتهاء.
struct CountdownIterator: IteratorProtocol {
var current: Int
mutating func next() -> Int? {
guard current >= 0 else { return nil }
defer { current -= 1 } // advance state
return current
}
}
var it = CountdownIterator(current: 3)
while let n = it.next() { print(n, terminator: " ") } // 3 2 1 0
print("")غلاف Sequence
يوفّر Sequence الدالة makeIterator(). ويمكنك الآن استخدام for-in وmap وfilter وغير ذلك.
struct Countdown: Sequence {
let start: Int
func makeIterator() -> CountdownIterator {
CountdownIterator(current: start)
}
}
for n in Countdown(start: 5) {
print(n, terminator: " ") // 5 4 3 2 1 0
}
print("")اختصار AnyIterator
يتيح لك AnyIterator/AnySequence إنشاء مكررات بسرعة باستخدام closure، وهو مفيد للمولّدات خفيفة الوزن.
// Build an iterator from a closure
var i = 1
let anyIt = AnyIterator<Int> {
guard i <= 3 else { return nil }
defer { i += 1 }
return i * 10
}
let numbers = AnySequence(anyIt)
for x in numbers { print(x, terminator: " ") } // 10 20 30
print("")استخدم lazy لتوفير العمل
فضّل .lazy عندما تحتاج إلى جزء من المسار فقط؛ فهو يوفر عمليات التخصيص والعمل.
let big = Array(1...10_000)
// Eager: builds two intermediate arrays
let eager = big.map { $0 * 2 }.filter { $0 % 3 == 0 }
// Lazy: no temporaries; work is done during collection
let lazyView = big.lazy.map { $0 * 2 }.filter { $0 % 3 == 0 }
let result = Array(lazyView.prefix(5)) // only first 5 actually computed
print(result)نصائح للأداء
نصائح:
- أبقِ المكررات بسيطة: حدّث الحالة وأرجع
nilعند النهاية. - استخدم .lazy لتجنب المصفوفات الوسيطة.
- احجز سعة للنتائج عندما تعرف الحجم (
res.reserveCapacity(n)). - فضّل خوارزميات Collection عند الحاجة إلى المرور المتعدد أو الفهارس.
قاعدة المكرّر
تحقق سريع: ماذا يجب أن تفعل next() عند نهاية التكرار؟
مراجعة
مراجعة: اكتب IteratorProtocol بسيطاً، وغلّفه داخل Sequence، وحافظ على كفاءة المسارات باستخدام .lazy والتخصيص المسبق متى أمكن.
الأسئلة الشائعة
هل درس «المكرّرات المخصّصة ونصائح الأداء» مجاني؟
نعم — نص درس «المكرّرات المخصّصة ونصائح الأداء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 3 دروس في المجموع.
ماذا ستتعلم في «المكرّرات المخصّصة ونصائح الأداء»؟
طبّق مكرّرات وتسلسلات مخصّصة وحافظ على كفاءتها: سلوك المرور لمرة واحدة، وتجنّب عمليات التخصيص الإضافية، واستخدم العروض الكسولة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «المكرّرات المخصّصة ونصائح الأداء»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- هرميات Sequence/Collection
- Map/Filter/Reduce والتسلسلات الكسولة
- المكرّرات المخصّصة ونصائح الأداء