Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

بناء سلاسل العمليات

جزء من قسم المنطق والتدفق في رحلة Swift على Coddy — الدرس 31 من 56.

إن الطرق التي جمعتها، map، و filter، و reduce، و compactMap، و flatMap، و sorted(by:)، هي أدوات Swift اليومية. الشيفرة البرمجية الحقيقية تربطهم معاً.

struct Order {
    let item: String
    let qty: Int
}
let orders = [Order(item: "apple", qty: 3), Order(item: "bread", qty: 0), Order(item: "milk", qty: 5)]
let names = orders
    .filter { $0.qty > 0 }
    .sorted { $0.qty > $1.qty }
    .map { $0.item }
print(names)                  // ["milk", "apple"]

اقرأ السلسلة من الأعلى إلى الأسفل: احتفظ بالطلبات غير الفارغة، ورتبها حسب الكمية تنازلياً، ثم احتفظ بالأسماء فقط.

تنجح خطوط المعالجة (Pipelines) عندما يكون لكل خطوة غرض واحد. إذا وجدت نفسك تقوم بأمرين في وقت واحد داخل الـ closure (الـ mapping و الـ filtering)، فقم بتقسيمهما إلى خطوتين. تظل السلسلة قابلة للقراءة مع نموها.

challenge icon

التحدي

متوسط

اقرأ سطراً واحداً من المدخلات: قائمة مفصولة بفاصلة من مدخلات name:price:qty. بعض المدخلات غير صحيحة ويجب تخطيها: أي مدخل لا يكون فيه السعر (price) أو الكمية (quantity) عدداً صحيحاً صالحاً.

قم ببناء مسار (pipeline) ينتج سطراً واحداً لكل مدخل صالح حيث qty > 0، مرتبة حسب المجموع (price * qty) تنازلياً، بالتنسيق التالي:

<name>: <total>

بعد الأسطر الخاصة بكل عنصر، اطبع سطر ملخص واحداً: Sum: <n> مع المجموع الكلي.

للمدخلات apple:3:2,bread:bad:1,milk:4:5,cheese:8:0,salt:2:7، يكون المخرج:

milk: 20
salt: 14
apple: 6
Sum: 40

ورقة مرجعية

يؤدي تسلسل الدوال من الرتبة العليا (higher-order functions) إلى إنشاء خطوط معالجة (pipelines) سهلة القراءة حيث يكون لكل خطوة غرض واحد:

let names = orders
    .filter { $0.qty > 0 }
    .sorted { $0.qty > $1.qty }
    .map { $0.item }

طرق خطوط المعالجة الشائعة: filtercompactMapsorted(by:)mapreduce. إذا كان الإغلاق (closure) يقوم بأمرين في وقت واحد (على سبيل المثال: التحويل و التصفية)، فقم بتقسيمه إلى خطوتين.

جرّب بنفسك

let entries = readLine()!.components(separatedBy: ",")

// TODO: سلسلة عمليات باستخدام compactMap (parse)، و filter (qty > 0)،
// sorted (total desc)، و map (format)؛ طباعة الأسطر + Sum
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق والتدفق