map و filter الكسولان
سلّسل التحويلات الكسولة دون مصفوفات وسيطة.
map و filter الكسولان درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
المصفوفات الوسيطة
تخصّص التسلسلات الفورية مصفوفة جديدة بين كل خطوتين. فالتعبير filter().map() على مصفوفة كبيرة ينشئ مصفوفتين كاملتين، رغم أنكم قد تحتاجون إلى بضعة عناصر فقط.
التخصيص الفوري
يُنشئ هذا الكود مصفوفتين وسيطتين:
let nums = Array(1...6)
let result = nums
.filter { $0 % 2 == 0 } // builds [2, 4, 6]
.map { $0 * 10 } // builds [20, 40, 60]
print(result) // [20, 40, 60]دمج الخطوات باستخدام lazy
تقوم السلسلة الكسولة بدمج العمليات: يمر كل عنصر عبر جميع الخطوات قبل بدء معالجة العنصر التالي، ولذلك لا تُخصَّص أي مصفوفة وسيطة.
سلسلة كسولة
المنطق نفسه، ومن دون أي مصفوفات وسيطة:
let nums = Array(1...6)
let result = nums.lazy
.filter { $0 % 2 == 0 }
.map { $0 * 10 }
print(Array(result)) // [20, 40, 60]تدفق العناصر واحدًا تلو الآخر
يُظهر التتبع تنفيذًا متداخلًا بدلًا من التنفيذ مرحلةً بعد مرحلة:
let out = [1, 2, 3].lazy
.filter { n -> Bool in print("filter \(n)"); return n > 1 }
.map { n -> Int in print("map \(n)"); return n }
print(Array(out)) // filter 1, filter 2, map 2, filter 3, map 3 -> [2, 3]التوقف المبكر يوفر العمل
اجمعوا بين سلسلة كسولة وfirst(where:) للتوقف بمجرد أن يصبح ذلك ممكنًا:
let nums = Array(1...1_000_000)
let hit = nums.lazy.map { $0 + 1 }.first { $0 > 5 }
print(hit!) // 6 -- only a handful of elements processedاستخدام lazy مع prefix
اكتفوا بأولى النتائج القليلة لتحويل مكلف:
let squares = (1...).lazy.map { $0 * $0 }
print(Array(squares.prefix(5))) // [1, 4, 9, 16, 25]عدّ العمل الذي تم تخطيه
يثبت العداد عدد العناصر القليل التي يتم تنفيذها:
var transforms = 0
let result = Array(1...100).lazy
.map { (n: Int) -> Int in transforms += 1; return n * 2 }
.prefix(3)
_ = Array(result)
print(transforms) // 3, not 100compactMap الكسول
لدى compactMap صيغة كسولة أيضًا:
let raw = ["1", "x", "3", "y", "5"]
let first = raw.lazy.compactMap { Int($0) }.first
print(first!) // 1مزج خطوات متعددة
تظل مسارات المعالجة الطويلة والمدمجة خالية من التخصيصات حتى تحويلها إلى قيمة فعلية:
let r = Array(1...20).lazy
.filter { $0 % 2 == 0 }
.map { $0 * $0 }
.filter { $0 > 50 }
print(Array(r)) // [64, 100, 144, 196, 256, 324, 400]متى يكون الدمج مفيدًا أكثر
يكون الدمج الكسول مفيدًا عندما يكون المصدر كبيرًا وتحتفظون بجزء من النتيجة فقط. أما إذا استهلكتم النتيجة بأكملها في مصفوفة على أي حال، فتقل الفائدة وقد يكون التنفيذ الفوري أوضح.
let big = Array(1...10_000)
let sample = Array(big.lazy.filter { $0 % 1000 == 0 })
print(sample) // [1000, 2000, ... 10000]اختبار سريع
ما الذي تتجنبه سلسلة filter().map() الكسولة، بينما تنشئه السلسلة الفورية؟
مراجعة
لقد تعلمتم السلاسل الكسولة:
- تخصّص السلاسل الفورية مصفوفة بين كل خطوة
- تدمج
.lazyالخطوات عنصرًا بعد عنصر، من دون مصفوفات وسيطة - تتوافق تمامًا مع
first(where:)وprefixللتوقف المبكر - تتحقق أكبر فائدة عند وجود مصدر كبير واستهلاك جزء من النتيجة
التالي: المقارنة بين التنفيذ الكسول والفوري.
تعلم Swift مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 122
- الدروس
- 409
الأسئلة الشائعة
هل درس «map و filter الكسولان» مجاني؟
نعم — نص درس «map و filter الكسولان» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «map و filter الكسولان»؟
سلّسل التحويلات الكسولة دون مصفوفات وسيطة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «map و filter الكسولان»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الخاصية lazy
- map و filter الكسولان
- مفاضلات التنفيذ الكسول والفوري
- إنشاء تسلسلات كسولة مخصصة