Flutter之旅:Dart基礎(chǔ)語(yǔ)法學(xué)習(xí)

1. Dart中常見(jiàn)數(shù)據(jù)類(lèi)型一覽:

Dart的常見(jiàn)的數(shù)據(jù)類(lèi)型有以下8種:

數(shù)據(jù)類(lèi)型.png

1.1 數(shù)字類(lèi)型

num、int和double都是Dart中的類(lèi),也就是說(shuō)它是對(duì)象級(jí)別的,所以他們的默認(rèn)值為null。這不同于Java的基本數(shù)據(jù)類(lèi)型。

main(){
  num age = 18;//num數(shù)據(jù)類(lèi)型
  int height =180;//int整型
  double weight=62.5;//double 浮點(diǎn)型

  print(height/weight is double);//true
  print(height*age is double);//false
  print(age/height is double);//true
}

1.2 布爾類(lèi)型

布爾類(lèi)型作為判斷的標(biāo)識(shí),活躍在各大語(yǔ)言中的邏輯判斷中,它只有truefalse兩種選擇。這里注意關(guān)鍵字是bool,而非Java中的boolean。

bool isMan = true;
bool isMarried = false;

1.3 字符串類(lèi)型

字符串是一種語(yǔ)言不可或缺的部分,Dart也不例外。它支持單引號(hào)、雙引號(hào)、以及三引號(hào)。需要注意的是單引號(hào)中的單引號(hào)需要轉(zhuǎn)義,三引號(hào)中的字符內(nèi)容會(huì)原樣輸出。

  String name = '張哈哈先生';//支持單引號(hào)
  String proverbs ="'海的彼岸有我未曾見(jiàn)證的風(fēng)采'";//支持雙引號(hào)
  String poem=""" //支持三引號(hào)
  石榴酒,葡萄漿。
  蘭桂芳,茱萸香。
  愿君駐金鞍,暫此共年芳。
  愿君解羅襦,一醉同匡床。
  文君正新寡,結(jié)念在歌倡。
  昨宵綺帳迎韓壽,今朝羅袖引潘郎。
  莫吹羌笛驚鄰里,不用琵琶喧洞房。
  且歌新夜曲,莫弄楚明光。
  此曲怨且艷,哀音斷人腸。
  """;
  print('${name}\n$proverbs\n$poem');//支持字符串中使用變量

1.4 列表類(lèi)型

List作為一個(gè)同類(lèi)多元素的容器,也是每種語(yǔ)言必備。Dart中的List作為一個(gè)類(lèi)存在,可以當(dāng)做可操作的數(shù)組來(lái)對(duì)待,起始索引為0。其他語(yǔ)言中對(duì)于數(shù)組的操作,Dart中基本都有相關(guān)的API。

 main() {

  List<int> list = new List();
  List<int> list1 = List();
  List<int> list2=[1,2,3,4,5];//提示:Dart推斷l(xiāng)ist的類(lèi)型為L(zhǎng)ist<int> 。如果嘗試將非整數(shù)對(duì)象添加到此List中,則分析器或運(yùn)行時(shí)會(huì)引發(fā)錯(cuò)誤。有關(guān)更多信息,可以學(xué)習(xí) 類(lèi)型推斷。
  print(list2[1]);//獲取下標(biāo)為1的值
//遍歷數(shù)組
//iter for-in 模板
  for (var o in list) {
  }

//itar for-i模板
  for (var i = 0; i < list1.length; ++i) {
    var o = list1[i];
  }

1.5 集合類(lèi)型

Set作為一個(gè)盛放不含重復(fù)元素的無(wú)序多元素容器,如果添加一個(gè)已經(jīng)存在的元素,是無(wú)法添加成功的。所以它沒(méi)有索引。但有很多方法可以對(duì)集合進(jìn)行操作。

Set<String> languages = {'Java', 'Dart', 'Python', 'C++', 'Kotlin',"Java"};
print(languages);//{Java, Dart, Python, C++, Kotlin}
print(languages.add('Java'));//false
print(languages.add('JavaScript'));//true

1.6 Map類(lèi)型

Map為若干個(gè)鍵值對(duì)的容器,想用映射之名。其中一個(gè)Map對(duì)象中的鍵不能重復(fù),值是可以重復(fù)的。

Map<int, String> map = {1: 'one', 2: 'two', 3: 'three'};
print(map[3]);//three
map[4] = 'four';
print(map.length);//4

2. Dart中的變量與常量

Dart 作為一名新時(shí)代的后起之秀,var自然不能少。Dart語(yǔ)言中對(duì)象的類(lèi)型是可以自動(dòng)推導(dǎo)的。也就是說(shuō),上面的代碼在聲明變量類(lèi)型時(shí),都可以用一個(gè)var關(guān)鍵字解決。

2.1 var關(guān)鍵字的使用

//1.不指定類(lèi)型
var age = 18;
var isMan = true;
var name = '張哈哈先生';
var languages1 = ['Java', 'Dart', 'Python', 'C++', 'Kotlin'];
//2.明確指定類(lèi)型
String name = '張哈哈先生';

因?yàn)橛蓄?lèi)型推導(dǎo),所以?xún)煞N實(shí)現(xiàn)效果一樣,官方推薦在函數(shù)內(nèi)的本地變量盡量使用var聲明。在變量類(lèi)型并不明確的情況下,可以使用dynamic關(guān)鍵字

2.2 var的注意事項(xiàng)

如果只是用var聲明變量,該變量之后是可以修改數(shù)據(jù)類(lèi)型的。

var who;
who="what";
print(who is String);//true
who=10;
print(who is int);//true

如果聲明的同時(shí)去賦值,那么該對(duì)象的類(lèi)型就是固定的,不可修改的。

var who="what";
print(who is String);//true
who=10;//此處報(bào)錯(cuò)
print(who is int);//true

下面一幅圖可以很好地說(shuō)明原因:


2.3 常量的定義

如果一個(gè)變量你以后不打算修改,可以使用 final 或者 const進(jìn)行修飾,當(dāng)你試圖修改它的值,就會(huì)報(bào)錯(cuò)。

  final PI = 3.14159265;
  PI=4;// ERROR: 'PI', a final variable, can only be set once.

  const Pi  = 3.14159265;
  Pi=4;// ERROR: Constant variables can't be assigned a value.

2.4 const和final的區(qū)別

1、一個(gè) final 變量只能賦值一次: 它的值可以在運(yùn)行時(shí)獲取
2、一個(gè) const 變量是編譯時(shí)常量:代碼還沒(méi)有運(yùn)行時(shí)我們就知道它聲明變量的值
3、舉例,同樣是當(dāng)前時(shí)間,final修飾的f對(duì)象是正確的,但const修飾的c是錯(cuò)誤的,原因是final可以在運(yùn)行時(shí)對(duì)變量初始化,但const不行。

final f = DateTime.now(); // OK
const c = DateTime.now(); // ERROR Const variables must be initialized with a constant value.

3. Dart中的運(yùn)算符

常見(jiàn)運(yùn)算符.png

3.1 算術(shù)運(yùn)算符

四則運(yùn)算

print(1 + 2);//3    加
print(1 - 2);//-1   減
print(1 * 2);//2    乘
print(1 / 2);//0.5  除
print(10 % 3);//1   余
print(10 ~/ 3);//3  商

自加自減

---->[情況1:i++]----
int i=3;
var a=i++;//執(zhí)行賦值后i才自加,故a=3
print('a=$a,i=$i');//a=3,i=4

---->[情況2:++i]----
int i=3;
var a=++i;//執(zhí)行賦值前i已經(jīng)自加,故a=4
print('a=$a,i=$i');//a=4,i=4

---->[情況3:i--]----
int i=3;
var a=i--;//執(zhí)行賦值后i才自減,故a=3
print('a=$a,i=$i');//a=3,i=2

---->[情況4:--i]----
int i=3;
var a=--i;//執(zhí)行賦值前i已經(jīng)自減,故a=2
print('a=$a,i=$i');//a=2,i=2

3.2 關(guān)系運(yùn)算符

print(1 > 2); //false   大于
print(1 < 2); //true    小于
print(1 == 2); //false  等于
print(1 != 2); //true   不等
print(10 >= 3); //true  大于等于
print(10 <= 3); //false 小于等于

3.3 邏輯運(yùn)算符

bool enter(int age, int height, bool isMan) {
  return (age > 18 || height > 160) && !isMan;
}

代碼表示:年齡大于18或者身高大于160的女性可以進(jìn)入。

3.4 條件表達(dá)式

三元運(yùn)算符:條件? 表達(dá)式1: 表達(dá)式2
條件成立執(zhí)行前者,否則,執(zhí)行后者

var height =130;
var pay = (height>120) ? 200:100;
print(pay);//200

??運(yùn)算符: 表達(dá)式1 ?? 表達(dá)式2 前表達(dá)式值為null則取后者。否則,后表達(dá)式不會(huì)被執(zhí)行

//條件表達(dá)式
var conditionBool = true;
print(conditionBool? 'true': 'false');
conditionBool = null;
print(conditionBool ?? 'This message will show when conditionBool is null')

//運(yùn)行結(jié)果
true
This message will show when conditionBool is null

4. Dart中的函數(shù)

Dart中,一個(gè)函數(shù)的基本組成如下:

4.1 基本使用

兩個(gè)數(shù)相加

double add(double a,double b){
  return a+b;
}

調(diào)用:add(10,20);//30

4.2 可選參數(shù)+默認(rèn)值

兩個(gè)數(shù)相加,并且可以打個(gè)折扣

double add(double a,double b,[double discount=1.0]){
  return (a+b)*discount;
}

調(diào)用:add(10,20,0.7);//21

4.3 屬性型參數(shù)

將參數(shù)和一個(gè)key對(duì)應(yīng)起來(lái),非常方便和清晰的傳參模式

double add(double a,double b,{double discount=1.0,double c=0,double d =0}){
  return (a+b+c+d)*discount;
}

調(diào)用:add(10, 20,discount: 0.7,c: 100);//91.0

4.4 函數(shù)參數(shù)

函數(shù)本身也是一個(gè)對(duì)象,可以作為參數(shù)傳入。

double add(double a,double b,deal){
  return deal(a)+deal(b);
}

var fun = (double i) {
  return i * i;
};

調(diào)用:
print(add(3, 4, fun));//求兩數(shù)的平方和

4.5 函數(shù)簡(jiǎn)寫(xiě)

var fun = (double i) {
  return i * i;
};

可以簡(jiǎn)寫(xiě)為:
var fun = (i) {
  return i * i;
};

進(jìn)一步可以簡(jiǎn)寫(xiě)為:
var fun = (i)=> i * i;

void main() => runApp(MyApp());

它相當(dāng)于:
void main() {
  return runApp(MyApp());
}
?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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