Dart 關係運算子

關係運算子,顧名思義就是用來做各種大小、相等比對的運算符號,數學領域當中我們就時常會用到。

關係運算子一覽表

運算子說明
==相等(比對數值是否相同)
!=不相等
>大於
<小於
>=大於等於
<=小於等於

== 這個運算子也能夠套用在其他物件上

== 相等運算子核心規則

== 的作用是判斷兩個變數/物件代表的數值是否一致;如果需要嚴格判定兩個參考是否指向記憶體裡同一個物件,就不能使用 ==,得改用專屬函式 identical()

空值(null)特殊規則 只要任一側為 null,判斷邏輯如下:

  • 兩側皆為 null,回傳 true
  • 僅單側是 null,回傳 false

一般物件執行邏輯 實際等同呼叫第一個運算元的 == 方法:x.==(y),運算子本質就是掛在運算元上的成員方法。

以下範例輸出皆為 true,null 不等於 0,也不等於空字串「」

void main() {
	// 兩側都是null,==判斷結果為true
	print(null == null); //true
	// 一側null、一側帶有數值,==判斷結果為false
	print(null != 0); //true
	print(null != ""); //true
}
Code language: PHP (php)

接著看一組完整示範

void main() {
	// == 相等比對
	print(2 == 2);
	print("dart" == "dart");
	print([1,2] == [1,2]);

	// != 不相等比對
	print(2 != 3);
	print(true != false);

	// > 大於
	print(3 > 2);
	print(10 > -5);

	// < 小於
	print(2 < 3);
	print(-1 < 0);

	// >= 大於等於
	print(3 >= 3);
	print(5 >= 2);

	// <= 小於等於
	print(2 <= 3);
	print(4 <= 4);
}
Code language: Dart (dart)

程式執行輸出結果

true
true
false
true
true
true
true
true
true
true
true
true
trueCode language: JavaScript (javascript)

==identical() 的差異

void main() {
	var a = [1, 2];
	var b = [1, 2];
	
	// List 使用 == 會比對物件參考,a、b 是兩個獨立陣列,結果為false
	print(a == b);
	
	// identical 判斷是否為記憶體同一物件,a、b 分屬不同陣列,回傳false
	print(identical(a, b));
	
	// c 直接參考 a,指向同一個物件,identical 會回傳true
	var c = a;
	print(identical(a, c));
}
Code language: PHP (php)

補充說明:如果只想比對兩個 List 內的內容,要使用 listEquals

import 'package:flutter/foundation.dart';
listEquals(a, b); // true,逐一比對陣列內每個元素Code language: JavaScript (javascript)

字串的比對規則

字串僅能使用 == 與 != 進行相等判斷

void main() {
	// 字串相等運算
	print("apple" != "banana"); //true
	print("apple" == "apple"); //true
	//print("zoo" > "apple"); // 會報錯,字串無法使用 > < >= <=,僅能靠 == != 判斷是否相等

	// 布林值相等比對
	print(true == true);  //true
	print(true != false);  //true
}
Code language: PHP (php)

關係運算子搭配算術運算子

根據前面章節所學,可以得知運算優先順序:算術運算 優先於 關係運算,程式會先計算加減乘除,再執行大小、相等判斷;

void main() {
  // 先分別算出左右兩側算術式結果,再進行比對
  print(10 + 5 == 3 * 5); // 15 == 15 → true
  print(20 - 3 != 8 + 9); // 17 != 17 → false
  print(12 + 4 > 5 + 6);  // 16 > 11 → true
  print(9 - 7 < 10 - 1);  // 2 < 9 → true
  print(6 + 2 >= 4 * 2);  // 8 >= 8 → true
  print(15 - 8 <= 3 + 5); // 7 <= 8 → true
}Code language: PHP (php)

以上範例的執行流程,會先算出關係運算子兩邊的數學算式,接著再拿兩個運算結果互相比較。

發佈留言

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