今天主題是Dart編程語(yǔ)言的數(shù)據(jù)類型,Dart語(yǔ)言是Google公司出的一種面向?qū)ο箝_(kāi)源的編程語(yǔ)言.在上一篇中我們已經(jīng)安裝好了flutter 環(huán)境,flutter sdk中自帶
dartsdk,我們都已經(jīng)配置好了
Hello Dart
- Hello World
學(xué)習(xí)編程語(yǔ)言,從祖?zhèn)鞯腍ello World開(kāi)始,在VSCode中創(chuàng)建一個(gè)helloworld.dart文件.輸入一下內(nèi)容
main(List<String> args) {
print('hello world');
}
變量和常量
變量
- 使用
var聲明變量可賦予不同類型的值 - 未初始化時(shí),默認(rèn)值是
null
常量
- 使用
final聲明一個(gè)只能賦值一次的常量 - 使用
const聲明常量 -
使用聲明的必須是編譯期常量 (運(yùn)行時(shí))
變量和常量.png
final和const有什么區(qū)別呢?
- const在賦值時(shí), 賦值的內(nèi)容必須是在編譯期間就確定下來(lái)的(編譯期常量)
- final在賦值時(shí), 可以動(dòng)態(tài)獲取, 比如賦值一個(gè)函數(shù) (運(yùn)行時(shí)常量)
區(qū)別可以看下
Flutter 知識(shí)梳理(Dart)-Dart中static final const 區(qū)別
數(shù)值型
對(duì)于數(shù)值來(lái)說(shuō),我們也不用關(guān)心它是否有符號(hào),以及數(shù)據(jù)的寬度和精度等問(wèn)題。只要記著整數(shù)用
int,浮點(diǎn)數(shù)用double就行了。
數(shù)值型.png
數(shù)值型操作
- 運(yùn)算符:
+,-,*,/,%,~/(取整) , - 常用屬性:
isNaN,isEven,isOdd - 常用方法:
abs(),round(),floor(),ceil(),toInt(),toDouble()
數(shù)值表達(dá)式.png
字符串
- 使用引號(hào),或者雙引號(hào)創(chuàng)建字符串
- 使用三個(gè)引號(hào)或雙引號(hào)創(chuàng)建多行字符串
- 使用r創(chuàng)建原始raw字符串
String str1 = "Hello"; //''
String str2 = """Hello
Dart""";
//輸出:
//Hello
// Dart
print(str2);
String str3 = "Hello \nDart";
//輸出
//Hello
//Dart
print(str3);
String str4 = r"Hello \nDart";
print(str4);
//輸出Hello \nDart
字符串操作
- 運(yùn)算符:
+,*,==,[],
String str5 = "My name is lilei";
print(str5 + " haha");
//My name is lilei haha
print(str5 * 2);
//My name is lileiMy name is lilei
print(str5 == str4);
//false
print(str5[1]);//取下標(biāo)字符
//y
- 插值表達(dá)式:
$(expression)
int a = 1;
int b = 2;
print("a + b = ${a + b}");
//a + b = 3
print("a = $a");
//a = 1
- 常用屬性:
length,isEmpty,isNotEmpty
print(str5.length);
//16
print(str5.isEmpty);
//false
常用方法
-
contains(),subString() -
startsWith(),endsWith() -
indexOf(),lastIndexOf() -
toLowerCase(),toUpperCase() -
trim(),trimLeft(),trimRight() -
split(),replaceXXX()
print(str5.contains('My'));
//true
print(str5.substring(0, 2));
//My
print(str5.startsWith('a'));
//false
print(str5.endsWith('lei'));
//true
print(str5.indexOf('l'));
//11
print(str5.lastIndexOf('l'));
//13
print(str5.toLowerCase());
//my name is lilei
print(str5.toUpperCase());
//MY NAME IS LILEI
print(str5.trim()); //刪除前后空格
//My name is lilei
print(str5.trimLeft()); //刪除左空格
print(str5.trimRight()); //刪除右空格
var list = str5.split(' ');
print(list);
//[My, name, is, lilei]
布爾型
- 使用
bool表示布爾類型 - 布爾值只有
true和false
// 布爾類型
var isFlag = true;
print('$isFlag ${isFlag.runtimeType}');
注意: Dart中不能判斷非0即真, 或者非空即真
var message = 'Hello Dart';
// 錯(cuò)誤的寫(xiě)法
if (message) {
print(message);
}
列表List
List(數(shù)組)創(chuàng)建
- 創(chuàng)建List:
var list = [1, 2, 3]; - 創(chuàng)建不可變的List:
var list = const [1, 2, 3]; - 構(gòu)造創(chuàng)建:
var list = new List();
常用操作
-
[],length -
add(),insert() -
remove(),clear() -
indexOf(),lastIndexOf() -
sort(),sublist() -
shuffle(),asMap(),forEach()
var list = ["Hello", "Dart"];
print(list.length);
//2
list.add('New');
print(list);
//[Hello, Dart, New]
list.insert(1, "My");
print(list);
//[Hello, My, Dart, New]
list.remove("My");
print(list);
//[Hello, Dart, New]
// list.clear();
// print(list);
//[]
print(list.indexOf("Dart"));
//1
print(list.indexOf("Dart1"));
//-1
print(list.lastIndexOf("New"));
//2
list.sort();
print(list);
//[Dart, Hello, New]
list.sublist(0, 1);
print(list.sublist(0, 1));
//[Dart]
list.shuffle(); //打亂順序
print(list);
//[Hello, Dart, New]
list.forEach((element) {
print(element);
});
//Hello
// Dart
// New
集合Set
- 其實(shí),也就是把[]換成{}就好了。
- Set和List最大的兩個(gè)不同就是:Set是無(wú)序的,并且元素是不重復(fù)的。
var a = {'a','b','c','d'};
Map
Map創(chuàng)建
- 創(chuàng)建Map:
var language = {'first':'Dart','second':'OC'}; - 創(chuàng)建不可變Map:
var language = const {'first':'Dart','second':'OC'}; - 構(gòu)造創(chuàng)建:
var language = new Map();
var map1 = {'first': 'Dart', 1: true};
print(map1);
//{first: Dart, 1: true}
print(map1['first']);
//Dart
map1[1] = false;
print(map1);
//{first: Dart, 1: false}
//不可變
var map2 = {'dart': 'good', 'swift': 'good too'};
// map2[1] = "python";不可更改
常用操作
-
[],length -
isEmpty(),isNotEmpty() -
Keys,values -
containsKey(),containsValue() remove()forEach()
var map = {'first': 'Dart', 'second': 'Python', 'third': 'Java'};
print(map.length);
//3
print(map.isEmpty);
//false
print(map.keys);
//(first, second, third)
print(map.values);
//(Dart, Python, Java)
print(map.containsKey('forth'));
//false
print(map.containsValue('Java'));
//true
map.remove('second');
print(map);
//{first: Dart, third: Java}
map.forEach((key, value) {
print("${key + value}");
});
//firstDart
//thirdJava
var list = ['a', 'b', 'c'];
print(list.asMap());
//{0: a, 1: b, 2: c}
dynamic
var a;
a = 10;
a = 'b';
//a 此時(shí)是一個(gè)動(dòng)態(tài)類型 dynamic
dynamic b = 20;
b = 'Java';
var list = List<dynamic>();
list.add(1);
list.add('Hello');
list.add(true);
print(list);
//[1, Hello, true]


