מהו אנום בשפות תכנות?

קיצור לספירה, enum סוג משתנה ניתן למצוא ב- C (ANSI, לא את ה- K&R המקורי), C ++ ו- C #. הרעיון הוא שבמקום להשתמש ב- int כדי לייצג מערכת ערכים, משתמשים במקום בסוג עם ערכת ערכים מוגבלת.

לדוגמה, אם אנו משתמשים בצבעי הקשת, שהם

  1. אדום
  2. תפוז
  3. צהוב
  4. ירוק
  5. כחול
  6. אינדיגו
  7. סגול

אם לא היו קיימים פועלים, ייתכן שתשתמש ב- # הגדר (ב- C) או const ב- C ++ / C # כדי לציין ערכים אלה. למשל

יותר מדי אינץ לספור!

הבעיה עם זה היא שיש הרבה יותר אינץ מאשר צבעים. אם לסגול יש ערך 7, ו- תכנית מקצה ערך של 15 למשתנה אז ברור שהוא באג אך יתכן שלא יתגלה כי 15 הוא ערך תקף עבור int.

האנסים להצלה

Enum הוא סוג מוגדר על ידי המשתמש המורכב מקבוצה קבועה בשם המכונה מונים. צבעי הקשת ימופים כך:

כעת באופן פנימי, המהדר ישתמש ב- int כדי להחזיק את אלה ואם לא יסופקו ערכים, אדום יהיה 0, כתום הוא 1 וכו '.

העניין הוא צבעי קשת הוא סוג ורק משתנים אחרים מאותו סוג ניתנים להקצה לזה. קל יותר לעבור C (כלומר פחות מוקפדת), אך C ++ ו- C # לא יאפשרו הקצאה אלא אם תאלצו אותה באמצעות צוות שחקנים.

אתה לא תקוע עם אלה מהדר שנוצרו ערכים, תוכלו להקצות להם קבוע מספר שלם משלכם כמוצג כאן.

instagram viewer

להיות כחול ואינדיגו עם אותו ערך אינו טעות שכן המונים עשויים לכלול מילים נרדפות כמו ארגמן וארגמן.

הבדלי שפה

ב- C, ה- משתנה קדמה למלה הצהרה enum כמו ב

עם זאת, ב- C ++ אין צורך בכך צבעי קשת הוא סוג מובחן שאינו זקוק לקידומת סוג enum.

ב- C # לערכים ניגשים שם הסוג כמו ב

מה הטעם באיבודים?

השימוש באינסומים מעלה את רמת ההפשטה ומאפשר למתכנת לחשוב מה פירוש הערכים ולא לדאוג לאופן אחסנתם וגישהם. זה מקטין את התרחשותם של באגים.

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

  1. אדום - תנועה הופסקה.
  2. שניהם אדום ו צהוב - התנועה עדיין נעצרה, אך האורות עומדים לעבור לירוק.
  3. ירוק - תנועה יכולה לנוע.
  4. צהוב - אזהרה לשינוי הקרוב לאדום.

דוגמא לרמזור

האורות נשלטים על ידי כתיבה לשלוש החלקים התחתונים של בייט שליטה. אלה מוצבים כתבנית קצת למטה בבינארית שם RYG מייצגים את שלושת הסיביות. אם R הוא 1, האור האדום דולק וכו '.

במקרה זה, קל לראות שארבעת המצבים שלעיל מתאימים לערכים 4 = אדום על, 6 = אדום + צהוב שניהם ב, 1 = ירוק על ו- 2 = צהוב ב.

עם פונקציה זו

שימוש בכיתה במקום באינסומים

ב- C ++ ו- C # היינו צריכים ליצור שיעור ואז להעמיס יותר מדי המפעיל | לאפשר OR-ing של סוגים רמזורים.

על ידי שימוש באינומים אנו מונעים בעיות בהקצאת פיסות אחרות לבריט הבקרה של הנורה. יכול להיות שחלק מהקטעים האחרים שולטים בבדיקה עצמית או במתג "ליין ירוק". במקרה כזה, באג המאפשר להגדיר את הפיסות הללו בשימוש רגיל עלול לגרום הרס.

כדי להיות בטוחים, נסתכל את החלקים שנמצאים ב פנסי SetTraffic ()פונקציה כך שלא משנה לאיזה ערך מועברים, רק שלושת הסיביות התחתונות משתנות.

סיכום

לאינומים היתרונות הבאים:

  • הם מגבילים את הערכים שמשתנה enum יכול לקחת.
  • הם מכריחים אותך לחשוב על כל הערכים האפשריים שה- enum יכול לקחת.
  • הם קבועים ולא מספרים, מה שמגדיל את הקריאות של קוד מקור