Dart簡述

Dart簡述

你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。

變量聲明

var

var接收任何類型的變量,但var變量一旦賦值,類型便會確定,不能再改變其類型

var t;
t = "hello world";
// 類型已經確定爲String,不能再更改其類型。
t = 1;

dynamic和Object

Object 是Dart所有對象的根基類,也就是說所有類型都是Object的子類(包括Function和Null),所以任何類型的數據都可以賦值給Object聲明的對象. dynamic與var一樣都是關鍵詞,聲明的變量可以賦值任意對象。 而dynamic與Object相同之處在於,他們聲明的變量可以在後期改變賦值類型。

 dynamic t;
 Object x;
 t = "hi world";
 x = 'Hello Object';
 //下面代碼沒有問題
 t = 1000;
 x = 1000;

dynamic與Object不同的是,dynamic聲明的對象編譯器會提供所有可能的組合, 而Object聲明的對象只能使用Object的屬性與方法, 否則編譯器會報錯。

dynamic a;
 Object b;
 main() {
     a = "";
     b = "";
     printLengths();
 }   

 printLengths() {
     // no warning
     print(a.length);
     // warning:
     // The getter 'length' is not defined for the class 'Object'
     print(b.length);
 }

變量a不會報錯, 變量b編譯器會報錯

dynamic的這個特性與Objective-C中的id作用很像. dynamic的這個特點使得我們在使用它時需要格外注意,這很容易引入一個運行時錯誤.

final/const

如果您從未打算更改一個變量,那麼使用 final 或 const,不是var,也不是一個類型。 一個 final 變量只能被設置一次,兩者區別在於:const 變量是一個編譯時常量,final變量在第一次使用時被初始化。被final或者const修飾的變量,變量類型可以省略,如:

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

函數

聲明

bool isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

Dart函數聲明如果沒有顯式聲明返回值類型時會默認當做dynamic處理,注意,函數返回值沒有類型推斷:

typedef bool CALLBACK();

//不指定返回類型,此時默認爲dynamic,不是bool
isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

void test(CALLBACK cb){
   print(cb()); 
}
//報錯,isNoble不是bool類型
test(isNoble);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章