C# - מה מחזירים מפונקציה שאתה רוצה לקבל ממנו תוצאה + שגיאה במידה ויש
-
קורה המון שאני רוצה לקבל תוצאה בוליאנית מפונקציה של הצליח/לא הצליח. ובמידה ולא הצליח אני רוצה לקבל מידע על השגיאה. איך מקובל לעשות דבר כזה ב-#C בצורה הכי נקייה?
במקרה הספציפי שנתקלתי בו עכשיו יש לי handler לבקשת HTTP. ה-handler יש לו את ה-
HttpListenerResponse res
ומשיב ב-OK 200 במקרה של הצלחה ובקוד שגיאה ותיאור השגיאה במקרה של שגיאה.רציתי עכשיו להוציא את הטיפול לכמה פונקציות נפרדות כי זה התחיל להיות מסובך מדי להחזיק הכל בפונקציה אחת. לא נראה לי שזה נכון להעביר את ה-
res
לכל פוקנציה שמטפלת בנושא, לכן אני צריך שכל פונקציה תחזיר אינדיקציה של הצלחה/כישלון, וכן פירוט על הכישלון. בעדיפות שהפירוט יהיה סטרינג שאוכל להחזיר ישירות לקליינט מבלי צורך ליצור switch ענק לטפל בכל סוג שגיאה.(אפשר תשובות על שפות אחרות גם כן. אני נתקל בצורך כזה כל הזמן)
האמת שנראה לי שאני יודע מה התשובה הנכונה. ליצור עוד קלאס (אוף, צריך להתרגל )... אבל האם יש משהו יותר נוח?
חשבתי גם על האפשרות לזרוק חריגה במקרה של שגיאה, אבל אני לא אוהב את הרעיון.
-
@yossiz אם אתה רוצה להיות תקני, אז הדרך הנכונה היא לזרוק חריגה במקרה של שגיאה. זה לא בדיעבד וטריקי אלא זה דרך המלך והמחלקה Excption ויורשותיה ערוכים לתרחישים האלו בדיוק עם Message ואפילו לוקליזציה (וגם אתה יכול ליצור מחלקה יורשת שלו אם הוא לא מספק).
אם אתה רוצה לתכנת באופן שונה ממה שתוכננה השפה (תרגיש בנח)
אז יש לי מאה פתרונות בשבילך, למשל כמו בJS תעשה פונקציה שמחזירה כמה ערכים (אם אתה לא אוהב קלאס תוכל להשתמש בTuple או בValueTuple שזה עוד יותר שקוף ואלגנטי). -
@dovid אמר בC# - מה מחזירים מפונקציה שאתה רוצה לקבל ממנו תוצאה + שגיאה במידה ויש:
זה לא בדיעבד וטריקי אלא זה דרך המלך והמחלקה Excption ויורשותיה ערוכים לתרחישים האלו בדיוק עם Message ואפילו לוקליזציה
קיבלתי.
יש לי סלידה מכתיבת בלוקים של try/catch על כל דבר. נו, נתרגל. (מן הסתם זה לא מצריך יותר מ-try/catch אחד וכל הסלידה לא הגיוני.