0Pricing
Swift Academy · درس

الدوال كقيم من الدرجة الأولى

خزّن الدوال في متغيرات، ومرّرها كوسائط، وأعدها من دوال أخرى

الدوال كقيم من الدرجة الأولى درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

مرحبًا

في Swift، تُعدّ الدوال قيمًا من الدرجة الأولى — إذ يمكنك تخزينها في متغيرات، وتمريرها كوسائط، وإرجاعها من دوال أخرى، وتضمينها داخل دوال أخرى.

أنواع الدوال

لكل دالة نوع تحدده أنواع معلماتها وقيمة الإرجاع الخاصة بها: ```swift func add(_ a: Int, _ b: Int) -> Int { a + b } let operation: (Int, Int) -> Int = add print(operation(3, 4)) // 7 ``` نوع `add` هو `(Int, Int) -> Int`.

تمرير الدوال كوسائط

```swift func apply(_ f: (Int) -> Int, to value: Int) -> Int { f(value) } func double(_ n: Int) -> Int { n * 2 } print(apply(double, to: 5)) // 10 ``` هذا هو الأساس لدوال higher-order مثل `map` و`filter`.

إرجاع الدوال

```swift func multiplier(by factor: Int) -> (Int) -> Int { return { value in value * factor } } let triple = multiplier(by: 3) print(triple(7)) // 21 ``` يؤدي إرجاع دالة إلى إنشاء *closure* تلتقط `factor`.

الدوال المتداخلة

يمكن تعريف الدوال داخل دوال أخرى: ```swift func chooseStep(goForward: Bool) -> (Int) -> Int { func forward(_ n: Int) -> Int { n + 1 } func backward(_ n: Int) -> Int { n - 1 } return goForward ? forward : backward } let step = chooseStep(goForward: true) print(step(3)) // 4 ```

اختصار باستخدام Closures

يمكن للقيم الحرفية المجهولة من نوع closure أن تحل محل أي نوع دالة: ```swift let square: (Int) -> Int = { $0 * $0 } print(square(6)) // 36 let doubled = [1, 2, 3].map { $0 * 2 } // [2, 4, 6] ``` يشير `$0` إلى الوسيط الأول في صيغة closure المختصرة.

تخزين الدوال في المجموعات

```swift let operations: [(Int, Int) -> Int] = [ { $0 + $1 }, { $0 - $1 }, { $0 * $1 } ] for op in operations { print(op(10, 3)) } // 13, 7, 30 ```

صيغة closure اللاحقة

عندما يكون الوسيط الأخير دالة، يمكنك كتابته خارج الأقواس: ```swift func withLogging(_ label: String, action: () -> Void) { print("Start: \(label)") action() print("End: \(label)") } withLogging("fetch") { fetchData() } ```

هوية الدوال وتساويها

لا يمكنك مقارنة قيمتي دالتين باستخدام `==` في Swift — فالدوال لا تطابق البروتوكول Equatable: ```swift // let same = add == add ❌ ``` إذا احتجت إلى المقارنة، فغلّف الدالة داخل بنية أو فئة تطابق البروتوكول Equatable.

نمط Currying

حاكِ أسلوب currying بإرجاع دوال مطبّق عليها جزء من الوسائط: ```swift func add(_ a: Int) -> (Int) -> Int { { b in a + b } } let add5 = add(5) print(add5(3)) // 8 print(add5(10)) // 15 ``` يفيد ذلك في إنشاء دوال متخصصة انطلاقًا من دوال عامة.

تحقق سريع

ما نوع الدالة التي تستقبل قيمتي `Int` وتُعيد قيمة `Int`؟

مراجعة

أهم النقاط: • للدوال أنواع مثل `(ParamTypes) -> ReturnType` • يمكنك تخزين الدوال في متغيرات، وتمريرها كوسائط، وإرجاعها من دوال أخرى • تمثل Closures (`{ }`) قيم دوال مجهولة • تجعل صيغة closure اللاحقة مواضع استدعاء الدوال أكثر وضوحًا • يؤدي إرجاع الدوال من دوال أخرى إلى إنشاء closures تلتقط المتغيرات التالي: درس التسلسل الاختياري وإلغاء التغليف.

الأسئلة الشائعة

هل درس «الدوال كقيم من الدرجة الأولى» مجاني؟

نعم — نص درس «الدوال كقيم من الدرجة الأولى» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «الدوال كقيم من الدرجة الأولى»؟

خزّن الدوال في متغيرات، ومرّرها كوسائط، وأعدها من دوال أخرى تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «الدوال كقيم من الدرجة الأولى»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تسميات الوسائط وأسماء المعلمات
  2. المعلمات الافتراضية والمتغيرة
  3. معلمات In-Out والقيم المرجعة المتعددة
  4. الدوال كقيم من الدرجة الأولى
← العودة إلى Swift Academy