iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0
Software Development

Dart 語言 - 開啟 Flutter 的鑰匙系列 第 10

Day10:運算子(上) - Operators

什麼是運算子?

在程式中,用符號表示,用來告訴編譯器要執行特定的數學、關係、邏輯運算,並產生最終結果。

算術運算符 (Arithmetic operators)

算術運算符

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);

相等及關係運算子 (Equality and relational operators)

相等及關係運算子

assert(1 == 1);
assert(3 != 2);
assert(4 > 2);
assert(2 < 4);
assert(5 >= 3);
assert(3 <= 5);
  • == 用來比對兩個物件 (Object) 是否相同,不只用在數值類型上,還可以用來比對其他的物件,例如:String, bool...

型別測試運算子 (Type test operator)

型別測試運算子

  • as 範例:

假設有一個 Customer 類,接者有兩個類別分別實作 Customer 類,一是 VIPCustomer 含有兩個函數(buyAll(), buy()),另一個是 NormalCustomer 含有一個函數(buy())。

//as
class Customer {}
class VIPCustomer extends Customer {
	void buyAll(){}
	void buy(){}
}

class NormalCustomer extends Customer{
	void buy(){}
}
  • 有一個函數 buySomething,是以 Customer 作為參數,裡面想呼叫 VIPCustomer 的 buyAll ,因你知道傳進來的一定是 VIPCustomer ,但是因為 Customer 類裡面並沒有包含 buyAll(),所以需要先用 `as 把 customer 轉型成 VIPCustomer 才可以呼叫其buyAll( ) 函數。
void buySomething(Customer customer){
	(customer as VIPCustomer).buyAll();
}

→ 不過這樣子寫,如果傳進來的不是 VIPCustomer,那就會發生 Exception。

  • 可用 is 改寫
void buySomething(Customer customer){
	if(customer is VIPCustomer){
		customer.buyAll();
	}
}

發現什麼?

用 is 判斷後,該物件則自動轉型成期望物件,所以可以直接呼叫期望物件的函數。

指派運算子(Assignment operators)

指派運算子

  • Logical operators

邏輯運算子 (Logical operators)

邏輯運算子

var state1 = true;
var state2 = false;

assert(!state1 == false);
assert(state1 || state2 == true);
assert(state1 || state2 == false);
  • ||:運算子左右兩邊有一為 true 則為 true。
  • &&:運算子左右兩邊有一為 false 則為 false。
  • Bitwise and shift operators

位元及移位運算子 (Bitwise and shift operators)

位元及移位運算子通常是用在整數上,將數值轉換為二進制之後進行動作。

位元及移位運算子

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

上一篇
Day9:匿名函數(Anonymous function)
下一篇
Day11:運算子 (下) - Operators
系列文
Dart 語言 - 開啟 Flutter 的鑰匙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言