iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0
Software Development

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

Day3:內建型態-數字 (Numbers)

  • 分享至 

  • xImage
  •  

前面一篇文章介紹了如何定義變數,接下來的幾篇,我將逐一介紹 Dart 中的內建資料型態。

Dart 常用內建資料型態為

  • numbers
  • strings
  • booleans
  • lists
  • sets
  • maps

數字 (Numbers)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/55367092-4fa9-4c72-867d-a2c9e9b74c5a/dart_num_inheritence.png

num class 繼承圖

Dart 的數字資料型態有兩種:整數 (Integer) 以及浮點數 (Floating-point)。

  • int 類定義整數,double 類定義浮點數。
  • int 類與 double 類皆是 num 的子類別。

整數 (Integer number)

定義於 int 類 中,預設是實作 64位元二進制補數的整數,範圍為 -2^63 ~ 2^63-1。

當編譯成 JavaScript 時,會使用 JavaScript number,其範圍為 -2^53 ~ 2^53-1。

定義整數的方式:

var number = 1;
var hex = 0xFF000011;
int intValue = 100;

發現什麼?

  • 整數可以儲存 10 進制以及 16 進制。
  • 在數值的開頭加上 0x 即可以 16 進制儲存。

int 類屬性

  • bitLength:回傳一個最小儲存該數字的位元個數。
int number = 100;
print(number.bitLength);
// 7

→ 整數 100 換算成二進制為 1100100,所以最小可以儲存的位元個數則為 7。

  • isEven:若整數為偶數回傳 true ,反之回傳 false。
  • isOdd:若整數為基數回傳 true ,反之回傳 false。
print(73.isEven); //false
print(73.isOdd); //true
  • sign:回傳該整數的符號,正數回傳 1 ,負數回傳 -1。
int postiveNumber = 50;
int negativeNumber = -40;

print(postiveNumber.sign); //1
print(negativeNumber.sign); //-1

int 類方法

  • abs() → int:計算整數的絕對值。
  • ceil() → int:回傳大於該數值的最小整數,在整數類就是回傳自己。
  • ceilToDouble() → double:回傳 this.toDouble()。
  • floor() → int:回傳小於該數值的最小整數,在整數類就是回傳自己。
  • floorToDouble() → double:回傳 this.toDouble()。
  • gcd(int other) → int:與輸入的數值取最大公約數。
  • round() → int:四捨五入,在整數類就是回傳自己。
  • roundToDouble() → double:回傳 this.toDouble()。
  • toRadixString(int radix) → String:轉換數值為其他進制。
    • 例:num.toRadixString(2) → 轉換為二進制,
  • toString() → String:轉換成字串。
  • toSigned(int width) → int:回傳數值的最低有效寬度位,保留的最高位擴展到符號。
16.toSigned(5) == -16   //  00010000 -> 11110000
239.toSigned(5) == 15   //  11101111 -> 00001111
                               ^           ^
  • toUnsigned(int width) → int:以非負數的形式回傳數值的最低有效寬度位。
(-1).toUnsigned(5) == 31   // 11111111  ->  00011111
  • truncate() → int:無條件捨去。
  • truncateToDouble() → int:以浮點數回傳無條件捨去的值。

浮點數 (Floating-point number)

定義於 double 類為 IEEE 754 標準的雙精度浮點數 (64-bit)。

var floatingNumber = 1.1;
var exponents = 2.172e5;
double doubleValue = 1; // 等於 double doubleValue = 1.0;

發現什麼?

  • 型別推斷時,若數值含有小數點,則會被指定為 double。
  • 在數值的後方加上 e 可以指定指數。

double 類屬性

  • sign:回傳該浮點數的符號,正數回傳 1.0 ,負數回傳 -1.0。

double 類方法

  • abs() → double:計算浮點數的絕對值。
  • ceil() → int:回傳大於該數值的最小整數。
  • ceilToDouble() → double:以浮點數回傳大於該數值的最小值。
  • floor() → int:回傳小於該數值的最小整數。
  • floorToDouble() → double:以浮點數回傳小於該數值的最小數。
  • remainder(num other) → double:回傳餘數。
  • toString() → String:轉換為字串。
  • truncate() → int:回傳無條件捨去的值。
  • truncateToDouble() → double:以浮點數回傳無條件捨去的值。

Null 安全

int 與 double 都具有空安全的特性。當數字還沒有指定給變數時,該變數的值為 null,在未初始化變數時就使用,Dart 會回傳 null,而不是拋出例外。

int intNumber;
print(intNumber);
//null

double doubleNumber;
print(doubleNumber);
//null

String 轉成 num

在 int 以及 double 中,皆提供了 parse() 靜態函數,將欲轉換的數字字串帶入,即可轉換成該數字。

若帶入的文字無法轉換成數字,則會拋出 FormatException。

//String -> Int
print(int.parse('1')); // OK, result is 1
print(int.parse('1.1')); // FormatException
print(int.parse('a')); // FormatException

//String -> Double
print(double.parse('1.1')); //OK, result is 1.1
print(double.parse('1')); // OK, result is 1.0
print(double.parse('b')); // FormatException

數值直接呼叫方法

不知道你有沒有發現,上方的範例有一些是直接在數值後面用 . 呼叫方法。

例如:

print(73.isEven)

因為在 Dart 中所有的項目都是 Object ,數值經過類型推斷之後就可以呼叫類別的方法。

這樣子的寫法變得更簡潔,更易懂。

小結

Dart 把數字資料型態簡單的分成兩類:整數以及浮點數,所以在程式設計時,不需特別針對儲存的大小使用不同的資料型態。

目前,Dart 還沒有非空型態,所以在定義變數時,若沒有指定數值,其值就會是 null。

在 Dart 中每個項目都是 Object,所以可以直接在數值後面加上 . 使用該型態的方法。


上一篇
Day2 - 定義變數
下一篇
Day4:內建型態 - 字串 (Strings)
系列文
Dart 語言 - 開啟 Flutter 的鑰匙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言