Flutter入門第一步-Dart語言入門(一)

Flutter入門第一步-Dart語言入門(一)

最近學習flutter的時候,看了下官方文檔裏的示例代碼,看得我一頭霧水,就像是霧裏看花(此處@東北醬)。在我個人看來,Dart語言的語法有點像是java和js的結合體,如果熟悉java的胖友學起來應該不會太費力。所以磨刀不誤砍柴工,我先學一點基礎的Dart語言,然後再開始我的fluter之旅。
參考資料:https://blog.csdn.net/weixin_33775582/article/details/91377034
http://www.cndartlang.com/669.html

1.工具
我個人使用了一個在線的編譯工具 DartPad,當然了也有可供本地使用的IDE,自行下載吧。

2.Helloword!
在學習一門新的語言時,我們一般乾的第一件事就是輸出一個helloword,Dart也不例外。在Dart中輸出helloword很簡單。

在這裏插入圖片描述

習慣了JAVA的人可能會比較疑惑,爲什麼會有單引號也可以。且往下看

3.數據類型
首先我們需要明確一點,Dart是是一個純正的面向對象的動態類型的語言。Dart中所有東西都是對象,包括數字、函數等它們都繼承自Object,並且默認值都是null(包括數字)因此數字、字符串都可以調用各種方法

Dart中支持以下數據類型:

Numbers
Strings
Booleans
List(也就是數組)
Maps

首先我們看下字符串,字符串賦值的時候,可以使用單引號,也可以使用雙引號(如上面的helloword)。但需要注意的一點是,在使用單引號時,可以內嵌雙引號,在使用雙引號時,可以內嵌單引號。但使用單引號時不能內嵌單引號,雙引號也是同理,否則需要加轉義符來轉義。
如下:
在這裏插入圖片描述其次,我們在做字符串拼接的時候,可以省略 +號了。當然了也可以使用+。這是因爲在之前版本的SDK中不支持用+連接字符串。
在這裏插入圖片描述
當我們需要輸出一個變量的值時候,我們需要加一個$符。如
在這裏插入圖片描述
當我們不需要轉義的時候,我們可以在要輸出的句子之前加一個r,注意r一定要挨着引號,不然會報錯。
在這裏插入圖片描述
4.關鍵字:const final
const 定義的是編譯時常量,只能用編譯時常量來初始化
final 定義的常量可以用變量來初始化
var、final等在左邊定義變量的時候,並不關心右邊是不是常量
但是如果右邊用了const,那麼不管左邊如何,右邊都必須是常量

5.函數
首先我們需要明確一點,在Dart中,函數也是一個對象當我們的函數沒有返回值時,會返回一個null.我們以這個方法爲例:

void main() {
  
  var name = getName("panghu");
  print(name);
  
}

String getName(String name)
{
  return "name is $name";
}

由於Dart語言是動態類型的,我們也可以把它改成這樣:

void main() {
  
  var name = getName("panghu");
  print(name);
  
}

 getName( name)
{
  return "name is $name";
}

不過這樣的代碼會在我們的時候難度變得很大。如果函數只是簡單的返回一個表達式的值,可以使用箭頭語法:

void main() {
  
  var name = getName("panghu");
  print(name);
  
}

 getName( name)=>"name is $name";

然後看下面的這段代碼:

var callbacks = [];
for (var i = 0; i < 3; i++) {
  // 在列表 callbacks 中添加一個函數對象,這個函數會記住 for 循環中當前 i 的值。
  callbacks.add(() => print('Save $i')); 
}
callbacks.forEach((c) => c()); // 分別輸出 0 1 2

當在for循環中調用add方法時,我們加入到數組中的是一個函數的對象。然後再下方的foreach循環中,我們每次遍歷的時候執行了一遍c這個對象(函數)的方法本身。
可選參數函數,Dart語言支持兩種可選參數函數:1.命名可選參數 2.位置可選參數。

命名可選參數使用大括號{},默認值用冒號:
位置可選參數使用方括號[],默認值用等號=

特點:
命名可選參數:大括號外是必選參數,大括號裏是可選參數,且按照key:value的形式進行復制,不限定位置。
位置可選參數:方括號外是必選參數,方括號內是可選參數,且按照形參的順序,以key=value的形式進行賦值。

看下面的例子

FunX(a, {b, c:3, d:4, e})
{
  print('$a $b $c $d $e');
}

FunY(a, [b, c=3, d=4, e])
{
  print('$a $b $c $d $e');
}


void main()
{
  FunX(1, b:3, d:5);
  FunY(1, 3, 5);
}

我們輸出的結果是:

1 3 3 5 null
1 3 5 4 null

函數閉包
這個概念對於js開發者應該是不會陌生,但對於java開發者來說卻是不太熟悉。
我們看下面這個例子:

Function makeSubstract(num n)
{
  return (num i) => n - i;
}

void main()
{
  var x = makeSubstract(5);
  print(x(2));
}

我嘗試給大家分析一下:在makeSubstract中,我們返回了一個Function 類型的對象,也就是返回了一個函數,更確切的說我們把一個匿名函數的定義放在了makeSubstract函數體中。所以在main函數中,我們的x其實是一個函數對象,它其實是這個樣子的:

int x(num i)
{
return 5-i;
}

函數別名: 看下面的例子

typedef int Compare(Object a, Object b);
 
class SortedCollection {
  Compare compare;
 
  SortedCollection(this.compare);
}
 
// Initial, broken implementation.
int sort(Object a, Object b) => 0;
 
void main() {
  SortedCollection coll = new SortedCollection(sort);
  assert(coll.compare is Function);
  assert(coll.compare is Compare);
}

關於函數和類型就到這裏,下篇文章我們看一下Dart的別的部分

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章