Dart入門寶典第一章——變量常量聲明和數(shù)據(jù)類型介紹

前言

??其實(shí)在2019年初的時(shí)候已經(jīng)看過Dart的入門教學(xué)視頻,那時(shí)候剛開始學(xué)flutter,需要先學(xué)Datr語(yǔ)言,由于在公司一直做的都是原生開發(fā),并沒有真正使用flutter開發(fā),最近打算走混合開發(fā)的路線,所以現(xiàn)在重拾Dart基礎(chǔ),很感謝雷宇老師的視頻教程,這里將看視頻后的筆記整理和歸納,以便日后的復(fù)習(xí),也希望可以幫助到想要入門Dart語(yǔ)言的小伙伴。

變量

  • Dart中使用 var 聲明變量, 可賦予不同類型的值
  • 未初始化時(shí),默認(rèn)值為null
  • 使用final聲明一個(gè)只能賦值一次的變量
void main() {
   var a;
   print(a);

   a = 1;
   print(a);

   a = "Hello Dart!";
   print(a);
}

此時(shí)打印結(jié)果為:

null
1
Hello Dart!
void main() {
   final b = 1;
   b = "Hello Dart!"; //此處編輯器會(huì)提示有錯(cuò)誤
}

b聲明為final時(shí),只能賦值一次,再次賦值編輯器會(huì)報(bào)錯(cuò)

The final variable 'b' can only be set once.

常量

  • Dart中使用const聲明常量
  • 使用const聲明的必須是編譯期常量
void main() {
   const c = 2;
   c = 3; //此處編輯器會(huì)提示有錯(cuò)誤 同上
}

final 和 const的區(qū)別

  1. 用final修飾的變量,必須在定義時(shí)將其初始化,其值在初始化后不可改變;
    const用來定義常量。

  2. const比final更加嚴(yán)格。final只是要求變量在初始化后值不變,但通過final,我們無法在編譯時(shí)(運(yùn)行之前)知道這個(gè)變量的值;而const所修飾的是編譯時(shí)常量,我們?cè)诰幾g時(shí)就已經(jīng)知道了它的值,顯然,它的值也是不可改變的。

數(shù)據(jù)類型

  • 數(shù)值型-Number
  • 字符串-String
  • 布爾型-Boolean
  • 列表-List
  • 鍵值對(duì)-Map
  • Runes、Symbols //比較少用

數(shù)值型

Dart中num為以下兩種類型:

  1. int 整數(shù)型
  2. double 浮點(diǎn)型

聲明為num類型的變量,可以賦值為整數(shù)或者浮點(diǎn)數(shù)

void main() {
   num a = 10;
   a = 10.5;
}

指定為int型的變量,不能賦值為浮點(diǎn)數(shù):

void main() {
   int b = 20;
   b = 20.5; //此處編輯器會(huì)報(bào)錯(cuò)
}

int 和 double 都是num類的子類,各自的實(shí)現(xiàn)有所不同,int類型的值無法賦值為浮點(diǎn)數(shù),而浮點(diǎn)數(shù)類型的值可以賦值為整數(shù)。

數(shù)值型操作
  • 運(yùn)算符:
  1. + 加
  2. - 減
  3. * 乘
  4. / 處
  5. ~/ 取整
  6. % 取余
void main() {
    int a = 10;
    int b = 20;

    print(a+b);
    print(a-b);
    print(a*b);
    print(a/b);
    print(a~/b);
    print(a%b);
}

打印結(jié)果為:

30
-10
200
0.5
0  
10
  • 常用屬性:isNaN(是否為非數(shù)字)、isEven(是否為偶數(shù))、isOdd(是否為奇數(shù))等
void main() {
    int a = 10;
    
    print(0.0 / 0.0);
    print((0.0 / 0.0).isNaN);
    print(a.isEven); 
    print(a.isOdd);
}

打印結(jié)果為:

NaN
true
true
false

由于double類內(nèi)定義了0.0 / 0.0為非數(shù)字,所以 (0.0 / 0.0).isNaN 的結(jié)果為true

  • 常用方法:abs()、round()、floor()、ceil()、toInt()、toDouble()
void main() {
    int a = -10;
    print(a.abs()); //取絕對(duì)值

    double b = 10.5;
    print(b.round()); //四舍五入
    print(b.floor()); //不大于本身的最大整數(shù)
    print(b.ceil()); //不小于本身的最小整數(shù)
    print(b.toInt()); //轉(zhuǎn)換為整數(shù)
    print(a.toDouble()); //轉(zhuǎn)換為浮點(diǎn)數(shù)
}

打印結(jié)果為:

10
11
10
11
-10.0
10

字符串

字符串的創(chuàng)建
  • 使用單引號(hào)、雙引號(hào)創(chuàng)建字符串
  • 使用三個(gè)引號(hào)或雙引號(hào)創(chuàng)建多行字符串
  • 使用r創(chuàng)建原始raw字符串
void main() {
    String str1 = 'Hello';  //也可用""
    print(str1);
    
    String str2 = '''Hello  
                      Dart'''; //也可用"""
    print(str2);

    String str3 = "Hello \n Dart";
    print(str3);

    String str4 = r"Hello \n Dart";
    print(str4);
}

打印結(jié)果為:

Hello
Hello  
                      Dart
Hello 
 Dart
Hello \n Dart

其中str3使用\n轉(zhuǎn)義換行符,打印的結(jié)果帶有換行,而str4在字符串前多了一個(gè)r,表明使用原始的字符串,即\n不會(huì)被解析為換行符,故str4打印結(jié)果為原字符串 Hello \n Dart

字符串操作
  • 運(yùn)算符:
  1. + 拼接
  2. * 重復(fù)幾次
  3. == 兩個(gè)字符串是否相同
  4. [] 取字符串中的字符
void main() {
    String str1 = "I";
    String str2 = "Love";
    String str3 = "Beyond";

    print(str1 + str2 + str3);
    print(str3 * 3);
    print(str1 == str2);
    print(str3[3]);
}

打印結(jié)果為:

ILoveBeyond
BeyondBeyondBeyond
false
o
  • 插值表達(dá)式:${expression}
void main() {
    int a = 1;
    int b = 2;
    print("a + b = ${a + b}");
    print("a = $a,b=$b");
}

打印為結(jié)果:

a + b = 3
a = 1,b=2
  • 常用屬性:length(字符串長(zhǎng)度)、isEmpty(是否為空字符串)、isNotEmpty(是否為非空字符串)
void main() {
    String str = "beyond";
    print(str.length);
    print(str.isEmpty);
    print(str.isNotEmpty);
}

打印為結(jié)果:

6
false
true
  • 常用方法
  1. contains() 是否包含
  2. subString() 截取字符串
  3. toLowerCase() 轉(zhuǎn)換為小寫字母
  4. toUpperCase() 轉(zhuǎn)換為大寫字母
  5. startsWith() 是否以某個(gè)字符串開頭
  6. endsWith() 是否以某個(gè)字符串結(jié)尾
  7. trim()、trimLeft()、trimRight() 修剪,去除左右空格
  8. indexOf()、lastIndexOf() 某個(gè)字符串出現(xiàn)的初始下標(biāo)、結(jié)束下標(biāo)
  9. split() 根據(jù)某個(gè)規(guī)則將字符串分割成一個(gè)字符數(shù)組
  10. replaceAll() 將字符串中對(duì)應(yīng)字符串替換成某個(gè)字符串
void main() {
    String str = " I love beyond ";
    print(str.contains("love")); //是否包含love字符串
    print(str.substring(1,2)); // [1,2) 左閉右開 即取第2個(gè)字符I
    print(str.toLowerCase()); //轉(zhuǎn)換為小寫
    print(str.toUpperCase()); //轉(zhuǎn)換為大寫
    print(str.startsWith("I")); //是否以I開頭
    print(str.endsWith("beyond")); //是否以beyond結(jié)尾
    print(str.trim()); //去除兩邊的空格
    print(str.indexOf("o")); //首次出現(xiàn)o的下標(biāo)
    print(str.lastIndexOf("o")); //最后出現(xiàn)o的下標(biāo)
    print(str.split(" ")); //以空格分割
    print(str.replaceAll("I", "We")); //替換I為We
}

打印結(jié)果為:

true
I
 i love beyond 
 I LOVE BEYOND 
false
false
I love beyond
4
11
[, I, love, beyond, ]
 We love beyond 

布爾型

  • 使用bool聲明
  • 布爾值只有true和false
void main() {
   bool isTrue = true;
   bool isFalse = false; 
}

List(數(shù)組)

List(數(shù)組)的創(chuàng)建
  • 創(chuàng)建可變List:var list = [1,2,3];
  • 創(chuàng)建不可變的List: const list = [1,2,3];
  • 構(gòu)造方法創(chuàng)建:var list = new List();
void main() {
  var list1 = [1, 2.0, "Dart", true];
  list1[0] = "Hello";
  list1[1] = "World";
  print(list1);

  var list2 = const [1,2,3];
  //list2[0] = 4; 運(yùn)行時(shí)會(huì)報(bào)錯(cuò) Unsupported operation: Cannot modify an unmodifiable list

  var list3 = new List();
  list3.add("Hello");
  list3.add("World");
  print(list3);
}

打印結(jié)果為:

[Hello, World, Dart, true]
[Hello, World]
常用操作
  • [] 取出某個(gè)下標(biāo)的元素
  • length 數(shù)組的長(zhǎng)度
  • add(), insert() 插入元素
  • remove() 移除指定位置元素或指定元素
  • clear() 清空數(shù)組
  • indexOf(), lastIndexOf() 某個(gè)元素首次出現(xiàn)和最后一次出現(xiàn)的下標(biāo)
  • sort() 排序
  • sublist() 截取
  • shuffle() 隨機(jī)打亂
  • asMap() 轉(zhuǎn)成map
  • forEach()遍歷
void main() {
   var list = ["Java","Kotlin","Python"];

   print(list[0]); //取第一個(gè)元素
   print(list.length); //數(shù)組長(zhǎng)度

   //往數(shù)組末尾添加元素
   list.add("Js");
   print(list);

   //往指定位置添加元素
   list.insert(0, "PHP");
   print(list);

   //移除指定位置元素
   list.remove(0);
   print(list);

   //移除數(shù)據(jù)中某個(gè)元素
   list.remove("Kotlin");
   print(list);

   //元素"PHP"首次出現(xiàn)的下標(biāo)
   print(list.indexOf("PHP"));
   //元素"Js"最后一次出現(xiàn)的下標(biāo)
   print(list.lastIndexOf("Js"));

   //排序  
   list.sort();
   print("sort result: $list");

   print("subList result: ${list.sublist(0,2)}");

   print("asMap result: ${list.asMap()}");
   list.forEach(print);

   //清空數(shù)組
   list.clear();
   print("clear result: $list");
}

打印結(jié)果:

Java
3
[Java, Kotlin, Python, Js]
[PHP, Java, Kotlin, Python, Js]
[PHP, Java, Kotlin, Python, Js]
[PHP, Java, Python, Js]
0
3
sort result: [Java, Js, PHP, Python]
subList result: [Java, Js]
asMap result: {0: Java, 1: Js, 2: PHP, 3: Python}
Java
Js
PHP
Python
clear result: []

Map

Map創(chuàng)建
  • 創(chuàng)建可變Map: var language = {"first": "Java", "second": "Dart"};
  • 創(chuàng)建不可變Map: var language = const {"first": "Java", "second": "Dart"};
  • 構(gòu)造創(chuàng)建: var language = new Map();
void main() {
  var map1 = {"first": "Dart", 1: true, true: "2"};
  print(map1);
  print(map1["first"]);
  print(map1[true]);
  map1[1] = "1";
  print(map1);

  var map2 = const {1: "Dart", 2: "Java"};
  //map2[1] = "Js"; 運(yùn)行時(shí)會(huì)報(bào)錯(cuò) Cannot set value in unmodifiable Map

  var map3 = new Map();
  map3["first"] = 1;
  map3["second"] = 2;
  print(map3);
}

打印結(jié)果:

{first: Dart, 1: true, true: 2}
Dart
2
{first: Dart, 1: 1, true: 2}
{first: 1, second: 2}
常用操作
  • []
  • length
  • isEmpty()
  • isNotEmpty()
  • containsKey() 是否包含某個(gè)鍵
  • containsValue() 是否包含某個(gè)值
  • keys 鍵的集合
  • values 值的集合
  • forEach() 遍歷
  • remove() 移除指定鍵的元素
void main() {
  var map = {"first": "Dart", 1: true, true: "2"};
  print(map["first"]);
  print(map.length);
  print(map.isEmpty);
  print(map.isNotEmpty);
  print(map.containsKey(1));
  print(map.containsValue("2"));
  print(map.keys);
  print(map.values);
  map.forEach(f);
  map.remove(true);
  print(map);
}

void f(key, value){
  print("key = $key, value = $value");
}

打印結(jié)果:

Dart
3
false
true
true
true
(first, 1, true)
(Dart, true, 2)
key = first, value = Dart
key = 1, value = true
key = true, value = 2
{first: Dart, 1: true}

dynamic

使用 dynamic 聲明的變量可以賦值為不同類型的值,List泛型指定為 dynamic 表明數(shù)組的元素可以是不同類型的,如下:

void main() {
   dynamic a = 1;
   a = 2.0;
   a = "3";
   a = true;
   
   var list = new List<dynamic>();
   list.add(0);
   list.add(1.0);
   list.add("2");
   list.add(true);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容