Remove ads
מוויקיפדיה, האנציקלופדיה החופשית
בשפות תכנות, אוֹפֵּרָטוֹר (בעברית: מפעיל, סימן פעולה) הוא פונקציה הפועלת על יחידה תכנותית כלשהי (קבועים, משתנים, טיפוסים וכדומה), שתיקרא אופרנד, או על מספר אופרנדים, ומחזירה ערך מטיפוס מוגדר. פונקציה זו נכתבת כתו או אוסף תווים (מילה) הנכתבים בסמוך לאופרנד או בין שני אופרנדים. דוגמאות לאופרטורים נפוצים הן אופרטור החיבור + (בביטוי a+b) ואופרטור ההשמה (=: בפסקל).
למעשה, אופרטור בשפות תכנות הוא צורת תחביר שונה לפונקציה בעלת 1–3 ארגומנטים. עיקר תפקידו של האופרטור בתכנות הוא לשפר את קריאות התוכנית, את הדמיון בינה לבין טקסט מתמטי, לוגי או שפה טבעית, או על מנת להדגיש משמעות של פעולה כלשהי. האופרטורים הנפוצים הם על פי רוב כאלה שפעולתם מקבילה לפעולת אופרטור מתמטי כלשהו, כגון אופרטורים אריתמטיים: חיבור, כפל, חילוק וכדומה. בחלק מהמקרים משתמשים באופרטורים על מנת לסמן פעולות להן יש מיפוי ישיר אל פקודת מעבד בודדת (כגון פעולות אריתמטיות או פעולות על סיביות בזיכרון).
בשפות רבות כללי מתן השמות לאופרטורים שונים מאלה של מזהים אחרים בשפה, ומאפשרים סימונים מתמטיים ואחרים, אך גם מילה אנגלית עשויה להיחשב אופרטור בחלק משפות התכנות (למשל sizeof בשפת C, או not בפייתון).
ישנן שלוש דרכים לכתיבת אופרטורים:
אופרטור הפועל על אופרנד יחיד נקרא אונרי, אופרטור הפועל על שני אופרנדים נקרא בינארי. בשפות מסוימות קיימים גם אופרטורים טרינאריים, הפועלים על שלושה אופרנדים. הדוגמה המוכרת ביותר היא אופרטור :? בשפת C ונגזרותיה, שנכתב בצורה (A ? B : C) ומשמעותו "אם A אמת אז B אחרת C". דוגמה נוספת היא האופרטור /* בשפת Forth, שנכתב בתצורת postfix ומשמעו "הכפל את האיבר השלישי במחסנית באיבר השני במחסנית, וחלק את התוצאה באיבר הראשון במחסנית".
ניתן לחלק את האופרטורים לפי תפקודם:
אופרטורים אריתמטיים הם ככל הנראה האופרטורים הנפוצים ביותר בשל הכללת אופרטורי ארבע פעולות החשבון: כפל (*), חילוק (/), חיבור (+) וחיסור\הפיכת סימן (-). לרוב נכתבים אופרטורים אלו בכתיב המקובל במתמטיקה. אופרטורים אריתמטיים שימושיים נוספים הם העלאה בחזקה (**), שארית החילוק (%) וחילוק שלמים.
קבוצה זו של אופרטורים מבצעים פעולות השמה אל תוך משתנים. האופרטור הידוע ביותר בהקשר זה הוא אופרטור השמה, הנכתב לרוב באמצעות סימן השווה (=) או בשילוב שלו עם תו נוסף.
בשפות תכנות שהושפעו מ-ALGOL 68 קיימים אופרטורים הכוללת פעולה מתמטית ופעולה השמה. כך לדוגמה, האופרטור (=+) (בדוגמה A += B) מקביל לפעולת ההשמה והחיבור A = A + B.
ניתן להחשיב כל אופרטור הגורם לתוצאת לוואי על אחד האופרנדים שלו כאופרטור השמה, ובפרט אופרטור השמה עשוי להיות אונרי – למשל האופרטור ++ בשפת C, שמקדם משתנה המופיע לפניו או אחריו בערך אחד (עבור טיפוסים דיסקרטיים כגון מספרים שלמים), כך שהביטוי A++ שקול לביטוי A=A+1.
בשפות פונקציונליות בהן משתנים אינם משנים את תוכנם, קיימים אופרטורים (ובפרט האופרטור =) המשמשים ליצירת קישור (binding) בין מזהה לערך אותו הוא מקבל, או להגדרת ערך החזרה של פונקציה.
אופרטור השוואה הוא אופרטור הפועל על שני אופרנדים מטיפוס כלשהו, ומחזיר ערך בוליאני (אמת או שקר). בין פעולות ההשוואה ניתן למנות את הפעולות הנפוצות: שווה ל-(==), גדול מ-(<), קטן מ-(>), שונה מ-(=!), גדול או שווה ל-(=<) וכדומה. לדוגמה, הביטוי (A < B) יקבל ערך אמת אם B גדול מ-A, ושקר אחרת.
אופרטורים לוגיים משמשים לפעולה בין ביטויים מטיפוס בוליאני, וכל אופרטור כזה מייצג טבלת אמת כלשהי. דוגמאות לאופרטורים אלו: וגם (סימונים נפוצים: &, &&, ^, and), או (סימונים נפוצים: |, ||, or), ושלילה (סימונים נפוצים: !, not, +\).
אופרטורים הפועלים על סיביות. פעולות על סיביות מהירות ויעילות משמעותית מפעולות אריתמטיות ככפל וחילוק. קיימים אופרטורים שונים שמבצעות פעולות על סיביות בין שתי משתנים כמו NOT ,OR ,XOR ,AND כמו גם הזזת סיביות במשתנה אחד נתון.
בנוסף ישנם סוגי אופרטורים אחרים, שקיומם תלוי בשפת התכנות:
קיימים סוגים נוספים של אופרטורים נדירים יותר שלא נמצאים בשימוש נרחב.
חלק משפות התכנות מאפשרות למתכנת לבצע העמסת אופרטורים, כלומר להגדיר אותם כך שיפעלו על טיפוסים נוספים, או להגדיר להם פעולות שונות מאלו שנקבעו בשפה. לדוגמה, בשפת ++C אופרטור + משמש לפעולה חשבונית בין מספרים, אך מוגדר לעיתים לביצוע פעולות שרשור מחרוזות או לחיבור בין מערכים. תכונה זו איננה מוגבלת לתכנות מונחה עצמים. ישנן שפות שאינן מונחות עצמים (כמו LISP) המאפשרות העמסת אופרטורים, ושפות מונחות עצמים (כגון Java) שנמנעות מלספק את האפשרות הזאת (לצורכי בהירות וחד משמעיות).
חלק מהשפות מאפשרות למתכנת לבצע העמסת אופרטורים רק על קבוצת האופרטורים שהוגדרה מראש על ידי השפה. בשפות אחרות ניתן ליצור אופרטורים חדשים, אף כאלו שלא הוגדרו על ידי השפה.
להלן חלוקה של שפות תכנות נפוצות על פי מידת הגמישות בהעמסת אופרטורים:
קדימות אופרטורים (Associativity) מציינת את חוזק הקשר בין הביטויים השונים. והיא נקבעת הן לפי סדר עדיפויות קבועה מראש בין האופרטורים השונים, והן לפי הסדר שבו הם כתובים (משמאל לימין או ימין לשמאל). כך למשל, האסוציאטיביות המקובלת בפעולות אריתמטיות היא שפעולת העלאה בחזקה קודמת לכפל וחילוק שקודמות לפעולות חיבור וחיסור, וכן מקובל שפעולות אלה קודמות לפעולת השמה.
במקרה של ספק או רצון לחרוג מסדר העדיפויות, ניתן על פי רוב להשתמש בסוגריים שקובעים את סדר הקדימויות הרצוי (לדוגמה: ערכו של הביטוי 2+2*3 הוא 8 ואילו (2+2)*3 הוא 12). אך יש לשים לב לכך ששימוש זה בסוגריים שונה מהשימוש בהם כאופרטור קריאה לפונקציה בשפות תכנות רבות, וכן לכך שבשפות מסוימות (למשל Haskell) הדבר עלול לתת משמעות שונה מהצפוי לביטוי כולו.
כאשר ישנם בביטוי מספר אופרטורים להם עדיפות שווה, העדיפות תקבע על פי סדר הכתיבה שלהם, לעיתים הקדימות היא של האיבר השמאלי מביניהם ולעיתים של הימני, באופן שתלוי בהקשר ובשפה הספציפית. ישנם מקרים מעטים בהם אין סדר עדיפויות (כמו אופרטורים בוליאניים בשפת עדה) ובמספר שפות כגון פרולוג ניתן לשנות את הסדר הקבוע מראש.
בכתיבה postfix או prefix סדר הפעולות נקבע באופן יחיד, ולכן אין משמעות לקדימות בין האופרטורים.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.