0Pricing
Swift Academy · درس

معلمات In-Out والقيم المرجعة المتعددة

غيّر الوسائط باستخدام inout وأعد قيمًا متعددة عبر tuples

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

مرحبًا

تعمل دوال Swift عادةً على نسخ من القيم. تتيح معلمات `inout` للدالة تعديل متغير المتصل مباشرةً. وتتيح tuples للدوال إرجاع عدة قيم دفعة واحدة.

الكلمة المفتاحية inout

ضع علامة `inout` على المعلمة لتعديل القيمة الأصلية: ```swift func doubleInPlace(_ value: inout Int) { value *= 2 } var x = 5 doubleInPlace(&x) print(x) // 10 ``` تشير البادئة `&` عند موضع الاستدعاء إلى إمكانية تعديل المتغير.

inout مع البُنى

```swift struct Point { var x: Double; var y: Double } func translate(_ p: inout Point, dx: Double, dy: Double) { p.x += dx p.y += dy } var origin = Point(x: 0, y: 0) translate(&origin, dx: 3.0, dy: 4.0) // origin is now (3.0, 4.0) ```

قيود inout

• لا يمكن تمرير الثوابت (`let`) كمعلمات `inout` • لا يمكن تمرير القيم الحرفية كمعلمات `inout` • يمكن أن تكون الفهارس والخصائص المحسوبة معلمات `inout` إذا كانت لها أدوات ضبط ```swift let c = 5 doubleInPlace(&c) // ❌ cannot pass let as inout ```

إرجاع قيم متعددة باستخدام Tuples

أعِد عدة قيم من خلال وضعها داخل tuple: ```swift func minMax(of array: [Int]) -> (min: Int, max: Int) { (array.min()!, array.max()!) } let result = minMax(of: [3, 1, 7, 2]) print(result.min, result.max) // 1 7 ```

عناصر Tuple المسماة مقابل غير المسماة

تجعل العناصر المسماة tuples موضحةً لمعناها ذاتيًا: ```swift let named: (width: Int, height: Int) = (1920, 1080) print(named.width) // 1920 let unnamed = (1920, 1080) print(unnamed.0) // 1920 ``` فضّل استخدام الأسماء في tuples التي تُرجعها الدوال.

تفكيك القيم المُعادة من نوع Tuple

فكّك القيمة المُعادة من نوع tuple إلى عدة متغيرات: ```swift let (minimum, maximum) = minMax(of: [5, 3, 8]) print(minimum) // 3 print(maximum) // 8 ``` استخدم `_` لتجاهل العناصر غير المطلوبة: `let (minimum, _) = minMax(of: arr)`.

القيم المُعادة الاختيارية من نوع Tuple

أعِد nil في حالات الفشل: ```swift func parse(_ s: String) -> (Int, Int)? { let parts = s.split(separator: ",") guard parts.count == 2, let a = Int(parts[0]), let b = Int(parts[1]) else { return nil } return (a, b) } ```

الدالة swap مع inout

التطبيق التقليدي للتبديل باستخدام inout: ```swift func swap(_ a: inout T, _ b: inout T) { let temp = a a = b b = temp } var m = 1, n = 2 swap(&m, &n) print(m, n) // 2 1 ``` توفر مكتبة Swift القياسية الدالة `swap(_:_:)` بالفعل — لذلك لا حاجة إلى كتابة دالتك الخاصة.

متى تستخدم inout بدلًا من الإرجاع

فضّل إرجاع قيمة جديدة بدلًا من تعديل قيمة باستخدام inout: ```swift // Prefer: func normalised(_ v: SIMD3) -> SIMD3 { v / v.magnitude } // Use inout only when mutation is expected API contract, e.g. algorithms on large arrays func sort(_ arr: inout [Int]) { arr.sort() } ```

تحقق سريع

ما البادئة المطلوبة في موضع استدعاء الدالة عند تمرير متغير إلى معلمة `inout`؟

مراجعة

أهم النقاط: • تتيح `inout` للدوال تعديل متغيرات المستدعي؛ مرّر القيمة باستخدام `&` • لا يمكن تمرير الثوابت المعرّفة باستخدام `let` أو القيم الحرفية إلى `inout` • تُعيد Tuples عدة قيم بطريقة مرتبة؛ سمِّ العناصر لتوضيحها • فكّك Tuples: `let (a, b) = f()` • فضّل إرجاع قيم جديدة، واستخدم inout فقط عندما يكون التعديل جزءًا من عقد واجهة API التالي: الدوال باعتبارها قيمًا من الدرجة الأولى.

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

هل درس «معلمات In-Out والقيم المرجعة المتعددة» مجاني؟

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

ماذا ستتعلم في «معلمات In-Out والقيم المرجعة المتعددة»؟

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

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

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

كم من الوقت يستغرق درس «معلمات In-Out والقيم المرجعة المتعددة»؟

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

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

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

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

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