Dart--Operators

算術操作符

  • 加法(+):計算兩個操作數的和
  • 減法(-):計算兩個操作數的差
  • 乘法(*):計算兩個操作數的乘積
  • 除法 (/):計算兩個操作數的商,返回一個雙精度浮點數(double)
  • 整除(~/): 計算兩個操作數的商,返回一個整數(int)
  • 取模(%):計算兩個操作數的余數
void main() {
  int a = 10;
  int b = 3;

  print(a + b); // 13
  print(a - b); // 7
  print(a * b); // 30
  print(a / b); // 3.3333333333333335
  print(a ~/ b); // 3
  print(a % b); // 1
}

關系操作符

  • 等于(==):檢查兩個操作數是否相等
  • 不等于(!=): 檢查兩個操作數是否不相等
  • 大于(>): 檢查左側操作數是否大于右側操作數
  • 小于(<): 檢查左側操作數是否小于右側操作數
  • 大于等于(>=): 檢查左側操作數是否大于等于右側操作數
  • 小于等于(<=): 檢查左側操作數是否小于或等于右側操作數
void main() {
  int a = 10;
  int b = 3;
  print(a == b); // false
  print(a != b); // true
  print(a > b); // true
  print(a < b); // false
  print(a >= b); // true
  print(a <= b); // false
}

類型判斷操作符

  • 類型測試(is): 檢查對象是否是某個類型的實例
  • 非類型測試(is !): 檢查對象是否不是某個類型的實例
void main() {
  var x = 'Hello, Dart';

  print(x is String); // true
  print(x is! int); // true
}

賦值操作符

  • 簡單賦值(=):將右操作數的值賦值給左操作數
  • 復合賦值(+=、-=、*=、/=、~/=、%=):進行運算并且將結果賦值為左操作數
void main() {
  double a = 10.0;
  a /= 4; // 相當于 a = a / 4;
  print(a); // 輸出: 2.5
}
void main() {
  double a = 10.0;
  a /= 4; // 相當于 a = a / 4;
  print(a); // 輸出: 2.5
}
void main() {
  int a = 10;
  a %= 4; // 相當于 a = a % 4;
  print(a); // 輸出: 2
}

邏輯操作符

  • 邏輯與(&&):如果兩個操作數都為 true 則返回 true
  • 邏輯或(||):如果兩個操作數中至少有一個為 true,則返回 true
  • 邏輯非(!): 返回操作數的布爾值的相反值
void main() {
  bool a = true;
  bool b = false;

  print(a && b); // false
  print(a || b); // true
  print(!a); // false
}

條件操作符

  • 條件表達式(?:): 如果條件為 true 返回第一個值,否則返回第二個值
  • 如果為空(??):如果左操作數為 null ,則返回右操作數
void main() {
  int a = 10;
  int b = 5;

  var result = a > b ? 'a is greater' : 'b is greater';
  print(result); // a is greater

  String? name;
  print(name ?? 'Guest'); // Guest
}

位操作符

  • 按位與(&):對兩個操作數的每一位執行與操作
  • 按位或(|):對兩個操作數的每一位執行或操作
  • 按位異或(^):對兩個操作數的每一位執行異或操作
  • 按位取反 (~): 對操作數的每一位執行取反操作。
  • 左移 (<<): 將左操作數的二進制表示向左移位。
  • 右移 (>>): 將左操作數的二進制表示向右移位。
void main() {
  int a = 5; // 0101
  int b = 3; // 0011

  print(a & b); // 1 (0001)
  print(a | b); // 7 (0111)
  print(a ^ b); // 6 (0110)
  print(~a); // -6 (二進制表示:..11111010)
  print(a << 1); // 10 (1010)
  print(a >> 1); // 2 (0010)
}
按位與:按位與操作對兩個操作數的每一位執行與操作。只有兩個操作數對應的位都是1時,結果才是1,否則是0。
void main() {
  int a = 12; // 二進制: 1100
  int b = 5;  // 二進制: 0101

  int result = a & b; // 二進制: 0100 (十進制: 4)
  print(result); // 輸出: 4
}
按位或:按位或操作對兩個操作數的每一位執行或操作。只要兩個操作數對應的位有一個是1,結果就是1。
void main() {
  int a = 12; // 二進制: 1100
  int b = 5;  // 二進制: 0101

  int result = a | b; // 二進制: 1101 (十進制: 13)
  print(result); // 輸出: 13
}
按位異或:按位異或操作對兩個操作數的每一位執行異或操作。只有兩個操作數對應的位不同,結果才是1,否則是0。
void main() {
  int a = 12; // 二進制: 1100
  int b = 5;  // 二進制: 0101

  int result = a ^ b; // 二進制: 1001 (十進制: 9)
  print(result); // 輸出: 9
}
按位取反:按位取反操作對操作數的每一位執行取反操作。0變成1,1變成0。
void main() {
  int a = 12; // 二進制: 1100

  int result = ~a; // 二進制: 0011 (在Dart中,這個會顯示為補碼)
  print(result); // 輸出: -13 (在補碼表示中,~1100 為 0011,結果為 -13)
}
左移:左移操作將左操作數的二進制表示向左移位,右側補0
void main() {
  int a = 3; // 二進制: 0011

  int result = a << 2; // 二進制: 1100 (十進制: 12)
  print(result); // 輸出: 12
}
右移:右移操作將左操作數的二進制表示向右移位,左側補0(如果是有符號整數則根據符號位填充)。
void main() {
  int a = 12; // 二進制: 1100

  int result = a >> 2; // 二進制: 0011 (十進制: 3)
  print(result); // 輸出: 3
}

其他操作符

  • 成員訪問(.): 訪問對象的成員
  • 條件成員訪問(?.):安全的訪問對象的成員,如果對象為null,則返回 null
  • 類型轉換(as):將對象轉換為指定的類型
void main() {
  var list = [1, 2, 3];
  print(list.length); // 3

  int? num;
  print(num?.isEven); // null

  var x = 'Hello' as Object;
  print(x is String); // true
}
as 操作符用于類型轉換,但是它不會改變對象的實際類型,它只是告訴編譯器在特定的上下文中將對象視為特定的類型
void main() {
  var x = 'Hello' as Object; // 將字符串 'Hello' 視為 Object 類型
  print(x.runtimeType); // 輸出: String
  print(x is Object);   // 輸出: true
  print(x is String);   // 輸出: true
  
  // 即使我們將 x 視為 Object,它仍然保持 String 類型
  Object y = x; // 這在實際上沒有改變對象的類型
  print(y.runtimeType); // 輸出: String
  print(y is Object);   // 輸出: true
  print(y is String);   // 輸出: true
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容