عملگرها

    عملگرها در کوروش مشابه C کار می‌کنند. آنها بر اساس функциональность و اولویت دسته‌بندی می‌شوند. عملگرها بر اساس اولویت (priority) و انجمنی‌بودن (associativity) (چپ‌به‌راست یا راست‌به‌چپ) ارزیابی می‌شوند.

    عملگرهای حسابی

    عملگرهای حسابی محاسبات ریاضی را بین عملوندهای عددی انجام می‌دهند.

    OperatorMeaningExampleResult
    +Addition5 + 27
    -Subtraction5 - 23
    *Multiplication5 * 210
    /Division5 / 22
    %Modulo (Truncated)5 % 21
    |Bitwise OR (integers)6 | 37
    ~Bitwise XOR (integers)6 ~ 35
    &Bitwise AND (integers)6 & 32
    &~Bitwise AND-NOT (integers)6 &~ 34
    <<Left Shift (integer << non-negative integer)3 << 212
    >>Right Shift (integer >> non-negative integer)12 >> 23

    عملگرهای مقایسه‌ای

    عملگرهای مقایسه‌ای رابطه بین دو عملوند را ارزیابی کرده و یک نتیجه bool (true یا false) برمی‌گردانند.

    OperatorMeaningExampleResult
    ==Equal to5 == 5true
    !=Not equal to5 != 3true
    <Less than3 < 5true
    >Greater than7 > 2true
    <=Less than or equal to3 <= 3true
    >=Greater than or equal to5 >= 2true

    عملگرهای منطقی

    عملگرهای منطقی برای ترکیب یا معکوس کردن مقادیر بولی استفاده می‌شوند. آنها همواره روی مقادیر true و false عمل کرده و یک نتیجه بولی برمی‌گردانند.

    OperatorMeaningExampleResult
    &&Logical ANDtrue && falsefalse
    ||Logical ORtrue || falsetrue
    !Logical NOT!truefalse

    عملگرهای انتساب

    عملگرهای انتساب برای تخصیص مقادیر به متغیرها استفاده می‌شوند. ساده‌ترین شکل = است، اما انتساب‌های ترکیبی نیز وجود دارند که یک عملیات و انتساب را در یک مرحله انجام می‌دهند.

    OperatorMeaningExampleResult
    =Assignmenta = 10a = 10
    +=Add and assigna += 5a = a + 5
    -=Subtract and assigna -= 5a = a - 5
    *=Multiply and assigna *= 5a = a * 5
    /=Divide and assigna /= 5a = a / 5
    %=Modulo and assigna %= 5a = a % 5
    &=Bitwise AND and assigna &= 5a = a & 5
    ~=Bitwise XOR and assigna ~= 5a = a ~ 5
    &~=Bitwise AND NOT and assigna &~= 5a = a &~ 5
    <<=Left shift and assigna <<= 2a = a << 2
    >>=Right shift and assigna >>= 2a = a >> 2

    اولویت و انجمنی‌بودن عملگرها

    انجمنی‌بودن تعیین می‌کند که عملگرهای با اولویت یکسان چگونه گروه‌بندی می‌شوند: چپ‌به‌راست یا راست‌به‌چپ.

    Operator / TypeDescription

    Precedence / Associativity

    my_function(x)

    Function call. Evaluates arguments and calls the function.

    Very High / Left-to-right

    array[index]

    Array indexing. Access the element at a specific position.

    Very High / Left-to-right

    Type conversion (cast)Explicitly converts a value to a different type.High / Right-to-left
    .

    Member access. Accesses a field of a struct or object.

    High / Left-to-right
    ->

    Pointer member access. Dereferences a pointer to access a field of a struct or object.

    High / Left-to-right
    *, /, %Multiplication, division, and modulo operators.High / Left-to-right
    &, |, ~, &~Bitwise AND, OR, NOT, and custom combination (~&).High / Left-to-right
    -X, !XUnary prefix operators: negation and logical NOT.High / Right-to-left
    sizeofReturns the size of a type or expression in bytes.High / Right-to-left
    *

    Dereference operator. Accesses the value pointed to by a pointer.

    Higher than member access / Right-to-left

    &

    Address-of operator. Returns the memory address of its operand.

    Lower than member access / Right-to-left

    +, -Addition and subtraction operators.

    Mid-High / Left-to-right

    ==, !=Equality and inequality comparison operators.

    Low-Mid / Left-to-right

    >, <, >=, <=Relational operators to compare values.Mid / Left-to-right
    ||

    Logical OR. Returns true if at least one operand is true.

    Low / Left-to-right
    &&

    Logical AND. Returns true only if both operands are true.

    Low / Left-to-right
    Lowest

    Represents the lowest precedence. Used internally as a default when no other precedence applies.

    Lowest

    عملگرهای یکانی

    عملگرهای یکانی روی یک عملوند واحد عمل کرده و مقدار آن را به میزان ۱ تغییر می‌دهند.

    پیشوندی (++i, --i) متغیر را قبل از استفاده در عبارت به‌روزرسانی می‌کند.
    پسوندی (i++, i--) متغیر را بعد از استفاده در عبارت به‌روزرسانی می‌کند.

    OperatorMeaningExampleResult
    i++

    Post-increment: returns current value, then increases by 1

    i = 5; j = i++i = 6, j = 5
    ++i

    Pre-increment: increases by 1, then returns the new value

    i = 5; j = ++ii = 6, j = 6
    i--

    Post-decrement: returns current value, then decreases by 1

    i = 5; j = i--i = 4, j = 5
    --i

    Pre-decrement: decreases by 1, then returns the new value

    i = 5; j = --ii = 4, j = 4
    • فقط روی lvalueهای تغییرپذیر کار می‌کند؛ استفاده روی ثابت‌ها یا rvalueها خطای کامپایل محسوب می‌شود.
    • از تکیه بر افزایش‌های چندگانه یک متغیر در یک عبارت واحد خودداری کنید.

    عملگر ادغام تهی (Null-Coalescing)

    عملگر ادغام تهی || با اشاره‌گرها برای انتخاب اولین مقدار غیرتهی از زنجیره‌ای از عملوندها استفاده می‌شود.
    این عملگر عملوندها را از چپ به راست ارزیابی کرده و اولین اشاره‌گری را که null نیست برمی‌گرداند.
    اگر همه عملوندها null باشند، نتیجه null است.

    var p1: int* = null;
    var p2: int* = &x;
    var p3: int* = &y;
    
    var result1 = p1 || p2;        // returns p2
    var result2 = p1 || null;      // returns null
    var result3 = p1 || p2 || p3;  // returns p2 (first non-null)