مراجعة - حاسبة آمنة
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy — الدرس 48 من 56.
التحدي
متوسطقم ببناء آلة حاسبة صغيرة آمنة ضد المدخلات الخاطئة.
قم بتعريف CalcError: Error مع الحالات التالية: parse، و divideByZero، و unknownOp.
قم بتعريف دالة رامية للأخطاء (throwing function) باسم compute(_ a: String, _ op: String, _ b: String) throws -> Int تقوم بما يلي:
- تحليل
aوbكأعداد صحيحة، ورمي.parseإذا فشل أي منهما - رمي
.unknownOpعندما لا يكونopواحداً من+،-،*،/ - رمي
.divideByZeroعندما يكونop == "/"وb == 0 - خلاف ذلك، يتم إرجاع النتيجة كعدد صحيح
اقرأ سطراً واحداً من المدخلات: قائمة مفصولة بفاصلة من تعبيرات a:op:b. قم بمعالجة كل منها بالترتيب باستخدام do/catch. اطبع سطراً واحداً لكل تعبير:
= <n>عند النجاحparse error، أوdiv by zero، أوunknown opلكل حالة خطأ
بعد الأسطر الخاصة بكل تعبير، اطبع سطر ملخص واحد: OK: <n> مع عدد التعبيرات التي نجحت.
للمدخلات 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4، يكون المخرج:
= 8
div by zero
parse error
unknown op
= 8
OK: 2جرّب بنفسك
let exprs = readLine()!.components(separatedBy: ",")
// TODO: enum CalcError; func compute(...) throws -> Int;
// حلقة، do/try، print النتيجة لكل expr؛ finally print 'OK: <n>'
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلمات