天天看點

Dart 資料類型,你需要了解一下

Dart 資料類型,你需要了解一下

作者 | __white

Dart的所有東西都是對象。它們都繼承自Object,預設是都是null。Dart中支援以下資料類型:

  • Number 數值型
  • String 字元串
  • Boolean 布爾型
  • List 數組
  • Map 鍵值對
  • Runes ([String]的符文(整數Unicode代碼點))

數值型 num

Dart中提供了兩種數值類型, 分别是整型int和浮點型double.

void main() {
  //定義一個數值型a, 給a指派為1
  num a = 1; 
  print(a);  //列印a的值為1
 
  a = 1.1;  //給a指派為1.1 
  print(a); // 列印a的值為1.1


  int b = 1;
  b = 1.1 //此時會報錯:A value of type 'double' can't be assigned to a variable of type 'int'.
}      

可以發現, 如果是使用 num 聲明的變量,那麼可以在 int 和 double 之間互相轉換.

但如果是直接定義了 int 或者 double , 那麼就不能再賦其他類型的值.

數值的操作

運算符 :
  • + ,
  • - ,
  • * ,
  • / ,
  • ~/,
  • %

加減乘都好了解了 , 我們看一下剩下的幾個操作:

void main() {
  var a = 5 / 2;  // 2.5


  var b = 5 ~/ 2; // 2
  
  var c = 5 % 2;  // 1
}      

直接使用 / 獲得的結果是長除法的結果 , 而使用 ~/ 獲得的結果是短除法中的商, 而是用 % 就是取餘數的操作了.

常用屬性
  • isNaN : num的屬性,判斷一個對象是否為非數字,是數字則傳回false,否則傳回true.
  • isEven : int 的屬性,判斷一個數字是否為偶數
  • isOdd : int 的屬性,判斷一個數字是否為奇數
  • sign : 傳回該整數的符号(對于0傳回0,對于小于0的值傳回 -1,對于大于0的值傳回 1。)
void main() {
  int i = 1;


  print(i.isNaN);   // false
  print(i.isOdd);   // true
  print(i.isEven);  // false
  print(i.sign);      //1
}      
常用方法​
  • abs() : 傳回該整數的絕對值
  • round() : 傳回四舍五入的近似值
  • floorl() : 向下取整
  • ceil() : 向上取整
  • toInt() : 轉成int類型 (舍去小數)
  • toDouble() : 轉成double型
double i = 1.5;


  print(i.sign);   //1.0
  print(i.abs());  //1.5
  print(i.round()); //2
  print(i.ceil()); //2
  print(i.floorl()); //1
  print(i.toInt().toDouble()); //1.0      

字元串

聲明字元串​

普通字元串使用單引号或者雙引号都可以,多行的可以使用'''來包裹.

String a = '我是字元串';
  String b = '我也是字元串';
  String c = '''第一行
第二行 ''';      

聲明原始字元串,直接在字元串前加字元“r” , 可以避免“\”的轉義作用,在正規表達式裡特别有用

print('換行符: \n');   //輸出 : 換行符:


  print(r'換行符: \n');  //輸出 : 換行符: \n*/      
字元串拼接
//使用+ 連接配接
String a = '字元串1'+'字元串2';


//使用空格拼接
String b = 'adc' 'def' 'gg1';


//拼接對象和表達式
String a = 'a';


String k = '123${a.toString()}';
String s = '123${a}';
String l = '123$a';      

可以在字元串中使用${}中包裹來實作拼接, 如果{}内是一個對象可以省略{}.

布爾值

為了表示布爾值,Dart有一個名為的類型bool。隻有兩個對象具有bool類型:true和false,它們都是編譯時常量。

assert 是語言内置的斷言函數,僅在檢查模式下有效 如果斷言失敗則程式立刻終止

String name = 'Li';
 assert(name == "Li");      

List​

稱作集合(數組),是有序且可重複的。

List a = [];
List b = [1,2,3,"a"];
List c = new List();
List<int> d = [1,2,3];      

map​

是鍵值對的集合, 一般來說,map是将鍵和值相關聯的對象。鍵和值都可以是任何類型的對象。每個鍵隻出現一次,但你可以多次使用相同的值。Dart支援map由map文字和map類型提供。

const final var​

再聊點const和final,用法和其他語言類似 在聲明變量的時候,除了var,還可以使用const和final 同時,在使用const和final的時候,可以省略var或者其他類型

var i = 10;
const i = 10;
final i = 10;


int i = 10;
const int i = 10;
final int i = 10;      

const和final定義的都是常量,值不能改變 并且在聲明的時候就必須初始化 但是也有細微差别,簡單來說

const定義的是編譯時常量,隻能用編譯時常量來初始化 final定義的常量可以用變量來初始化

final time = new DateTime.now(); //Ok
const time = new DateTime.now(); //Error,new DateTime.now()不是const常量      

var、final等在左邊定義變量的時候,并不關心右邊是不是常量 但是如果右邊用了const,那麼不管左邊如何,右邊都必須是常量

const list = const[1,2,3];//Ok
const list = [1,2,3];//Error


final list = [1,2,3];//Ok
final list = const[1,2,3];//Ok
final list = const[new DateTime.now(),2,3];//Error,const右邊必須是常量      

感謝閱讀,本文完~

學習更多技能

請擊下方公衆号