Dart語言入門

####前言: 1.Dart 語言在2011年10月由 Google 發佈,並在2012年10月發佈第一個里程碑版本 M1。Dart 做爲一種結構化的Web開發語言,既讓人感受熟悉,又足夠靈活。既適用於快速原型開發,又適用於組織大型的代碼庫。既能夠用在桌面版和移動版的瀏覽器中,也能夠在服務器端使用。整體上說,Dart 語言是感受熟悉的而且符合程序員的直覺,特別是你已經掌握了 Java、JavaScript 等語言的話。程序員

2.Dart 是一門很特別的語言,(1)特性是可選類型。(2)Dart中的類和接口是統一的,類即接口,你能夠繼承一個類,也能夠實現一個類(接口),天然也包含了良好的面向對象和併發編程的支持。shell

3.編程語言並非孤立存在的,Dart也是這樣,他由語言規範、虛擬機、類庫和工具等組成: SDK:SDK 包含 Dart VM、dart2js、Pub、庫和工具。 Dartium:內嵌 Dart VM 的 Chromium ,能夠在瀏覽器中直接執行 dart 代碼。 Dart2js:將 Dart 代碼編譯爲 JavaScript 的工具。 Dart Editor:基於 Eclipse 的全功能 IDE,幷包含以上全部工具。支持代碼補全、代碼導航、快速修正、重構、調試等功能。編程

4.Dart 程序是從頂層的 main() 函數開始執行的。test.dart數組

main() {
  print('hello world!');
}
複製代碼

在命令行中運行代碼:瀏覽器

dart hello.dart
複製代碼

或者以檢查模式運行:bash

dart --checked hello.dart
複製代碼

更多請參考《Dart的資源彙總》服務器

####基本語法閉包

  • Dart 中的全部東西都是對象,包括數字、函數等,它們都繼承自 Object,而且對象的默認值都是 null(包括數字)。
  • Dart 中的語句以分號結束,而且不是選的。
  • Dart 的類型是可選的。Dart 語言本質上是動態類型語言,可使用 var 聲明變量,一個變量也能夠被賦予不一樣類型的對象。但大多數狀況,咱們不會去改變一個變量的類型。在 Dart 中也可使用類型來聲明變量,就像在靜態語言中作的那樣。
  • Dart 支持頂層的變量和函數,就像 JavaScript 同樣,它並不要求你像 Java 那樣把全部的東西都放到類中。
1、數據類型:

1.介紹:Dart中全部的都是對象,涵蓋數字,函數,他們都是繼承Object,默認的值都是null。 2.支持的類型: (1)Numbers,裏面包含了int ,double (2)Strings (3)Booleans (4)List(也就是數組) (5)Maps 3.簡單的栗子: (1)數值:併發

num a=5;
num b=6;
print(a+b);
複製代碼

(2)字符串:app

//字符串賦值的時候,可使用單引號,也可使用雙引號
  var exam1 = "Ok?";
  
  //若是使用的是雙引號,能夠內嵌單引號
  //固然,若是使用的是單引號,能夠內嵌雙引號,不然須要「\」轉義
  //String exam2 = ‘It\’s ok!’;
  String exam2 = "It's ok!";
  
  //使用三個單引號或者雙引號能夠多行字符串賦值
  var exam3 = '''Dart Lang Hello,World!''';
  
  //在Dart中,拼接字符串用「+」,是能夠的,可是不推薦這樣使用,應該使用${param};
  var name = "nihao";
  var sex = "dsf";
  print("name: ${sex}");
複製代碼

(3)布爾值:

bool ishello=false;
 if(ishello){
  print("nihao");
 }else{
 print
複製代碼

(4)容器: I、StringBuffer 說明:StringBuffer並非容器,按照官方的說法,StringBuffer能夠特別高效的構建多個字符串,另外,之前的用的add方法已經改成write;

StringBuffer sb = new StringBuffer();
sb.write("hello StringBuffer ");
sb ..write('nihao')..write('linghit');
print(sb.toString());
sb.clear();
print(sb.toString());
複製代碼

II、List 列表,也就是常說的數組 常見的添加、索引、刪除等方法以下

// 使用List的構造函數,也能夠添加int參數,表示List固定長度
//var vegetables = new List();

var persons = ['小智', '明兄'];

// 添加元素
persons.add('小約妹');

// 添加多個元素
persons.addAll(['小莫', '小污']);

// 獲取List的長度
print(persons.length);

// 利用索引獲取元素
print(persons[0]);

// 查找某個元素的索引號
print(persons.indexOf('小莫'));

// 利用索引號刪除某個元素
var appleIndex = persons.indexOf('小莫');
persons.removeAt(appleIndex);
// 刪除全部的元素
persons.clear();
print(persons.length);
複製代碼
你可使用sort()對List的元素進行排序
而且必須制定比較兩個對象的函數,函數的返回值中
return <0 表示小於,0表示相同,>0表示大於
複製代碼

III、Set 集合在Dart中無序,而且每一個元素具備惟一性 由於它是無序的,所以你不能像List那樣用索引來訪問元素 這個就不細說了,吃瓜觀衆本身下去看看

IV、Map

映射,也有人稱之爲字典 Map是一個無序的鍵值對容器

// Map的聲明  (以往不一樣的點)
var initMap1 = {
    'one' : 1,
    'two' :2,
    'three' : 3
};
var initMap2 = new Map();
// 指定鍵值對的參數類型
var initMap3 = new Map<int, String>();

print(initMap["one"]);
複製代碼

V、迭代:

//若是迭代的對象是容器,那麼可使用forEach或者for-in
var diedai = [0, 1, 2];

diedai.forEach((x) => print(x));//forEach的參數爲Function

for(var x in diedai) {
    print(x);
}
複製代碼
2、函數

介紹:首先,函數也是對象,當沒有指定返回值的時候,函數返回null I、簡單應用

String hello(String name)
{
 return 'Hello $name!';
複製代碼

Dart語言中,參數類型也是可選的

String hello(name)
{
 return 'Hello $name!';
複製代碼

建議仍是定義好,輸入的類型以及輸出的類型,方便後人閱讀和調用

若是函數只是簡單的返回一個表達式的值,可使用箭頭語法 =>expr; 它等價於{return expr;}

hello(name) => 'Hello $name!';
複製代碼
Dart中匿名函數的寫法 (name)=>’Hello $name!’;
因而能夠以下定義匿名函數

var  hello = (name)=>'Hello $name!';
複製代碼

II、函數別名:

typedef int Add(int a, int b);
int Subtract(int a, int b) => a - b;

void main()
{
  print(Substract is Function);
  print(Substract is Add);
}
上面代碼的命名感受有點誤導人的感受
若是兩個函數的參數和返回值都同樣
那麼is操做符就會返回true
複製代碼

III、函數的閉包 下面的代碼有一點須要注意 初始化變量的時候,參數對應的是函數的參數num n 調用函數類型變量的時候,參數對應的是返回值中的參數num i

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

void main()
{
  var x = makeSubstract(5);
  print(x(2));
}
複製代碼

下面這段頗有意思的代碼 須要反應過來一件事:Dart中函數也是對象 下面的代碼應該看得明白,以後會講控制語句以及容器

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

IV、可選參數: Dart中支持兩種可選參數:命名可選參數和位置可選參數 但兩種可選不能同時使用

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

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

在命名可選參數的函數中,大括號外的a爲必填參數 大括號內的參數能夠指定0個或多個 而且與順序無關,在調用函數的時候須要指明參數名 沒有賦值的參數值爲null

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

在位置可選參數的函數中,大括號內的參數能夠指定0個或多個 在調用的時候參數值會依次按順序賦值

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

3、操做符和流程語句:(和其餘語言差很少) 一、取整:

int a = 3;
int b = 2;
print(a~/b);//輸出1
複製代碼

二、級聯: 當你要對一個單一的對象進行一系列的操做的時候 可使用級聯操做符 ..

class Person {
    String name;
    String sex;
    int age;
   setAge(num age) =>this.age=age;

    String toString() => 'Name:$name\nSex:$sex\nage:$age';
}
void main() {
 Person p = new Person();
  p ..name = 'Xq'
     ..sex="nan"
    ..setAge(20);
  print(p);
}
複製代碼

三、if語句沒有多大的區別: If語句的判斷條件爲bool值,用法和大多語言同樣

if(2){
print("true");
}else{
print("false");
}
複製代碼

switch:也差很少;swith的參數能夠是num,或者String

4.循環:

for(); while(); do{}while();沒太多變化
複製代碼

五、異常處理: 在Dart中能夠拋出非空對象(不只僅是Exception或Error)做爲異常

throw new ExpectException('值必須大於0!');
throw '值必須大於0!';
複製代碼
相關文章
相關標籤/搜索