什麼是運算子?
在程式中,用符號表示,用來告訴編譯器要執行特定的數學、關係、邏輯運算,並產生最終結果。
assert(1 + 1 == 2);
assert(4 - 1 == 3);
assert(1 - 4 == -3);
assert(3 * 2 == 6);
assert(5 / 4 == 1.25);
assert(5 ~/4 == 1);
assert(7 % 4 == 3);
var a = 5;
var b = a++; // a 先指定b,接著+1
assert(b == 5);
assert(a == 6);
var c = ++a; // a 先+1 之後,才指定給c
assert(c == 7);
assert(a == 7);
assert(1 == 1);
assert(3 != 2);
assert(4 > 2);
assert(2 < 4);
assert(5 >= 3);
assert(3 <= 5);
假設有一個 Customer 類,接者有兩個類別分別實作 Customer 類,一是 VIPCustomer 含有兩個函數(buyAll(), buy()),另一個是 NormalCustomer 含有一個函數(buy())。
//as
class Customer {}
class VIPCustomer extends Customer {
void buyAll(){}
void buy(){}
}
class NormalCustomer extends Customer{
void buy(){}
}
void buySomething(Customer customer){
(customer as VIPCustomer).buyAll();
}
→ 不過這樣子寫,如果傳進來的不是 VIPCustomer,那就會發生 Exception。
void buySomething(Customer customer){
if(customer is VIPCustomer){
customer.buyAll();
}
}
用 is 判斷後,該物件則自動轉型成期望物件,所以可以直接呼叫期望物件的函數。
var state1 = true;
var state2 = false;
assert(!state1 == false);
assert(state1 || state2 == true);
assert(state1 || state2 == false);
位元及移位運算子通常是用在整數上,將數值轉換為二進制之後進行動作。
final value = 0x40; //0010 1000
final bitmask = 0x0f; //0000 1111
assert((value & bitmask) == 0x08);//0000 1000
assert((value & ~bitmask) == 0x20);//0010 0000
assert((value | bitmask) == 0x2F);//0010 1111
assert((value ^ bitmask) == 0x27);//0010 0111
assert((value << 2) == 0xA0); //1010 0000
assert((value >> 2) == 0xA); //0000 1010