Dart 指派運算子

1、基礎指派運算子 =

將右側運算式的數值存入左側變數,覆蓋變數原本儲存的內容。

使用語法:

變數 = 數值或運算式;
int age;
age = 10;        // 將數值10指派給age變數
String name;
name= "sam"; // 字串指派範例Code language: JavaScript (javascript)

2、空值感知指派運算子 ??=

僅當左側變數值為 null 時才執行指派;若變數不為 null,則保留原有數值不變。

使用語法:

變數 ??= 數值;

功能等同於下方程式:

if (變數 == null) {
  變數 = 數值;
}Code language: JavaScript (javascript)

實作範例:

void main() {
	int? total = null;
	total ??= 5;
	print(total); // 輸出 5,total一開始是null,指派動作生效

	int? count = 100;
	count ??= 200;
	print(count); // 輸出 100,count不為null,不會執行指派
}Code language: PHP (php)

3、複合指派運算子

運算與指派合併寫法

針對任意運算子 op

a op= b 等價於 a = a op b

分類運算子說明
基礎四則+=相加後指派
-=相減後指派
*=相乘後指派
/=浮點數相除後指派
整數除法~/=整除取商後指派
取餘數%=取模(餘數)後指派
位元左移<<=位元左移後指派
位元右移>>=符號右移後指派
無符號右移>>>=無符號右移後指派
位元且&=位元AND運算後指派
位元互斥或^=位元XOR運算後指派
位元或|=位元OR運算後指派
通用運算規則:op= ba = a op b
示範:a += ba = a + b

完整範例:

void main() {
	var num = 2;

	// *= 乘法複合指派
	num *= 3; 
	print(num); // 6,等同 num = num * 3

	// += 加法
	num += 4;
	print(num); // 10,等同 num = num + 4

	// -= 減法
	num -= 2;
	print(num); // 8

	// /= 浮點除法
	double d = 10;
	d /= 2;
	print(d); // 5.0

	// ~/= 整數除法
	int n = 7;
	n ~/= 2;
	print(n); // 3

	// %= 取餘數
	int m = 9;
	m %= 2;
	print(m); // 1

	// <<= 位元左移
	int bit1 = 1;
	bit1 <<= 2; // 1 << 2 = 4
	print(bit1); // 4

	// >>= 符號右移
	int bit2 = 8;
	bit2 >>= 2; // 8 >> 2 = 2
	print(bit2); // 2

	// >>>= 無符號右移
	int bit3 = -8;
	bit3 >>>= 2;
	print(bit3); //4611686018427387902 極大數值 

	// &= 位元AND
	int x = 6; // 二進制 110
	x &= 3;    // 二進制 011
	print(x);  // 二進制 010 = 十進制2

	// ^= 位元互斥或
	int y = 5;
	y ^= 3;
	print(y);

	// |= 位元OR
	int z = 4;
	z |= 1;
	print(z); // 5
}Code language: PHP (php)

補充說明位元移位範例:int bit1 = 1; 向左移動2個位元

十進制數字 1 的32位元二進制表示:

00000000 00000000 00000000 00000001

x << n:將 x 所有二進位元整體向左平移 n 位,右側空出的低位補上 0,左側超出範圍的高位直接捨棄。

平移後的二進制內容如下:

00000000 00000000 00000000 00000100

這組二進制對應的十進制數值就是4

邏輯運算子的內容我們後續章節會再詳細講解,讀者先熟悉指派運算子即可,這是本章重點。

void main() {
  // 1. 基礎指派 =
  var a = 2;
  print(a == 2);

  // 2. 乘法複合指派 *=
  a *= 3; // a =  a * 3;
  print(a == 6);

  // 3. 加法複合指派 +=
  a += 4; // a = a + 4;
  print(a == 10);

  // 4. 空值感知指派 ??=
  int? b; // 預設為null
  b ??= 20;
  print(b == 20);

  b ??= 99; // b已有數值,不會覆蓋
  print(b == 20);

  // 5. 減法複合指派 -=
  a -= 5;
  print(a == 5);

  // 6. 取餘數 %=
  a %= 3;
  print(a == 2);
}Code language: Dart (dart)

以上所有判斷輸出皆為 true

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *