עבור לתוכן

בעיה בC#

Featured Replies

פורסם

מתכנתים אמיתיים לא מפחדים להשתמש ב-goto.

חוצמזה, במקרה הנ"ל, ובצורה ש-C# בנויה, אני לא רואה שום סיבה שלא להשתמש בזה.

פורסם

אם כבר מדברים על סגנון כתיבה אז הנה דעתי הראשונית:

לי זה נראה מכוער ומיותר לחלוטין, וגם מסבך את הזרימה. goto מ-case X ל-case Y, ואז goto מ-case Y ל-case Z וכו'. ממש ספגטי, ובמקרה שיהיה באג או שמישהו יערוך את הקוד ויוסיף באג, יהיה קשה למצוא אותו.

פורסם

עם שבירה קצת שונה של השורות זה לא הרבה יותר גרוע מ-fall through סטנדרטי ב-C.

(לא שאני חושב ש-fall through הוא רעיון טוב מדי באופן כללי(חוץ מהמקרה של לייבלים מרובים לבלוק קוד אחד)).

פורסם

(חוץ מהמקרה של לייבלים מרובים לבלוק קוד אחד), את זה אפשר לעשות גם ב C#.

פורסם

עם שבירה קצת שונה של השורות זה לא הרבה יותר גרוע מ-fall through סטנדרטי ב-C.

(לא שאני חושב ש-fall through הוא רעיון טוב מדי באופן כללי(חוץ מהמקרה של לייבלים מרובים לבלוק קוד אחד)).

fallthrough, עם כל הבעיות שבו (ויש), עדיין לא מייצר את הבלאגן ב-program flow שמייצר ה-goto במקרה זה. fallthrough תמיד מגיע ל-case הבא. תמיד. ה-goto בתוך case זז קדימה או אחורה, ואם משנים את סדר ה-case-ים אז גם הוא משתנה. התוצאה - קוד שקשה לתחזק ולעקוב אחריו.

break יותר נפוץ מ-fallthrough. לדעתי הבעיה העיקרית ב-fallthrough ב-C זה שהוא ברירת המחדל. אם בשביל לעשות את זה היה צריך לרשום keyword מיוחד, ובברירת המחדל ה-case היה מסתיים כמו היום עם break, זה היה מונע 90 אחוז מהבאגים לדעתי. (מלבד כמובן, אלא שנגרמים עקב שימוש ב-switch במקום משהו חכם יותר).


// example with theoretical implicit break and explicit fallthrough;
switch (foo)
{
case BAR: x = 4; /* implicit break! */

case BOO: x = y; /* implicit break! */

case BEE: printf("dyslectics have more fnu!\n") ; /* implicit break! */

case BAZ: x = 3; fallthrough;
case BLA: y = 3;
printf("wow!\n");
/* implicit break! */

default: x = 0;
};

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים