Dart基礎——Dart經常使用語法

本文主要介紹Dart開發經常使用的一些語法git

Dart基礎——Dart經常使用語法

基礎語法

Final,Const定義常量

Const 變量在編譯時就已經固定。
Final 變量或類變量在第一次使用時被初始化,懶加載。
Const不能定義對象 Final能定義對象github

例:閉包

//能夠省略String這個類型聲明
final str = "hi world";
//final String str = "hi world"; 
const str1 = "hi world";
//const String str1 = "hi world";

定義多行字符串

String str ="""
保留換行的字符串
能夠在編譯器裏換行
""";
String str2 ='''
保留換行的字符串
能夠在編譯器裏換行
''';
print(str);
print(str2);

Dart基礎——Dart經常使用語法

double類型初始化時能夠賦值爲int型

double num1 = 1.0;
double num2= 1;
print(num1.runtimeType);
print("----");
print(num2.runtimeType);

Dart基礎——Dart經常使用語法

Map類型取值map[「key」] 賦值同理

Map testMap = {};
testMap["flag"] = true;
print(testMap["flag"]);

Dart基礎——Dart經常使用語法

在List類型中使用if語句

var promoActive = true;
var nav = [
  'Home',
  'Furniture',
  'Plants',
  if (promoActive) 'Outlet'
];
print(nav);

image-20200824154736578

在List類型中使用For語句ide

var listOfInts = [1, 2, 3];
var listOfStrings = [
  '#0',
  for (var i in listOfInts) '#$i'
];
print(listOfStrings);

image-20200824154538870

is關鍵字判斷數據類型

int num = 1;
print(num is String);
String str = "測試";
print(str is String);

Dart基礎——Dart經常使用語法

~/取整運算符

double num = 5;
print( num ~/ 2);
//5除2取整

Dart基礎——Dart經常使用語法

字符串形式輸出兩個變量

String str1 = "str1";
String str2 = "str2";
print("$str1 $str2");

Dart基礎——Dart經常使用語法

flag == true ? 我是true」 : 」我是false」 三目運算符

String str = "三目運算符";
print(str == "三目運算符"?"我是true":"我是false" );

Dart基礎——Dart經常使用語法

int.parse(str) String類型轉int

num.toString()int類型轉String

double.toInt() double類型轉int

int num = 1;
double doubleNum =1.0;
String str = "1";
print(int.parse(str).runtimeType);
print(num.toString().runtimeType);
print(doubleNum.toInt().runtimeType);

Dart基礎——Dart經常使用語法

isEmpty判斷字符串是否爲空

String str1 = "";
print(str1.isEmpty);
String str2 = "1";
print(str2.isEmpty);
String str3;
//此行代碼會報錯,null不能調用isEmpty
print(str3.isEmpty);

Dart基礎——Dart經常使用語法

變量或方法前加入下劃線表示私有

String _privateStr = "私有變量";
_privateFunction(){
  print("私有方法");
}

import關鍵字用於實現類導入,as給導入的類起別名

import 'dart:math' as math;

if語句只支持bool類型,不支持直接使用空數據判斷

String str;
//不合法
if(str){
}
//合法
if(str != null){
}

List的擴展運算符「...」和空值判斷擴展運算符「...?」

"..."支持將一個集合添加到另外一個集合裏

List list1 = [1,2,3];
List list2=[-1,0,...list1];
print(list2);
List list3;
// ...?運算符  若是爲空就不插入
List list4 = [0,...?list3];
print(list4);

Dart基礎——Dart經常使用語法

級聯操做符。經過級聯操做符能夠對類的內部成員進行鏈式調用,

級聯運算符 (..) 能夠實現對同一個對像進行一系列的操做。 除了調用函數, 還能夠訪問同一對象上的字段屬性。函數

var button = Button() // 獲取對象。
  ..text = 'Confirm' // 調用成員變量。
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

第一句建立對象。獲取的對象依次執行級聯運算符後面的代碼, 代碼執行後的返回值會被忽略。
上面的代碼等價於:佈局

var button = Button();
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

賦值操做符「??」、「??=」和「~/」及判空操做符「?

String str;
print(str ??  1);//若是str爲空 返回1
str ??= "1"; //若是str爲空 將str賦值爲1
print(str);
int num = 1;
num?.toString();//若是str爲空 不執行toString;
print(num.runtimeType);
int num1;
num1?.toString();//若是str爲空 不執行toString;
print(num1.runtimeType  == Null);

Dart基礎——Dart經常使用語法

var 和 dynamic聲明變量

Dart屬於強類型語言,但能夠用var聲明變量,Dart對於var聲明會自推導出數據類型。實際上var是編譯期的語法糖, 而dynamic聲明才表示動態類型,dynamic被編譯後是一個object類型,在編譯期間不對任何的類型進行檢查,而是在運行時對類型進行檢查。測試

String 和 int沒有默認的類型轉換,‘123’不等於123

String str = "1";
int num = 1;
print(str == num);

Dart基礎——Dart經常使用語法

指定了數據類型以後不能從新賦值其餘類型的數據

String str = "test";
 //此行代碼會報錯
str = 1;

函數相關

函數簡寫

對於只包含一個表達式的函數,可使用簡寫語法3d

printFunc(String str)=> print(str) ;

//等同於
//printFunc(String str) {
//  print(str);
//}

函數做爲參數傳遞

_test(){
execute(() => print("func被執行了"));
execute1(callback);
  }
  void execute(var func) {
func();
  }
  void execute1(var callback){
callback("callback被執行了");
  }
  callback(str){
print(str);
  }

Dart基礎——Dart經常使用語法

可選的命名參數

定義函數時,使用{param1, param2, …},放在參數列表的最後面,用於指定命名參數。例如:code

//設置[bold]和[hidden]標誌
void enableFlags({bool bold, bool hidden}) {
// ... 
}
調用函數
enableFlags(bold: true, hidden: false);

閉包

Dart 的閉包是定義在方法裏面的方法,其特性:
閉包是一個對象
閉包定義在其餘方法內部
閉包能夠訪問外部方法的佈局變量,並持有其狀態。這是閉包的最大用途,經過閉包的方式把一個方法內部的屬性暴露出去,由於方法是能夠返回方法的,Dart 中方法也是對象同樣能夠當作返回值處理對象

sum(){
  var num = 0;
  sum2(){
num++;
print(num);
  }
  return sum2;

  // 也能夠這麼寫,匿名的方式用的最多
  return (){
num++;
print(num);
  };
}

// 多調用閉包幾回
void main(){
  Function a = sum();
  a();
  a();
  a();
  a();
  a();
  a();
}

~~~~~~~~~~log~~~~~~~~~~
1
2
3
4
5
6

能夠理解sum()就是一個對象,在初始化對象時,數值a已經被肯定爲0,再次調用a()時,沒有再次執行var num = 0;,由於沒有從新初始化類,因此賦值操做不會再執行一次。

完整示例

上文全部的代碼示例都在做者的GiuHub上,https://github.com/jack0-0wu/flutter_demo,裏面還包含了一些經常使用flutter功能的展現

Dart基礎——Dart經常使用語法

紙上得來終覺淺,絕知此事要躬行。

相關文章
相關標籤/搜索