try? و try!
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy. الدرس 46 من 56.
أحيانًا لا يهمك أي خطأ طرحته دالة، بل تريد فقط نتيجة أو قيمة بديلة. توفر Swift شكلين مختصرين.
try? يحوّل أي خطأ يتم طرحه إلى nil. وتكون النتيجة قيمة Optional من نوع القيمة التي تُرجعها الدالة:
enum E: Error { case nope }
func risky() throws -> Int { throw E.nope }
let result = try? risky() // nil
let safe = (try? risky()) ?? 0 // 0استخدمه مع ?? لتعيين قيمة افتراضية مضمنة. هذه هي أقصر صيغة لعبارة «استدعِ هذا الشيء، وأعطني قيمة في كلتا الحالتين».
يقول try! «أعرف أن هذا لن يؤدي إلى throw». وإذا حدث ذلك، فسيتعطل برنامجك. استخدمه فقط عندما تتمكن من إثبات أن الاستدعاء آمن؛ وفي الشيفرة اليومية، فضّل try? مع بديل احتياطي أو البنية الكاملة do/catch.
التحدي
سهلعرّف NumError: Error مع حالة واحدة هي bad. عرّف دالة parseEven(_ s: String) throws -> Int تُلقي خطأ بحيث:
- تُلقي
.badعندما يتعذّر تحليلsإلىInt، أو عندما تكون القيمة المُحلَّلة فردية - وإلا تُعيد العدد الصحيح المُحلَّل
اقرأ سطرًا واحدًا من الإدخال: قائمة سلاسل مفصولة بفواصل. لكل سلسلة، استخدم try? متبوعةً بـ ?? -1 للحصول إما على العدد الصحيح الزوجي المُحلَّل أو على -1.
اطبع، بالترتيب، الأعداد الصحيحة الناتجة بعد دمجها باستخدام ,. ثم اطبع في سطر ثانٍ عدد القيم التي عادت على شكل -1.
بالنسبة إلى الإدخال 4,7,abc,8,11,2، يكون الناتج:
4,-1,-1,8,-1,2
3جرّب بنفسك
let parts = readLine()!.components(separatedBy: ",")
// TODO: enum NumError; func parseEven(_:) throws -> Int;
// لكل جزء، (try? parseEven(part)) ?? -1
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلماتتدرّب بنفسك: Playground لـ Swift