Dart入門01 -- 變量,常量,數(shù)據(jù)類型,類型轉(zhuǎn)換

Dart簡(jiǎn)介

  • Dart 是面向?qū)ο蟮?、類定義的、單繼承的語(yǔ)言,它的語(yǔ)法類似 C 語(yǔ)言,可以轉(zhuǎn)譯為 JavaScript,支持接口 (interfaces)、混入 (mixins)、抽象類 (abstract classes)、具體化泛型 (reified generics)、可選類型 (optional typing) 和 sound type system;

VSCode環(huán)境搭建

  • 在學(xué)習(xí)Dart語(yǔ)法時(shí),本人使用的是VSCode編輯器,下載官方網(wǎng)址為:https://code.visualstudio.com/
  • 其次安裝Flutter,Dart,Code Runner三個(gè)插件,如下所示:
image.png
  • 然后在桌面上創(chuàng)建一個(gè)文件夾01_Dart基本語(yǔ)法,用VSCode打開(kāi),再創(chuàng)建dart文件,就可以進(jìn)行Dart語(yǔ)法演練了;

main函數(shù)

  • Dart語(yǔ)言的入口是main函數(shù),并且必須顯示的進(jìn)行定義;
  • Dart的入口函數(shù)main是沒(méi)有返回值的;
  • 傳遞給main函數(shù)的命令行參數(shù),是通過(guò)List<String>完成的;
  • 代碼展示如下:
image.png

變量

  • 在Dart語(yǔ)言中,所有的變量都可視為一個(gè)對(duì)象,所有的對(duì)象都看作一個(gè)類的實(shí)例,數(shù)字、函數(shù)null也是對(duì)象,所有的對(duì)象都派生自Object類;
變量的定義與初始化
  • 關(guān)鍵字vardynamic都可以定義變量,兩者最大的區(qū)別在于var定義的變量,在初始化后類型確定不可更改,dynamic定義的變量,類型隨值類型的變化而變化;
  • 通過(guò)var關(guān)鍵字定義變量,表明變量的值是可以發(fā)生改變的;
  • 定義變量之后,未進(jìn)行初始化,系統(tǒng)默認(rèn)賦值為null
void main(List<String> args) {
  var num;
  if (num == null) {
    print("num is null"); //執(zhí)行 num = null
  } else {
    print("num = ${num}");
  }

  int a;
  if (a == null) {
    print("a is null"); //執(zhí)行 a = null
  } else {
    print("num = ${num}");
  }
}
  • 整型變量a,定義之后未進(jìn)行初始化,默認(rèn)賦值為null,表明a也是一個(gè)對(duì)象;
  • 使用var關(guān)鍵字定義變量,變量在進(jìn)行初始化之后,變量的類型也就確定了,表明Dart語(yǔ)言支持類型推斷
void main(List<String> args) {
  var a = 100;
  a = "yanzi";
}
  • 上述代碼出現(xiàn)報(bào)錯(cuò),Error: A value of type 'String' can't be assigned to a variable of type 'int',原因在于變量a,在進(jìn)行初始化時(shí),系統(tǒng)經(jīng)類型推斷確認(rèn)為int類型,是不能賦值字符串?dāng)?shù)據(jù)的;
  • 通過(guò)dynamic關(guān)鍵字定義變量,dynamic類型的變量,在使用中可以隨時(shí)改變其類型,系統(tǒng)會(huì)根據(jù)該變量的當(dāng)前值類型確定其當(dāng)前時(shí)刻的類型;
void main(List<String> args) {
  dynamic a = 100;
  a = "yanzi";
}
  • 上述代碼不會(huì)報(bào)錯(cuò),也就是說(shuō)dynamic修飾的變量,可以隨時(shí)更改變量的數(shù)據(jù)類型;

常量

  • 關(guān)鍵字constfinal,都可定義常量,其值不可發(fā)生更改,且定義與初始化同時(shí)進(jìn)行,否則會(huì)報(bào)錯(cuò);
  • const定義的常量,在編譯時(shí)就已經(jīng)初始化,且不可改變;
  • final定義的常量,在運(yùn)行時(shí)進(jìn)行初始化,且不可改變;
void main(List<String> args) {
  const a1 = "yanzi";
  const int a2 = 100;
  print(a1);
  print(a2);

  final name1 = "yanzi";
  final String name2 = "sss";
  print(name1);
  print(name2);
}

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

  • 在Dart語(yǔ)言中,支持的數(shù)據(jù)類型有8種,依次是num數(shù)值類型,String字符串類型bool布爾型,List數(shù)組類型,Map字典類型,Set集合類型,Runes類型,Symbols類型;
num數(shù)值類型
  • num數(shù)值類型有兩種分別為intdouble,均繼承自num類;
void main(List<String> args) {
  int a = 100;
  double b = 120.2;

  print("a = ${a}");
  print("b = $");

  double c = 200; //自動(dòng)將int轉(zhuǎn)成double
  print("c = ${c}");
}
  • double c = 200,會(huì)自動(dòng)將int轉(zhuǎn)成double類型;
String字符串類型
  • 在Dart中,可使用雙引號(hào),也可以使用單引號(hào)創(chuàng)建字符串;
  • 可以用${字符串變量名},引用字符串;
void main(List<String> args) {
  String name1 = "yanzi";
  String name2 = 'SF';
  var name3 = "ssss";

  print("name1 = ${name1}");
  print("name2 = ${name1}");
  print("name3 = ${name1}"); //name3 = yanzi
}
字符串的常用方法
  • 獲取字符串長(zhǎng)度
void main(List<String> args) {
  String name1 = "yanzi";

  print(name1.length); //5
}
  • 判斷字符串是否為空
void main(List<String> args) {
  String name1 = "yanzi";

  print(name1.isEmpty); //false
}
  • 判斷字符串是否不為空
void main(List<String> args) {
  String name1 = "yanzi";

  print(name1.isNotEmpty); //true
}
  • 字符串拼接
    • 使用加號(hào)+,進(jìn)行字符串拼接;
    • 使用${字符串變量名},進(jìn)行字符串內(nèi)嵌,實(shí)現(xiàn)字符串拼接效果;
void main(List<String> args) {
  String name1 = "yanzi";
  String name2 = " ssss";
  String name3 = name1 + name2;

  String name4 = "asd" + "123";

  print("name3 = " + name3); //name3 = yanzi ssss
  print("name3 = ${name3}"); //name3 = yanzi ssss
  print("name4 = " + name4); //name4 = asd123
}
  • 字符串截取
void main(List<String> args) {
  String name1 = "aaabbb";
  //截取指定區(qū)間的字符串
  print(name1.substring(0, 2)); //aa

  //截取指定index至末尾
  print(name1.substring(3)); //bbb

  //利用 指定字符 切割 獲取數(shù)組 
  String str = "a,b,c,d,e";
  List<String> strs = str.split(",");
  print(strs); //[a, b, c, d, e]
}
  • 字符串轉(zhuǎn)化大小寫(xiě)
void main(List<String> args) {
  String name1 = "aaabbb";
  String name2 = "AddSSS";

  //轉(zhuǎn)成大寫(xiě)
  print(name1.toUpperCase()); //AAABBB

  //轉(zhuǎn)成小寫(xiě)
  print(name2.toLowerCase()); //addsss
}
  • 字符串去除空格
void main(List<String> args) {
  String name1 = " aaabbb ";

  //去除左右兩邊空格
  print(name1.trim()); //

  //去除左邊空格
  print(name1.trimLeft()); 

  //去除右邊空格
  print(name1.trimRight()); 
}
bool布爾型
  • 使用關(guān)鍵字bool定義布爾型變量,屬于bool類型;
void main(List<String> args) {
  bool isTop = false;
  bool isRich = true;

  if (isTop) {
    print("高");
  }

  if (isRich == true) {
    print("帥");
  }
}
List數(shù)組類型
  • 使用List類,表示數(shù)組,存儲(chǔ)數(shù)據(jù)元素;
void main(List<String> args) {
  //int整型數(shù)組
  var arr1 = List<int>();
  arr1.add(10);
  arr1.add(20);
  arr1.add(30);
  arr1.add(100);
  arr1.add(200);

  print(arr1); //[]
}
Map字典類型
  • 使用Map類,表示字典,存儲(chǔ)鍵值對(duì)數(shù)據(jù);
void main(List<String> args) {
  var dic1 = {"name": "yanzi", "age": 16};
  var dic2 = new Map();
  dic2["name"] = "yanzi";
  dic2["age"] = 30;

  Map<String, String> dic3 = new Map();
  dic3["name"] = "yanzi";
  dic3["age"] = "15";

  Map dic4 = new Map<String, String>();
  dic4["name"] = "liyanyan";
  dic4["age"] = "33";

  Map dic5 = <String, String>{"name": "yanzi", "age": "23"};
}
Set集合類型
  • Set是一系列無(wú)序項(xiàng)的集合;
void main(List<String> args) {
  //定義初始化
  Set<String> names1 = {};
  var name2 = <String>{};

  //添加元素
  name2.add("yanzi");
  name2.add("sss");
  name2.add("aaa");

  print(name2); //{yanzi, sss, aaa}
}
Runes類型
  • Dart的rune類型主要是unicode編碼之類的;
Symbols類型
  • Dart的Symbol表示程序中出現(xiàn)的操作符或標(biāo)識(shí)符;

類型轉(zhuǎn)換

  • 字符串轉(zhuǎn)int,double 數(shù)值,調(diào)用num類型的parse方法;
void main(List<String> args) {
  String str1 = "12345";
  print(int.parse(str1)); //12345

  String str2 = "123.56";
  print(double.parse(str2)); //123.56
}
  • int,double數(shù)值轉(zhuǎn)字符串,調(diào)用num類型的toString方法;
void main(List<String> args) {
  int num1 = 100;
  print(num1.toString()); //100

  double num2 = 123.56;
  print(num2.toString()); //123.56
}
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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