סדר החישוב של תנאים
-
זכורני מ-C# שאם רציתי להתנות במשתנה שעלול להיות לא מוגדר/מאותחל, במקום לבדוק:
If (X !=null)ואז לעשות את התנאי שלי, הייתי בודק:
If (X !=null && <התנאי שלי>)כי אם הייתי בודק מיד את התנאי שלי, היתה שגיאה שהמשתנה לא מוגדר.
היוצא מהנ"ל שברגע שהתנאי הראשון לא מתקיים,לא עוברים לתנאי השני (במקרה של &&), אפילו שזה באותה "שורה".
שאלתי:
האם גם בשאילתת מסד נתונים (SQL ו-NoSQL) זה עובד כך? כי אני רוצה לעשות תנאי מתמטי מסובך, אבל יש לי גם תנאי פשוט יותר שגם צריך להתקיים.
השאלה היא האם יש חשיבות לסדר.פורסם במקור בפורום CODE613 ב08/06/2016 22:04 (+03:00)
-
לתכונה שאתה מתאר קוראים short-circuiting (וזה קורה ב&& וב|| הכפולים בC# לאפוקי הבודדים).
את השאלה המעניינת שלך שואלים פה http://stackoverflow.com/q/11219791/1271037, והתשובה היא א. אם מה שמטריד אותך זה ביצועים - בכל מקרה אתה מוגן כי כי תוצאה מוקדמת מפסיקה את חישוב התנאי הנוסף (גם בסדר הפוך, מה שאין בC#).
ב. שאין כל שליטה על מי יבוצע ראשון והאם יבוצע - האופימייזר מחליט מה לבצע קודם (ובזה יש מעלה על C# שכן שם זה לפי הסדר לטוב ולמוטב).
פה יש המחשה ע"י שגיאת חלוקה באפס: https://blogs.msdn.microsoft.com/bartd/2011/03/03/dont-depend-on-expression-short-circuiting-in-t-sql-not-even-with-case/, ואף הוא מביא פתרון איך לסדר את זה מה שבעצם כופה על הSQL סדר.פורסם במקור בפורום CODE613 ב08/06/2016 23:37 (+03:00)
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות