אופרטור (תכנות)
מתוך ויקיפדיה, האנציקלופדיה החופשית
בשפות תכנות, אופרטור (בעברית: מפעיל, סימן פעולה) הוא פונקציה הפועלת על אופרנד (יחידת נתונים שמתבצעת עליה פעולה) או מספר אופרנדים. פונקציה זו מופיעה כתו או אוסף תוים (מילה) הנכתבים בסמוך לאופרנד או בין שני אופרנדים. למעשה, האופרטור בשפות תכנות מקביל לאופרטור המתמטי.
אופרטורים רבים דומים בשפות התכנות השונות (למשל אופרטורים של פעולות חשבון), אחרים שונים משפה לשפה (כגון אופרטור "השמה") וחלקם קיימים רק בשפות מסוימות. מכלול האופרטורים משפיע על מידת גמישותה וחוזקה של השפה, משום שאופרטורים הם אבן יסוד בכל שפת תכנות.
תוכן עניינים |
[עריכה] תחביר
האופרטורים מתחלקים לשני סוגים עיקריים:
- אופרטור אונרי הוא אופרטור הפועל על אופרנד יחיד, כגון A!, כאשר סימן הקריאה מייצג שקר בוליאני.
- אופרטור בינארי הוא אופרטור הפועל על שני אופרנדים, כגון A*B. במקרה זה, לאופרטור הכפל שני אופרנדים: A ו-B.
אופרטור יכול להיות גם אונרי וגם בינארי. כך, לדוגמה, בפעולה A-B סימן המינוס משתמש בשני האופרנדים בדומה לפעולת הכפל, אולם ניתן להשתמש באופרטור המינוס בפעולה על אופרנד יחיד: C-.
בסביבות מסוימות קיימים גם אופרטורים טרינאריים, שפועלים על שלושה אופרנדים.
[עריכה] לוגיקה פנימית של האופרטור
למעשה יש להתייחס לאופרטור כאל פונקציה ששמה הוא סימן מסוים, המקבלת ערך, מבצעת בו פעולה ומחזירה אותו. באופן זה יש להתייחס לאופרנד השמאלי כאל מחלקת האב המכילה את האופרטור ביחד עם פונקציות חבר אחרות, ואילו האופרנד הימני הוא הפרמטר של פונקציית האופרטור. למשל, ניתן להתייחס אל האופרטור + בהקשר של מספר שלם מסוג Integer באופן הבא על ידי הפסידו-קוד הבא:
X+Y X.+(Y)
כאשר X מוגדר כמחלקה של מספר שלם, הנקודה מצביעה על פונקציות ומאפיינים, ה+ הינו שם של פונקציית חבר, והאופרטור השני הינו למעשה פרמטר. כאשר האופרטור + מוגדר מבחינה פנימית באופן הבא:
class integer integer x integer operator+(integer y) return x+y end operator end Class
כאשר המחלקה מסוג מספר שלם מכילה בתוכה פונקציה ששמה +, שמקבלת כפרמטר מספר שלם ומחזירה מספר שלם לאחר פעולת החיבור.
למעשה לכל סוג טיפוס יש את משפחת האופרטורים שלו המוגדרים לבצע פעולות שונות באותו הטיפוס בלבד. ולכן כאשר מוגדר משתנה בתוכנה, המערכת יודעת אלו אופרטורים הם פונקציות חבר שלו ובהתאם לכך יודעת כיצד להפעילן כאשר הן נכתבות מימין לו. ולכן אם נכתוב מימין לטיפוס מסוג מסוים אופרטור שלא הוגדר בעבורו, או משמאל לאופרנד מסוים אופרטור שהפרמטר שלו שונה, המערכת תחזיר שגיאת הידור, מכיוון שהיא לא תדע כיצד צריך להתייחס אליו, או מכיוון שאין תאימות בין הסוגים השונים.
בשל העובדה כי האופרטור השמאלי הוא משמש כמופע של הטיפוס והימני משמש כפרמטר, האופרטור השמאלי יגביל את הערך של הפעולה לפי הטיפוס שלו. כך למשל אם האופרטור השמאלי הינו מספר שלם והימני הינו מספר נקודה צפה, הערך יחתך או יעוגל כאשר תתבצע פעולה חשבונית בין שני האופרטורים, אף אם הערך יושם לתוך מספר של נקודה צפה.
[עריכה] סוגי אופרטורים
ניתן לחלק את האופרטורים לפי תפקודם:
[עריכה] אופרטורים מתמטיים
אופרטורים מתמטיים הם ככל הנראה האופרטורים הנפוצים ביותר בשל הכללת אופרטורי ארבע פעולות החשבון: כפל (*), חילוק (/), חיבור (+) וחיסור (-). לרוב נכתבים אופרטורים אלו בכתיב המקובל במתמטיקה. אופרטורים מתמטיים שימושיים נוספים הם העלאה בחזקה, שארית החילוק וחילוק ללא שארית.
[עריכה] אופרטורי השמה
קבוצה זו של אופרטורים מבצעים פעולות השמה לתוך משתנים. האופרטור הידוע ביותר בהקשר זה הוא אופרטור השמה, הנכתב לרוב באמצעות סימן השווה (=) או שילוב סימן השווה עם תו נוסף. בשפות תכנות מסוימות קיימים אופרטורי הכוללת פעולה מתמטית ופעולה השמה. כך לדוגמה, האופרטור A+=B מקביל לפעולת ההשמה והחיבור A = A + B.
[עריכה] אופרטורים השוואתיים
המדובר באופרטורים המשווים אופרנד אחד או שניים מחזירים אמת או שקר בהתאם לתוצאת פעולת ההשוואה. בין פעולות ההשוואה ראוי לציין את הפעולות הנפוצות: שווה ל-, גדול מ-, קטן מ-, שונה מ-, גדול או שווה ל-, דומה ל- וכדומה. לדוגמה, בפעולה A < B יחזיר הביטוי אמת אם B גדול מ-A, אחרת יחזיר שקר.
[עריכה] אופרטורים לוגיים
אופרטורים לוגיים משמשים לפעולה בין אופרטורים בוליאניים. דוגמאות לאופרטורים אלו: וגם, או, NAND ולא.
[עריכה] אופרטורים כלליים
בנוסף ישנם סוגי אופרטורים אחרים, שקיומם תלוי בשפת התכנות:
- אופרטורים לפעולה על מחרוזות, למשל האופרטור "שרשור" (לרוב & או && או +) המשמש ליצירת מחרוזת הכוללת הצמדתן של שתי מחרוזות זו לזו.
- אופרטורים הפועלים על סיביות, למשל אופרטור המזיז את הסיביות במשתנה נתון.
- אופרטורים של טיפול בזיכרון (קריאה וכתיבה).
- אופרטורים של אינדקס במערך.
- אופרטור מצביע ל"חברים" של אובייקטים. אופרטור זה מיוצג לרוב על ידי נקודה (.).
- אופרטורים של קלט ופלט.
- אופרטורי תחום, באמצעותם ניתן להבדיל בין משתנים מתחומים שונים. (בC++ ::)
- אופרטורים הבודקים את מאפייני האופרנד.
- אופרטורים המבצעים קסטינג על ערכים מטיפוס לטיפוס.
- אופרטורי תנאי בדומה לפקודת if.
קיימים סוגים נוספים של אופרטורים נדירים יותר שלא נמצאים בשימוש נרחב.
[עריכה] העמסת אופרטורים
בחלק משפות התכנות כגון ++C או VB NET ניתן לבצע העמסת אופרטורים, כלומר לשנות את צורת השימוש באופרטורים במחלקות חדשות ולקבוע יכולות אחרות מאלו הקבועות בשפה. לדוגמה, שימוש באופרטור + שמשמש לפעולה חשבונית, לביצוע פעולות שרשור מחרוזת או לחיבור בין משתנים מורכבים כמו מערכים או אובייקטים. לרוב יכולת זו מתקשרת לתכנות מונחה עצמים אולם תכונה זו איננה הכרחית (ל-83 ADA, למשל, יש יכולת העמסת אופרטורים למרות שהשפה איננה מונחית עצמים). בדרך כלל מומלץ לא לעשות שימוש מרובה בהעמסת אופרטורים, מכיוון ששימוש רב עלול להפריע לקריאוּת של הקוד התכנותי. בשל העניין שמדובר בסימן, שלעיתים קשה לפרש את משמעות התפקוד החדש שהוטל עליו.
[עריכה] סדר עדיפויות
סדר הביצוע של האופרטורים נקבע הן לפי הסדר שבו הם כתובים (משמאל לימין) והן לפי סדר עדיפויות קבוע מראש. כך למשל, פעולת העלאה בחזקה קודמת לכפל וחילוק, וכפל וחילוק קודמות לפעולות חיבור וחיסור. במקרה של ספק או רצון לחרוג מסדר העדיפויות, ניתן להשתמש בסוגריים. ישנם מקרים מעטים בהם אין סדר עדיפויות (כמו אופרטורים בוליאניים בשפת ADA) ובמספר שפות כגון פרולוג ניתן לשנות את הסדר הקבוע מראש.
[עריכה] טבלת השוואה לאופרטורים
השוואה של שתי שפות ישנות למול שתי שפות חדשות.
ניתן לראות בטבלה כי האופרטורים של שפת PHP מבוססים על שפת C, ואילו האופרטורים של שפת VB מבוססים על שפת Basic (עליה מבוססים גם האופרטורים של שפת פסקל). רוב האופרטורים מתמטים והשוואתיים דומים בכל השפות.
|
הפעולות |
C | PHP | PASCAL | VB |
| חיבור | + | + | + | + |
| חיסור | - | - | - | - |
| כפל | * | * | * | * |
| חילוק | / | / | / | / |
| חזקה | אין | אין | ** | ^ |
| שארית חילוק | % | % | MOD | MOD |
| חילוק ללא שארית | אין | אין | DIV | \ |
| שלילה | ! | ! | NOT | NOT |
| השמה | = | = | =: | = |
| שווה | == | == (=== בודק גם סוג) | = | = |
| שונה | =! | =! | <> | <> |
| מצביע | & | & | ^ | אין |
| שרשור מחרוזות | אין | . |
+ | & |
| Or | || | || | OR | OR |
| And | && | && | AND | AND |

