אופרטור אלביס
בשפות תכנות מסוימות, אופרטור אלביס, כתוב לעיתים קרובות ?:, הוא פעולה בינארית שמחזירה את הערך הראשון המוערך אם האופרנד הזה מוערך לערך אמת, ואחרת מחזירה את הערך השני. הסימון של אופרטור אלביס נוצר בהשראת אופרטור התנאי המשולש, A?B:C, מאחר שאופרטור אלביס A ?: B
שווה בערך לביטוי התנאי המשולש A ? A : B
. ההבדל היחיד בין הביטויים, מעבר לכתיבה הכפולה של הביטוי A, הוא שבביטוי המשולש הערך של A מוערך פעמיים ואילו עם אופרטור אלביס, A מוערך רק פעם אחת.
השם "אופרטור אלביס" נובע מהעובדה שכאשר מסובבים עם כיוון השעון את הסימון הנפוץ שלו, ?:, הוא דומה לרגשון של אלביס פרסלי עם התסרוקת המיוחדת שלו. [1]
אופרטור דומה הוא אופרטור ה-null coalescing, שבו בדיקת האמת הבוליאנית מוחלפת בבדיקה שהערך אינו null במקום זאת. זה מסומן בדרך כלל באמצעות סימן שאלה כפול: ??
, וניתן לראות אותו בשפות כמו סי שארפ [2] או Dart. [3]
תחבירים חלופיים
[עריכת קוד מקור | עריכה]במספר שפות, כגון Common Lisp, Clojure, לואה, Object Pascal, Perl, Python, Ruby ו־JavaScript, לאופרטור OR (בדרך כלל ||
או or
) יש את אותה התנהגות כמו לעיל: החזרת האופרנד הראשון שלו אם זה מוערך לערך אמת, ואחרת להעריך ולהחזיר את האופרנד השני שלו, שעשוי להיות ערך אמת או שקר. כאשר הצד השמאלי הוא אמת, הצד הימני אפילו לא מוערך; מתבצע "קצר חשמלי". זה שונה מההתנהגות בשפות אחרות כגון C/C++, שם התוצאה של ||
תמיד תהיה ערך בוליאני.
דוגמאות
[עריכת קוד מקור | עריכה]גרסה בוליאנית
[עריכת קוד מקור | עריכה]בשפה שתומכת באופרטור אלביס, משהו כמו זה:
x = f() ?: g()
ייתן x
שווה לתוצאה של f()
אם התוצאה הזו אמת, ואחרת לתוצאה של g()
.
זה שווה ערך לדוגמה זו, באמצעות אופרטור התנאי הטרינרי:
x = f() ? f() : g()
אלא שהוא לא מעריך את f()
פעמיים אם הוא מניב אמת. שימו לב לאפשרות של התנהגות שרירותית אם f()
היא פונקציה שתלויה במצב - שלא מחזירה תמיד את אותה תוצאה.
וריאנט הפניה לאובייקט
[עריכת קוד מקור | עריכה]קוד זה יגרום להפניה לאובייקט שמובטח שלא יהיה null. הפונקציה f()
מחזירה הפניה לאובייקט במקום ערך בוליאני, ועשויה להחזיר null, הנחשב באופן אוניברסלי כשקרי:
x = f() ?: 1
הערות שוליים
[עריכת קוד מקור | עריכה]- ^ Joyce Farrell (7 בפברואר 2013). Java Programming. p. 276. ISBN 978-1285081953.
The new operator is called Elvis operator because it uses a question mark and a colon together (?:); if you view it sideways, it reminds you of Elvis Presley.
{{cite book}}
: (עזרה) - ^ "?? Operator". C# Reference. Microsoft. נבדק ב-5 בדצמבר 2018.
{{cite web}}
: (עזרה) - ^ "Conditional expressions". Dart Language. Google.