Flutter常見數據類型及數據類型轉換


簡介

既然 Dart 是一門語言,那么就和我們所知道語言一樣,有基本的數據類型以及常見的流程處理語法,那么我們就來了解下。

Dart 的所有東西都是對象,包括數字,函數等。它們都繼承自 Object ,默認是都是 null(包括數字),所以數字,字符串都可以調用各種方法。

常亮與變量

變量

使用 var 聲明變量,可賦予不同類型的值;未初始化時,默認值為 null ;使用 final 聲明一個只能賦值一次的變量

void main(){
  
  // 聲明一個變量 a
  var a;
  print(a);   // 打印 a 的值,顯示為 null

  a = 10;
  print(a);   //  打印出來的結果為 10

  a = "測試字符串"; 
  print(a);   // 打印出來的結果為 測試字符串

  a = 30;
  print(a);   //  打印出來的結果為 30

  final b = 10;
  b = 20; // 這個會報錯,有提示: [dart] 'b', a final variable, can only be set once.

}

  

常量

在 dart 中使用 const 聲明常量;使用 const 聲明的必須是編譯期常量。

void main(){
  const a  = 10;
  a = 20;   // 這里也會報錯:[dart] Constant variables can't be assigned a value.
}

  

在上面我們可以看到 dart 的一些簡單的語法。其實和 js 蠻像,聲明的變量的數據類型是隨便去改變的,沒有一個固定的數據類型(例如:java 這種語言)。其次就是 final 和 const 都可以聲明變量,並且聲明了變量之后都不能修改。

這里簡單的說下 final 與 const 的區別:

final 要求變量只能初始化一次,並不要求賦的值一定是編譯時常量,可以是常量也可以不是。而 const 要求在聲明時初始化,並且賦值必需為編譯時常量。

Dart中的內置類型

在Dart 有幾種內置的數據類型:數值型-Number、布爾型-boolean、鍵值對-Map、字符串-String、列表-List、其他類型-Runes、Symbols

數值型

Dart 中只提供了兩種類型:

num
1、整形int
2、浮點型double

void main(){
  
  num a = 10;   // 整形
  a = 20.1;     // 浮點型

  int i = 10;
  i = 10.1;     // 這個地方會報錯,因為將 int 型的數據改為 double 型

  double d = 20.1;
  d = 20;       // 這個地方會報錯,因為將 double 型的數據改為 int 型
}

  

從上面可以看到如果是使用 num 聲明的變量,可以隨意的轉換類型,但是如果是使用了int 或者 double 明確的聲明,那么就不能轉換了


數值型的操作

運算符: +、 - 、* 、/ 、 ~/ 、 %

常用屬性: isNaN、isEven、isOdd

常用方法:abs()、round()、floorl()、ceil()、toInt()、toDouble()

// 由於常用的方法在其他語言中都有,就不過去的贅述,下面列出一些特殊的
void main(){
  
  int i = 10;
  double d = 20.1;
  
  print(i/d);   // 0.49751243781094523
  print(i~/d);  // 0  這個操作是取整

  print( i.isOdd );   // 判斷是奇數
  print( i.isEven );  // 判斷是偶數
}

一些常見的轉換

// String -> int
var one = int.parse('1');
assert(one == 1);

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

// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');

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

字符串

在 dart 中居然可以使用 單引號 和 雙引號聲明字符串。這兩種方式都可以。

void main(){
  String string = '單引號聲明字符串';
  String string1 = "雙引號聲明字符串";
}

在 String 中單、雙引號互相嵌套的情況

void main(){
  
  String str = '單引號中的"雙引號"';
  String str1 = "雙引號中的'單引號'";
  print(str);
  print(str1);

  String str2 = '單引號中的 \'單引號\' ';
  String str3 = "雙引號中的 \"雙引號\" ";
  print(str2);
  print(str3);
}

字符串拼接的方式

下面列出 dart 中拼接字符串的各種騷操作(黑魔法)。

void main(){
  // 使用的是空格拼接,多個空格也可以
  String str1 = '單引號空格字符串' '拼接'        '~';    // 單引號字符串空格拼接~

  // 使用換行符以及空格
  String str2 = '單引號符串'
    '換行了' '再加空格' '拼接';       // 單引號符串換行了再加空格拼接

  // 單雙引號 空格拼接
  String str3 = "單雙引號空格字符串" '拼接'        "~";    // 單雙引號字符串空格拼接~

  // 單雙引號 換行符以及空格
  String str4 = "單雙引號符串"
    '換行了' '再加空格' '拼接';       // 單雙引號符串換行了再加空格拼接

  String str5 = '''
    使用3個單引號、
    看到我使用了么
  ''';
          

  String str6 = """
    使用3個雙引號、
    看到我使用了么
  """;

  String str7 = "算了,還是正常一點" + ",使用 + 來拼接";
}

從上面可以看到 dart 中可以使用空格來做為拼接。所以我們繼續研究下。

void main(){

  // 拼接字符串, 輸出:單引號空格 或者 雙引號空格
  String blockStr = '單引號''空格';
  String blockStr1 = '單引號' '空格';
  String blockStr2 = "雙引號""空格";
  String blockStr3 = "雙引號" "空格";

  // 下面這兩種情況會報錯
  // String blockStr4 = '單引號''''空格';
  // String blockStr5 = "雙引號""""空格";

  // 測試中間添加字符
  String blockStr6 = '單引號''_''空格';   // 輸出:單引號_空格
  String blockStr7 = "雙引號""#""空格";   // 注意不能使用 $,$會報錯, 輸出:單引號#空格

  // 單雙引號混合使用
  String blockStr8 = '單""""引號';        // 輸出:單""""引號
  String blockStr9 = '單""_""引號';       // 輸出:單""_""引號

  // 單雙引號混合使用
  String blockStr10 = "雙''''引號";        // 輸出:雙''''引號
  String blockStr11 = "雙''_''引號";       // 輸出:雙''_''引號
}

${表達式}的使用

類似於JS中 ES6 上面的表達式的使用,感覺是相通的。

void main(){

  var flag = false;
  var str = "測試字符串";

  print("我們來驗證字符串:${str}" "然后看看我們的 flag:${flag}");
  // 最后輸出的結果為:我們來驗證字符串:測試字符串然后看看我們的 flag:false
}

布爾值

assert 是語言內置的斷言函數,僅在檢查模式下有效
在開發過程中, 除非條件為真,否則會引發異常。(斷言失敗則程序立刻終止)。

// 檢查是否為空
var fullName = '';
assert(fullName.isEmpty);

// 為0檢查
var hitPoints = 0;
assert(hitPoints <= 0);

// 檢查是否為 null.
var unicorn;
assert(unicorn == null);

// 檢查是否為 NaN.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);

List列表

實例化 List 的方法如下

void main(){

  // 使用構造創建
  var list = new List();

  //創建一個int類型的list
  List intlist = [1, 2, 3];

  // 創建一個常量List, 不可以改變的List
  List constList = const[10, 7, 23];

}

dart 中數組常用的方法

void main(){

  //  在數組中可以存放多個不同類型的對象
  var list = [1, 2, 3, 'Flutter', true];
  print(list);      // 輸出的結果:[1, 2, 3, Flutter, true]

  // 修改數組下標為2 的值
  list[2] = 'Dart';
  print(list);      // 輸出的結果:[1, 2, Dart, Flutter, true]

  // 獲取數組的長度
  print(list.length);   // 輸出的結果:5

  // 向數組中添加元素
  list.add("value");
  print(list);        // 輸出的結果:[1, 2, Dart, Flutter, true, value]

  // 向數組中的指定位置添加元素
  list.insert(1, 'element');  
  print(list);      // 輸出的結果:[1, element, 2, Dart, Flutter, true, value]

  // 移除數組中的元素
  list.remove("value");
  print(list);      // 輸出的結果:[1, element, 2, Dart, Flutter, true]

  // 移除數組中指定的元素
  list.removeAt(1);
  print(list);      // 輸出的結果:[1, 2, Dart, Flutter, true]

  // 判斷數組中是否有某個元素
  print(list.indexOf("element"));   // 輸出結果:-1

  // 可以使用 sort() 函數來排序, 但是由於我們使用定義的數組類型不一樣,就不能使用
  var intlist = [1, 2, 5, 6 ,3];

  // 根據語法提示: List.sort([(int, int) → int compare]) → void
  intlist.sort( (a, b) =>  a.compareTo(b) );
  print(intlist);   // 輸出結果:[1, 2, 3, 5, 6]

}

map 集合

創建 Map 集合

void main(){

  // 創建Map 
  var language = {'fisrt': 'dart', 'second': 'java'};

  // 創建不可變的 Map
  var constLanguage = const {'fisrt': 'dart', 'second': 'java'};

  // 通過構造器創建
  var initLanguage = new Map();
}

Map 中常用的方法

void main(){

  // 創建Map 
  var map = {'fisrt': 'dart', 'second': 'java'};

  // 獲取長度
  print(map.length);    // 輸出結果:2

  // 判斷是否為空
  print(map.isEmpty);     // 輸出結果:false
  print(map.isNotEmpty);  // 輸出結果:true

  // 獲取到所有的 key
  print(map.keys);        // 輸出結果:(fisrt, second)

  // 獲取到所有的 values
  print(map.values);      // 輸出結果:(dart, java)

  // 判斷是否包含某個key
  print(map.containsKey("key"));    // 輸出結果:false

  // 判斷是否包含某個value
  print(map.containsValue("key"));    // 輸出結果:false

  // 添加一個新的元素進去
  map['third'] = 'key';
  print(map);         // 輸出結果:{fisrt: dart, second: java, third: key}

  // 循環打印 代碼提示:Map.forEach((String, String) → void f) → void
  map.forEach( (key, value) =>  getMap(key, value) );
}


void getMap(key, value){
  print("key:${key}, value:${value}");
}

  

dynamic 關鍵字

這個關鍵字就類似定義我們在 JS 中定義變量的情況。先看下面的代碼

void main(){
  // a 的數據類型可以隨意改變,這種類型就是 dynamic
  var a ;
  a = 10;
  a = "dart";

  // 這里我們使用 dynamic 聲明
  dynamic d = 10;
  d = 'dart';
}

  

原文地址:https://blog.csdn.net/qq_18948359/article/details/82749659


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM