ראסט - פונקציית main נקיה יותר עם Result



כחלק מהמסע שלנו לניהול שגיאות נכון נפל לנו האסימון שלהשתמש ב unwrap או expect יכול להיות רעיון לא כל כך טוב ועלול להביא לסיום מיידי של הפרוסס שלנו במקרים שאולי לא התכוונו אליהם. אז השתמשנו ב clippy deny unwrap used שגרם לקומפילציה לא לעבור במידה ונכנס unwrap לקוד.

המקום היחיד בו היינו צריכים להשאיר unwrap היה בסט הוולידציות ההתחלתי בעליה של הפרוסס שלנו, בפונקציית ה main. לדוגמה - בניסיון למשוך את הקונפיגורציה הראשונית בעליה - אם נכשלנו מסיבה כלשהי נהרוג את הפרוסס.

לימים פונקציית ה main הכילה יותר ויותר ולידציות כאלה ובנוסף גם התחלנו להרוג את הפרוסס שלנו כחלק מתהליך פונקציונאלי תקין במקרים מסויימים (exit code).

בפוסט אנסה להציג את האלטרנטיבה שבחרנו לטיפול בשגיאות ב main באמצעות unwrap

איך נראה main סטנדרטי

הפריע לי בעין לראות כל כך הרבה unwrap וחיפשתי דרך נקייה יותר לנהל את השגיאות שעלולות לצוץ ב main. באחת מעשרות השיחות הטכניות שלי על ראסט עם המנטור שלי, הוא העלה את האופציה פשוט להחזיר result מפונקציית ה main וככה אם תוחזר שגיאה ב main היא תפועפע שכבה אחת והתכנית תסגר עם אותה הודעת השגיאה (ממש עם unwrap).

main שמחזיר result


דבר קטן נוסף - main לא חייב להחזיר "()" או unit בהגה המקצועית. במקרים בהם הפרוסס שלנו יכול לצאת במגוון exit codes שונים, נוכל להגדיר ש main יחזיר std::process::ExitCode .


סיכום

קריאות ל unwrap מתוך פונקציית ה main הן לא דבר שגוי כאשר אנחנו באמת רוצים לקרוס בהינתן שגיאה. הפוסט מציע דרך אלטרנטיבית שאני מצאתי ״נקייה״ יותר - החזרת Result מפונקציית ה main ואפשרות לפעפע שגיאות באמצעות ? כמו שאנחנו רגילים לראות בפונקציות הרגילות שלנו.

תגובות

פוסטים פופולריים מהבלוג הזה

מהם קבצי DLL ואיך להשתמש בהם?

מדריך C# | שימוש ב LINQ

תכנות מונחה עצמים | Dependency Inversion Principle