אופרטור (תכנות) – הבדלי גרסאות
תוכן שנמחק תוכן שנוסף
←תחביר: הרחבה |
עריכה והרחבה |
||
שורה 1:
ב[[שפת תכנות|שפות תכנות]], '''אופרטור''' (בעברית: '''מפעיל, סימן פעולה''') הוא [[פונקציה (תכנות)|פונקציה]] הפועלת על
פונקציה זו נכתבת כ[[תו (מחשב)|תו]] או אוסף תווים (מילה) הנכתבים בסמוך לאופרנד או בין שני אופרנדים.
דוגמאות לאופרטורים נפוצים הן אופרטור החיבור '''+''' (בביטוי a'''+'''b) ואופרטור ההשמה ('''=:''' ב[[פסקל (שפת תכנות)|פסקל]]).
למעשה, אופרטור בשפות תכנות הוא צורת [[תחביר]] שונה לפונקציה בעלת 1-3 ארגומנטים.
עיקר תפקידו של האופרטור בתכנות הוא לשפר את קריאות התוכנית, את הדמיון בינה לבין טקסט מתימטי, לוגי או שפה טבעית, או להדגיש משמעות של פעולה כלשהי.
האופרטורים הנפוצים הם על פי רוב כאלה שפעולתם מקבילה לפעולת [[אופרטור (מתמטיקה)|אופרטור מתמטי]] כלשהו, כגון אופרטורים אריתמטיים: חיבור, כפל, חילוק וכדומה. בחלק מהמקרים משתמשים באופרטורים על מנת לסמן פעולות להן יש מיפוי ישיר אל פקודת מעבד בודדת (כגון פעולות אריתמטיות או פעולות על סיביות בזיכרון).
על פי רוב כללי מתן השמות לאופרטורים שונים מאלה של מזהים אחרים בשפה, ומאפשרים סימונים מתמטיים ואחרים, אך גם מילה אנגלית עשויה להיות אופרטור בחלק משפות התכנות (למשל sizeof ב[[C (שפת תכנות)|שפת C]], או not ב[[פייתון]]).
==תחביר==
ישנן שלוש דרכים לכתיבת אופרטורים:
* infix - כתיבת האורפטור בין שני אופרנדים (או יותר) עליהם הוא פועל (כמו בדוגמת A+B שהוזכרה למעלה). זוהי הצורה הנפוצה.
* prefix (נקראת גם "כתיב פולני") - כתיבת האופרטור משמאל לאופרנד עליו הוא פועל (למשל אופרטור השלילה ! בביטוי (A!) בשפת C). שימוש בצורת prefix עבור יותר מאופרנד יחיד איננה נפוצה, אך שימושית ב[[שפת סף|שפות סף]] ו[[שפת מכונה|שפות מכונה]].
* postfix - כתיבת האופרטור מימין לאופרנד עליו הוא פועל (למשל שימוש באופרטור הקידום בצורה ++x בשפת C) נקראת גם "כתיב פולני הפוך".
אופרטור הפועל על אופרנד יחיד נקרא '''אונרי''', אופרטור הפועל על שני אופרנדים נקרא '''בינארי'''.
בסביבות מסוימות קיימים גם '''אופרטורים טרינאריים''',
▲בסביבות מסוימות קיימים גם '''אופרטורים טרינאריים''', שפועלים על שלושה אופרנדים.
==סוגי אופרטורים==
שורה 25:
===אופרטורי השמה===
קבוצה זו של אופרטורים מבצעים פעולות [[פקודת השמה|השמה]] אל תוך [[משתנה (תכנות)|משתנים]]. האופרטור הידוע ביותר בהקשר זה הוא אופרטור השמה, הנכתב לרוב באמצעות סימן השווה (=) או
בשפות תכנות ניתן להחשיב כל אופרטור הגורם לתוצאת לוואי על אחד האופרנדים שלו כאופרטור השמה, ובפרט אופרטור השמה עשוי להיות אונרי - למשל האופרטור ++ בשפת C, שמקדם משתנה המופיע לפניו או אחריו בערך אחד (עבור טיפוסים דיסקרטיים כגון מספרים שלמים),
בשפות פונקציונליות בהן משתנים אינם משנים את תוכנם,
===אופרטורים השוואתיים===
שורה 35 ⟵ 37:
===אופרטורים לוגיים===
{{הפניה לערך מורחב|פעולה בוליאנית}}
אופרטורים לוגיים משמשים לפעולה בין אופרטורים בוליאניים, וכל אופרטור כזה מייצג [[טבלת אמת]] כלשהי. דוגמאות לאופרטורים אלו: [[וגם (לוגיקה)|וגם]] (סימונים נפוצים: &, &&, ^, and), [[או (לוגיקה)|או]] (סימונים נפוצים: |, ||, or),
===אופרטורים נוספים===
שורה 44 ⟵ 46:
* אופרטורים של גישה לאינדקס במערך או ברשימה ([], !!).
* אופרטור מצביע ל"חברים" של [[אובייקט (הנדסת תוכנה)|אובייקטים]] (. או <- ).
* אופרטורי תחום
* אופרטורים הבודקים מאפיינים שונים באופרנד, כגון האם אובייקט הוא מטיפוס כלשהו, או ירש מטיפוס כלשהו, מה גודל הזיכרון אותו האובייקט תופס, וכדומה.
* אופרטורים המבצעים המרה של ערכים מטיפוס לטיפוס, או שמשנים את התיחסות המהדר לאובייקט מסויים כאילו הוא מטיפוס אחר.
* אופרטורי תנאי כמו אופרטור :? שהוזכר למעלה. ההבדל העקרוני בין שימוש באופרטור כזה לבין שימוש ב[[פקודת if]] הוא שאופרטור התנאי מיועד לבחירה בין ביטויים, בעוד הפקודה מיועדת ל[[בקרת זרימה]].
* בשפות מונחות עצמים קיימים לעיתים אופרטורים כגון new, delete המטפלים ביצירת אובייקטים והריסתם.
קיימים סוגים נוספים של אופרטורים נדירים יותר שלא נמצאים בשימוש נרחב.
==העמסת אופרטורים==
יש לציין כי תכונה זו איננה מוגבלת לתכנות מונחה עצמים
חלק מהשפות מאפשרות למתכנת לבצע העמסת אופרטורים רק על קבוצת האופרטורים שהוגדרה מראש על ידי השפה. בשפות אחרות ניתן ליצור אופרטורים חדשים, אף כאלו שלא הוגדרו על ידי השפה.
שורה 104 ⟵ 106:
==קדימות==
קדימות האופרטורים (Associativity) מציינת את חוזק הקשר בין הביטויים השונים. והיא נקבעת הן לפי סדר עדיפויות קבועה מראש בין האופרטורים השונים, והן לפי הסדר שבו הם כתובים (משמאל לימין או ימין לשמאל). כך למשל,
במקרה של ספק או רצון לחרוג מסדר העדיפויות, ניתן על פי רוב להשתמש בסוגריים שקובעים את סדר הקדימויות הרצוי (לדוגמה: 2+2*3 יחזיר 8 ואילו (2+2)*3 יחזיר 12). אך יש לשים לב לכך ששימוש זה בסוגריים שונה מהשימוש בהם כ'''אופרטור קריאה לפונקציה''', בשפות תכנות רבות, וכן לכך שבשפות מסויימות (למשל Haskell) הדבר עלול לתת משמעות שונה מהצפוי לביטוי כולו.
כאשר קיימים שני אופרטורים שווים בקדימותם, בדרך כלל האופרטור השמאלי גובר על הימני, אך גם יכולים להיות אופרטורים בעלי קדימות שווה שבהם דווקא הימני יגבר על השמאלי. ישנם מקרים מעטים בהם אין סדר עדיפויות (כמו אופרטורים בוליאניים בשפת ADA) ובמספר שפות כגון [[פרולוג (שפת תכנות)|פרולוג]] ניתן לשנות את הסדר הקבוע מראש.▼
▲כאשר
<!--
==טבלת השוואה לאופרטורים==
השוואה של שתי קונספטים של אופרטורים בשפות ישנות וחדשות. <br />
שורה 170 ⟵ 174:
| align="right"| קידום עצמי
| ++ || ++ || אין|| אין
|} -->
== הערות שוליים ==
|