הוספת טקסט אם קיים טקסט C#
-
שלום יש לי את הקוד הבא
באם קיים ערך בשדה תיאור, הוא מוסיף את המילה "הסבר" וכן עוטף את הכל בסוגריים.((d.Description != null )? "(הסבר: " + d.Description + ")":"")
האם ידוע למישהו על רעיון יותר קצר ונקי??? או שזה הכי קצר שיש.
למה זה לא נראה לי מספיק טוב, בגלל שלכאורה הוא עובר על השדה d.Description פעמיים, פעם אחת בשביל בדיקה, ופעם שניה בשביל להוסיף לטקסט, אני הייתי רוצה שבכל מקרה הוא יעבור עליו רק פעם אחת, אם הוא null הוא ממילא מדלג עליו, ואם הוא מלא, הוא פשוט מוסיף אותו ומוסיף את הטקסט הנדרש.
אז נניח שבשדה פשוט זה לא נורא, אבל מה יהיה אם זאת פונקציה שמשחשבת את המרחק הנוכחי בין כל הכוכבים בשביל החלב עם 26 מימדים לפי תורת המיתרים העדכנית ביותר??? אז יבואו ויאמרו שצריך להכניס את התוצאה למשתנה ואז לעבור עליו, אבל שוב, זה הסימפטום, זה עצמו אומר שהקוד לא מספיק טוב.פורסם במקור בפורום CODE613 ב17/02/2014 18:57 (+02:00)
-
למה זה לא נראה לי מספיק טוב, בגלל שלכאורה הוא עובר על השדה d.Description פעמיים, פעם אחת בשביל בדיקה, ופעם שניה בשביל להוסיף לטקסט, אני הייתי רוצה שבכל מקרה הוא יעבור עליו רק פעם אחת, אם הוא null הוא ממילא מדלג עליו, ואם הוא מלא, הוא פשוט מוסיף אותו ומוסיף את הטקסט הנדרש.
איך זה שייך? הרי מוכרחים לבדוק לפני שמחליטים ? אז יש פה בהכרח שלב בדיקה ושלב השמה.
פורסם במקור בפורום CODE613 ב17/02/2014 19:13 (+02:00)
-
איך זה שייך? הרי מוכרחים לבדוק לפני שמחליטים ? אז יש פה בהכרח שלב בדיקה ושלב השמה.
אני לא מבין אמנם במדעי המחשב, אבל כאשר יש למשל מצביע הוא עובד מהר הרבה יותר מאשר ערך, והסיבה היא כי אין צורך בכתיבת הערך מחדש. אז ברור שיש 2 שלבים בעצם, אולם השאלה היא אם זה עובד כמצביע בשביל שלב ב' שהוא ההשמה, או כערך בפני עצמו. לפי הלוגיקה של הקוד, זה לא פועל כמצביע, ולכן הכרח הוא להשתמש במשתנה חדש, מה שלכאורה המהדר אמור לעשות מאחורי הקלעים אם הוא מזהה שימוש כפול בתוצאה של פונקציה בלי שום שינוי בינתיים. ייתכן באמת שה CLR עושה את זה, אבל לך תבדוק את זה...
פורסם במקור בפורום CODE613 ב17/02/2014 19:20 (+02:00)
-
בדוט נט לפי הידוע לי טיפוסים 'פרימיטיביים' כמו מספרים ומחרוזות לא מועברים כמצביעים אלא כעותקים מה שנקרא by value אבל מערכים ומחלקות מועברים עם מצביע.
בכל מקרה אם Description זה פונקציה של get לא יעזור מצביע כי לעולם לא נדע מה הערך שהפונקציה מחזירה עד שנריץ אותה, אז חייבים משתנה שיקבל את ערך הפונקציה.
האם המהדר כזה חכם שיכניס את הערך המוחזר מהפונקציה למשתנה? זה כבר שייך לאופטמיזציה, שלא כדאי לך לסמוך עליה אלא תעשה את זה מפורש בקוד.פורסם במקור בפורום CODE613 ב17/02/2014 19:24 (+02:00)
-
שלום יש לי את הקוד הבא
באם קיים ערך בשדה תיאור, הוא מוסיף את המילה "הסבר" וכן עוטף את הכל בסוגריים.((d.Description != null )? "(הסבר: " + d.Description + ")":"")
האם ידוע למישהו על רעיון יותר קצר ונקי??? או שזה הכי קצר שיש.
למה זה לא נראה לי מספיק טוב, בגלל שלכאורה הוא עובר על השדה d.Description פעמיים, פעם אחת בשביל בדיקה, ופעם שניה בשביל להוסיף לטקסט, אני הייתי רוצה שבכל מקרה הוא יעבור עליו רק פעם אחת, אם הוא null הוא ממילא מדלג עליו, ואם הוא מלא, הוא פשוט מוסיף אותו ומוסיף את הטקסט הנדרש.
אז נניח שבשדה פשוט זה לא נורא, אבל מה יהיה אם זאת פונקציה שמשחשבת את המרחק הנוכחי בין כל הכוכחים בשביל החלב עם 26 מימדים לפי תורת המיתרים העדכנית ביותר??? אז יבואו ויאמרו שצריך להכניס את התוצאה למשתנה ואז לעבור עליו, אבל שוב, זה הסימפטום, זה עצמו אומר שהקוד לא מספיק טוב.כשתשתמש בפונקציה שמשחשבת את המרחק הנוכחי בין כל הכוכחים בשביל החלב עם 26 מימדים לפי תורת המיתרים העדכנית ביותר, באמת תעשה משתנה ותבדוק אותו, (אני לא רואה בזה בעייה שבקוד לא מספיק טוב....) ובסתם פנייה לשדה בDB, תשתמש ככה :x , לכאורה זה הכי קצר שיש, וגם אם המהדר יעשה את העבודה בשבילך (והוא לא), זה ייקח אותו זמן....
פורסם במקור בפורום CODE613 ב17/02/2014 20:19 (+02:00)
-
כשניגשים למאפיין, במידה ולא אנו כתבנו אותו, יש לקחת בחשבון שזה אפשרי שהוא מבצע פעולה מורכבת מאשר לגשת ולהחזיר ערך משתנה. לדוגמה מאפיין נפח של קוביה יחזיר את הכפל של מימדיו ולא יאחסן זאת בזיכרון, ובמידה ואנו פונים הרבה פעמים (או בצורת כלל: יותר מפעם אחת) למאפיין זה של אותו אובייקט, יותר טוב לשמור את ערכו במשתנה ולגשת אליו שוב ושוב מאשר למאפיין.
אבל מאידך, בכתיבת מאפיינים הכלל המנחה הוא שכשנדרשת פעולה מורכבת להחזרת הערך, לא עושים מאפיין כי אם פונקציה (בתור חיווי למתכנת שזה פעולה יקרה יחסית, ועדיף שהוא ידאג לשמור את הערך במידה והוא צריך אותו שוב).
פורסם במקור בפורום CODE613 ב18/02/2014 10:36 (+02:00)
-
@דוד ל.ט.
כשניגשים למאפיין, במידה ולא אנו כתבנו אותו, יש לקחת בחשבון שזה אפשרי שהוא מבצע פעולה מורכבת מאשר לגשת ולהחזיר ערך משתנה. לדוגמה מאפיין נפח של קוביה יחזיר את הכפל של מימדיו ולא יאחסן זאת בזיכרון, ובמידה ואנו פונים הרבה פעמים (או בצורת כלל: יותר מפעם אחת) למאפיין זה של אותו אובייקט, יותר טוב לשמור את ערכו במשתנה ולגשת אליו שוב ושוב מאשר למאפיין.
אני קצת מעורפל בזה אבל קראתי פעם מאמר שב WPF הם עשו בשביל זאמל מאפיינים מסויימים לפקדים, שנטענים פעם אחת ומשרתים את כל הפקדים הרלוונטיים, כדי לחסוך בזיכרון, מה שהשתמע לי משם זה שמאפיינים בדוט נט אמורים "כן" להיות חכמים ולחסוך במידת האפשר בזיכרון, אבל אולי מדובר על מאפיינים שאינם מריצים קוד אינני יודע, הסברא היא כמ"ש, אבל כנראה שזה קשור לקרביים של CLR
פורסם במקור בפורום CODE613 ב18/02/2014 13:13 (+02:00)
-
ארכיטקט העניינים ממש לא מסובכים כמו שנראה לך...
מאפיין זה סה"כ פונקציה מחזירה ופונקציה מגדירה. כמו כל פונקציה שאנו בונים בתוכנית.
בWPF יש מאפיינים מיוחדים (DP) שחוסכים זיכרון כי למאה אובייקטים יש משתנה אחד (נגיד Width - רוחב אלמנט), יש שיתוף משאבים בין כלל האובייקטים בתוכנית.פורסם במקור בפורום CODE613 ב18/02/2014 14:44 (+02:00)