איך משתמשים נכון ב- Try Catch ?

לאחרונה יצא לי לעבור על קוד שכלל הרבה מקטעי try catch. האמת, יותר נכון להגיד שהם היו בכל מקום בקוד ולא מצאתי מקום בתוכנה שלא היה עטוף ב-try catch. 

האמת, שזה פחות הפריע לי. הבעיה האמיתית שלי היא שמה שפחות היה בקוד זה בדיקות: לא בדקו אם משתנים הם null לפני שהשתמשו בהם, לא בדקו עם המפתח קיים ב-Dictionary לפני שניסו למשוך אותו ועוד ועוד. ז"א, שכל הבדיקות האלו נחסכו מהכותב מכיוון שהוא פשוט עטף הכל ב-try ולא היה לו צורך להתעסק בכך.

 

אז מה הבעיה עם זה?

1. ביצועים - כל פעם שיש זריקת שגיאה בקוד זה מוריד את הביצועים של המערכת.

2. לפעמים אין באמת שליטה ומידע על השגיאה - אם יש לכם מקטע קוד ארוך ובתוכו תקבלו פתאום שגיאה של "object reference not set to an instance of an object" (שזה בדר"כ מה שקורה אם מנסים לעבוד עם אובייקט שהוא null) אז זה לא ממש עוזר לכם כי השגיאה יכולה להגיע מהרבה מקומות כך שלא באמת תוכלו לדעת מה גרם לשגיאה אלא אם תרוצו על הקוד ב-debug (שגם זה לא מצב סימפטי כאשר הקוד ארוך).

 

יש מקרים שבהם אי אפשר להימנע בהם משימוש ב-try catch, לדוגמא כאשר פונים ל-API חיצוני או בעבודה מול SQL, אך כאשר אפשר להימנע ממנו כגורם שמאפשר לתוכנה לעבוד אז זה המצב האידיאלי. התוכנה לא אמורה לעבוד בצורה שבה היא רצה כל עוד היא לא נתקלת בשגיאה ואז כאשר היא נתקלת בה להתעסק במזעור נזקים, אלא צריך להימנע מהשגיאה עוד קודם לכן ככל הניתן וגם כאשר מקבלים שגיאה צריך לדעת איך להתמודד איתה ואולי לאפשר לתוכנה להמשיך לעבוד בדרכים אחרות או לפחות להחזיר שגיאה שמסבירה בצורה טובה יותר מה גרם לה.

 

לסיכום, כעיקרון אין בעיה עם שימוש ב-try catch, כל עוד זה לא מונע ממכם לעשות את הבדיקות הרלוונטיות בקוד על מנת להימנע מזריקת השגיאות.

שגיאות זה עסק יקר, תמנעו מהם!

הוסף תגובה