0%

[Flutter讀書會]Dart101:Built-inTypes資料型別-Numbers

前提情要

上篇介紹完Dart語言開發環境與第一支Hello World程式後,這篇要來介紹資料型別與變數,筆者就以官方Dcoument文件中的Language>Tour為主,參考其介紹方式,解釋各個資料型別,此篇主要介紹Numbers這個資料型別。

內容

筆者這邊還是簡單列一下筆者這邊的開發環境

  • 作業系統:Mac OS
  • Dart版本:2.17.6
  • 編輯器:Visual Studio Code

Numbers

int

畢竟Flutter框架透過Dart程式語言撰寫各種跨平台應用程式,因此大小區間依照運行的環境而不一樣,移動式裝置環境中為-2^63~2^63-1Web環境中為因JS語言特性而-2^53~2^53-1

double

依照IEEE 754標準宣告而成的浮點數

宣告方式

1
2
3
4
5
6
7
// 無小數點為int
var x = 1;
var hex = 0xDEADBEEF;

// 有小數點則是double
var y = 1.1;
var exponents = 1.42e5;

其中特別的是也可以直接宣告為num,令該變數可以是int,也可以是double

1
2
num x = 1; // x can have both int and double values
x += 2.5;

若宣告變數為double時,未加小數點也是可以的

1
double z = 1; // Equivalent to double z = 1.0.

轉換型別

撰寫程式過程避免不了轉換型別,那Dart程式語言中是如何實作的呢,讓筆者帶大家來看看,因Numbers分為intdouble,針對這兩種有不一樣的撰寫方式

1
2
3
4
5
6
7
// String -> int
var one = int.parse('1');
assert(one == 1);

// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);

當然也會有時機點從Numbers轉換至Strings的情形

1
2
3
4
5
6
7
// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');

// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');

位元與移位運算子

畢竟我們撰寫的程式,最終都要轉換成01的形式於終端設備中運行,有些應用免不了操作這種低階形式的運算,包含

  • <<左移位
  • >>右移位
  • >>>不帶正負號的向右移位
  • & AND
  • | OR
  • ^ XOR
1
2
3
assert((3 << 1) == 6); // 0011 << 1 == 0110
assert((3 | 4) == 7); // 0011 | 0100 == 0111
assert((3 & 4) == 0); // 0011 & 0100 == 0000

算數運算子

這就筆者不用多說了,Numbers理所當然的有算術相關的運算子,如下

  • + 運算子
  • - 運算子
  • * 運算子
  • / 運算子
  • ~/ 運算子
  • % 運算子

其中比較特別的是除法相關的運算子,若想要得到完整的商數則使用一般的/符號,若只想得到商數中的整數部份則使用~/符號

1
2
assert(5 / 2 == 2.5); // Result is a double
assert(5 ~/ 2 == 2); // Result is an int

其他相關方法

  • abs()取絕對值
  • ceil()無條件進位
  • floor()無條件捨去
1
2
3
4
5
6
7
8
9
10
11
void main() {
var i = -1.5;
var j = 1.5;
var k = 1.5;
print(i.abs());
print(j.ceil());
print(k.floor());
}
// 1.5
// 2
// 1

dart:math函式庫介紹

筆者這邊就先帶過,傳達數字操作時有一個現成的函式庫可以使用(載入外部套件詳細使用方式,會有專篇說明),使用方式如下

1
2
// import關鍵字載入欲使用套件
import 'dart:math';

比較會用到的部份就取得Random數字的函式

1
2
3
var intValue = Random().nextInt(10); // Value is >= 0 and < 10.
var doubleValue = Random().nextDouble(); // Value is >= 0.0 and < 1.0.
var boolValue = Random().nextBool(); // true or false, with equal chance.

詳細請參考dart:math的完整API列表資訊

https://api.dart.dev/stable/2.17.6/dart-math/dart-math-library.html

結論

哇,原本筆者打算透過一篇文章帶過所有資料型別,但看官方文件,有很多放著連結說,詳細請看此,點過去後不得了,根本可以寫好幾篇的程度,但是還是為了篇幅,筆者還是以一個Numbers及相關函式集結在一起,變成一篇獨立的篇幅呈現,希望對大家有幫助,下篇再見啦。

參考