Menu
Coddy logo textTech

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! אומר "אני יודע שזה לא יגרום לזריקת שגיאה". אם זה יקרה, התוכנית שלך תקרוס. השתמש בזה רק כשאתה יכול להוכיח שהקריאה בטוחה; בקוד יומיומי, העדף try? עם ערך חלופי או את המבנה המלא do/catch.

challenge icon

אתגר

קל

הגדירו 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;
// עבור כל part, (try? parseEven(part)) ?? -1
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: Swift אונליין