אופרטור (תכנות)

בשפות תכנות, אוֹפֵּרָטוֹר (בעברית: מפעיל, סימן פעולה) הוא פונקציה הפועלת על יחידה תכנותית כלשהי (קבועים, משתנים, טיפוסים וכדומה), שתיקרא אופרנד, או על מספר אופרנדים, ומחזירה ערך מטיפוס מוגדר.
פונקציה זו נכתבת כתו או אוסף תווים (מילה) הנכתבים בסמוך לאופרנד או בין שני אופרנדים.
דוגמאות לאופרטורים נפוצים הן אופרטור החיבור + (בביטוי a+b) ואופרטור ההשמה (=: בפסקל).
למעשה, אופרטור בשפות תכנות הוא צורת תחביר שונה לפונקציה בעלת 1-3 ארגומנטים.
עיקר תפקידו של האופרטור בתכנות הוא לשפר את קריאות התוכנית, את הדמיון בינה לבין טקסט מתמטי, לוגי או שפה טבעית, או על מנת להדגיש משמעות של פעולה כלשהי.
האופרטורים הנפוצים הם על פי רוב כאלה שפעולתם מקבילה לפעולת אופרטור מתמטי כלשהו, כגון אופרטורים אריתמטיים: חיבור, כפל, חילוק וכדומה. בחלק מהמקרים משתמשים באופרטורים על מנת לסמן פעולות להן יש מיפוי ישיר אל פקודת מעבד בודדת (כגון פעולות אריתמטיות או פעולות על סיביות בזיכרון).
בשפות רבות כללי מתן השמות לאופרטורים שונים מאלה של מזהים אחרים בשפה, ומאפשרים סימונים מתמטיים ואחרים, אך גם מילה אנגלית עשויה להיחשב אופרטור בחלק משפות התכנות (למשל sizeof בשפת C, או not בפייתון).

סוגי אופרטורים

ניתן לחלק את האופרטורים לפי תפקודם:

אופרטורים אריתמטיים

אופרטורים אריתמטיים הם ככל הנראה האופרטורים הנפוצים ביותר בשל הכללת אופרטורי ארבע פעולות החשבון: כפל (*), חילוק (/), חיבור (+) וחיסור\הפיכת סימן (-). לרוב נכתבים אופרטורים אלו בכתיב המקובל במתמטיקה. אופרטורים אריתמטיים שימושיים נוספים הם העלאה בחזקה, שארית החילוק וחילוק שלמים.

אופרטורי השמה

קבוצה זו של אופרטורים מבצעים פעולות השמה אל תוך משתנים. האופרטור הידוע ביותר בהקשר זה הוא אופרטור השמה, הנכתב לרוב באמצעות סימן השווה (=) או בשילוב שלו עם תו נוסף.
בשפות תכנות שהושפעו מ-ALGOL 68 קיימים אופרטורים הכוללת פעולה מתמטית ופעולה השמה. כך לדוגמה, האופרטור (=+) (בדוגמה A += B) מקביל לפעולת ההשמה והחיבור A = A + B.

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

אופרטורים השוואתיים

אופרטור השוואה הוא אופרטור הפועל על שני אופרנדים מטיפוס כלשהו, ומחזיר ערך בוליאני (אמת או שקר). בין פעולות ההשוואה ראוי לציין את הפעולות הנפוצות: שווה ל-, גדול מ-, קטן מ-, שונה מ-, גדול או שווה ל-, דומה ל- וכדומה. לדוגמה, הביטוי (A < B) יקבל ערך אמת אם B גדול מ-A, ושקר אחרת.

קדימות

קדימות אופרטורים (Associativity) מציינת את חוזק הקשר בין הביטויים השונים. והיא נקבעת הן לפי סדר עדיפויות קבועה מראש בין האופרטורים השונים, והן לפי הסדר שבו הם כתובים (משמאל לימין או ימין לשמאל). כך למשל, האסוציאטיביות המקובלת בפעולות אריתמטיות היא שפעולת העלאה בחזקה קודמת לכפל וחילוק שקודמות לפעולות חיבור וחיסור, וכן מקובל שפעולות אלה קודמות לפעולת השמה.
במקרה של ספק או רצון לחרוג מסדר העדיפויות, ניתן על פי רוב להשתמש בסוגריים שקובעים את סדר הקדימויות הרצוי (לדוגמה: ערכו של הביטוי 2+2*3 הוא 8 ואילו (2+2)*3 הוא 12). אך יש לשים לב לכך ששימוש זה בסוגריים שונה מהשימוש בהם כאופרטור קריאה לפונקציה בשפות תכנות רבות, וכן לכך שבשפות מסוימות (למשל Haskell) הדבר עלול לתת משמעות שונה מהצפוי לביטוי כולו.
כאשר ישנם בביטוי מספר אופרטורים להם עדיפות שווה, העדיפות תקבע על פי סדר הכתיבה שלהם, לעיתים הקדימות היא של האיבר השמאלי מביניהם ולעיתים של הימני, באופן שתלוי בהקשר ובשפה הספציפית. ישנם מקרים מעטים בהם אין סדר עדיפויות (כמו אופרטורים בוליאניים בשפת עדה) ובמספר שפות כגון פרולוג ניתן לשנות את הסדר הקבוע מראש.
בכתיבה postfix או prefix סדר הפעולות נקבע באופן יחיד, ולכן אין משמעות לקדימות בין האופרטורים.