一篇文章帶你瞭解Dart的基本語法,為Flutter開發打好基礎

想學習Flutter開發,那就必須學習Dart編程語言的語法,下面我們就通過一篇文章去了解一下Dart語言的魅力吧!

一篇文章帶你瞭解Dart的基本語法,為Flutter開發打好基礎

數據類型

1、變量

Dart中有 var、dynamic、bool、int、double、String、List、Map、enum等數據類型。

(1) var 可以聲明任何類型的數據類型,數據類型取決於變量的值。

var name = 'Bob';

(2) 未指定靜態類型的變量則會隱式聲明為 dynamic,也可以使用dynamic關鍵字代替var關鍵字聲明變量。

dynamic name = 'Bob';

(3) bool 布爾類型,true和false。

(4) int 整型

(5) double 雙精度型,小數都用這個。

(6) String 字符串類型

(7) List 列表類型,大概就這個樣子 ⬇️

var lists = [1,2,3,4,5,6];

(8) Map 映射類型,也就是鍵值對。

var maps = {'username':'zhangsan','password':'admin12345'};

(9) enum 枚舉類型

// 聲明枚舉
enum Status{
success,
error
}
void main(List<string> args) {
// 打印枚舉值
print(Status.success);
print(Status.error);

print(Status.values); // 打印結果: [Status.success, Status.error]
// 遍歷枚舉
Status.values.forEach((v){
print(v);
});
}/<string>

2、常量

final 和 const

final和const關鍵字用於聲明常量。在Dart中不能修改使用final或const關鍵字聲明變量的值。這些關鍵字可以與變量的數據類型一起使用,也可以與var關鍵字一起使用。

const關鍵字用於表示編譯時常量。使用const關鍵字聲明的變量是隱式final。

示例:

final name = 'zhangSan';
final String name = 'zhangSan';

const name = 'liSi';
const String name = 'liSi';


// 我們都是常量!

運算符

一篇文章帶你瞭解Dart的基本語法,為Flutter開發打好基礎

這些大家可以再本地多試一試!

條件語句

(1) if 語句

 var num = 10;

if (num > 20) {
print('num > 20');
}

(2) if...else...語句

 var num = 10;

if (num > 20) {
print('num > 20');
}else{
print('num <= 20');
}

(3) switch...case... 語句

 var num = 30;

switch (num) {
case 10:{
print('num == 10');
}
break;
case 20:{
print('num == 20');
}
break;
default:{
print('num != 10 && num != 20');
}
}

這個和大家平時接觸的應該都差不多!

循環語句

(1) for循環語句

 var num = 30;

for (var i = 0; i < num; i++) {
print('num:'+i.toString());
}

(2) for…in...循環

 var lists = [1,2,3,4,5,6,7,8];

for (var i in lists) {
print(i);
}

(3) while循環

 var b = true;

int i = 0;
\t// 當 b == false 時, while 循環停止執行
while (b) {
i++;
if (i == 15) {
b = false;
}
print(i);
}

(4) do…while循環

do {

print('執行了!');

} while (false);
// 循環體至少執行一次!

(5) break 語句 : 跳出循環

 int i = 0;
\t// 當 b == false 時, while 循環停止執行
while (true) {
i++;
if (i == 15) {

break;
}
print(i);
}

(6) continue語句 : 跳出當前循環,執行下一次循環

 var lists = [1,2,3,4,5,6,7,8];

for (var i in lists) {
if(i == 5){
\t// 跳過當前循環,執行下一次循環
continue;
}
print(i);
}

// 打印結果: 1 2 3 4 6 7 8 只有 5沒有打印輸出

(7) 使用標籤來控制循環

標籤只是一個標識符,後跟冒號(:)應用於語句或代碼塊。標籤可以與斷點一起使用,並繼續更精確地控制流程。

  • 帶有break的標籤
 for (var i = 0; i < 4; i++) {
a:
for (var j = 0; j < 5; j++) {
if (j>3) {
break;
}
// 當 i==2 時,執行break語句
if (i == 2) {
break a; // 當這句代碼執行時,會中斷 標籤a:下面的循環

}
print('i:'+i.toString()+'==='+'j:'+j.toString());
}
}
  • 帶有continue的標籤
 for (var i = 0; i < 4; i++) {
a:
for (var j = 0; j < 5; j++) {
if (j>3) {
break;
}
// 當 i==2 時,執行continue語句
if (i == 2) {
continue a;
}
print('i:'+i.toString()+'==='+'j:'+j.toString());
}

}

函數、接口、類、對象

一、函數

函數是一組用於執行特定任務的語句。函數將程序組織成邏輯代碼塊。

return_type(返回類型) function_name(函數名)(type value){
\t\t// 執行代碼
}

函數的類型:

(1) 有參數的和無參數的

// 有參數的
int sum(int x,int y){

\treturn x+y;
}

// 無參數的
int sum(){
\treturn 110;
}

(2) 有返回值和無返回值的

// 有返回值的
int sum(int x,int y){
\treturn x+y;
}

// 無返回值的
void sum(){
\t
}

(3) 可選位置參數

要指定可選的位置參數,請使用方括號[]。

void main(List<string> args) {
// 調用函數
print(sum(13, 25));
print(sum(13, 25,23));
}

// 方法一:可選參數默認為 null
int sum(int i,int j,[int z]){
\t// 判斷可選參數是否為空,為空就賦初值
if(z.toString() == "null"){
z = 0;
}
return i + j + z;
}

// 方法二:可選參數可以賦初值
int sum(int i,int j,[int z = 0]){

return i + j + z;
}/<string>

(4) 可選的命名參數

與位置參數不同,必須在傳遞值時指定參數名稱。花括號{}可用於指定可選的命名參數。

void main(List<string> args) {
// 調用函數
print(sum(13, 25));
print(sum(13, 25,x:23,y:20));
}

int sum(int i,int j,{x=0,y=0}){
return i + j + x+y;
}
// 打印結果: 38 81/<string>

二、接口

接口定義任何實體必須遵守的語法。接口定義了一組對象可用的方法。

(1) 類通過 implements 關鍵字來實現接口

(2) 類可以實現多個接口

void main() { 
Calculator c = new Calculator();
print("The gross total : ${c.ret_tot()}");
print("Discount :${c.ret_dis()}");
}
// 接口1
class Calculate_Total {
int ret_tot() {}
}
// 接口2
class Calculate_Discount {

int ret_dis() {}
}
// 類實現多個接口
class Calculator implements Calculate_Total,Calculate_Discount {
// 實現接口1中的函數
int ret_tot() {
return 1000;
}
// 實現接口2中的函數
int ret_dis() {
return 50;
}
}

三、類

使用class關鍵字在Dart中聲明一個類。類定義以關鍵字class開頭,後跟類名; 並且由一對花括號包圍的類體。

類體中有:

(1) fields

(2) getter和setter方法

(3) constructors

(4) functions

示例:

void main(List<string> args) {
// 根據命名構造函數初始化對象實例
var stu = new Student.name('Bob');
print(stu.name);
}

class Student{
String name;
// getter 方法
String get stu_name{
\treturn name;

}
\t// setter 方法
\tvoid set stu_name(String _name){
\tthis.name = _name;
}
// 默認構成函數
Student(){}
// 命名構造函數
Student.name(String _name){
this.name = _name;
}

// 普通方法
\tvoid read(){
\t
}
}/<string>

(5) super 和 this 關鍵字

super關鍵字用於引用類的直接父級。supper關鍵字可用於引用超類的變量,屬性或方法等等。

this關鍵字引用類的當前實例。這裡,參數名稱和類字段的名稱是相同的。

(6) static 關鍵字

static關鍵字可以應用於類的數據成員,即字段和方法。靜態變量保留其值,直到程序完成執行。

(7) 類的繼承

  • 單層 : 每個類最多可以從一個父類擴展
  • 多層 : 一個類可以從多個類繼承,Dart不支持多重繼承。
  • 多級 : 類可以從另一個子類繼承。

(8) 方法的重寫

方法重寫是子類在其父類中重新定義方法的機制。

四、對象

(1) 級聯運算符(..)

級聯(..)運算符可用於通過對象發出一系列調用。

void main(List<string> args) {
// 使用級聯運算符來訪問方法
new Student()..test_method()..test_method1();

}

class Student{
void test_method(){
print('test_mehtod');
}
void test_method1(){
print('test_mehtod1');
}
}

// 打印結果: test_mehtod test_mehtod1/<string>

(2) toString() 方法

此函數返回對象的字符串表示形式。

void main(List<string> args) {
// 使用 toString() 方法
print(new Student()..toString());

}

class Student{
void test_method(){
print('test_mehtod');
}
void test_method1(){
print('test_mehtod1');
}
}/<string>

異常

try/on/catch塊

與我們平常的的異常處理相比,Dart多了on塊,on塊可以指定異常類型。其他的用法與平常使用相似。

 int x = 12;
int y = 0;
var res;

// 使用 on 指定異常類型
try{
res = x~/y;
}on IntegerDivisionByZeroException{
print('除數不能為0');
}

在異常中還有 finally 塊(最後都會執行的塊),使用throw關鍵字拋出異常以及自定義異常。

Typedef

typedef或函數類型別名有助於定義指向內存中可執行代碼的指針。簡單地說,typedef可以用作引用函數的指針。

typedef ManyOperation(int fristNo,int secondNo); 

Add(int firstNo,int second){
print("Add result is ${firstNo+second}");
}
Subtract(int firstNo,int second){
print("Subtract result is ${firstNo-second}");
}
Divide(int firstNo,int second){
print("Divide result is ${firstNo/second}");
}
Calculator(int a, int b, ManyOperation oper){
print("Inside calculator");
oper(a,b);
}
void main(List<string> args) {

ManyOperation oper = Add;
oper(10,20);

oper = Subtract;
oper(10,20);

oper = Divide;
oper(50,5);

\t// typedef作為參數
\tCalculator(5,5,oper);
}
/*
打印結果:
Add result is 30
Subtract result is -10
Divide result is 10.0
*//<string>

Dart 庫、同步和異步、併發

寫的有點累了! 最後這三個概念其實也不復雜,我就偷個懶吧!

對了! 詳細的Dart基礎知識的文檔,我也放在後臺了,在私信欄回覆 dart 就可以獲取!


分享到:


相關文章: