在 InteIIiJ IDEA 中搭建 Dart 的開發(fā)環(huán)境: http://www.reibang.com/p/fa275a08b083
Dart 語言簡易教程(一)
一個簡單的dart 程序
// Define a function.
printNumber(num aNumber) {
print('The number is $aNumber.'); // Print to console.
}
// This is where the app starts executing.
main() {
var number = 42; // Declare and initialize a variable.
printNumber(number); // Call a function.
}
從這個程序里面我們可以看到如下的東西:
- 使用
//
來注釋膳灶。同時/* ...*/
也可以用來注釋救军。 -
num
是一個數(shù)據(jù)類型廊遍,定義在語言中梭依。同樣的類型還有String
竹勉,int
,bool
扶檐。
就是說Dart語言是有數(shù)據(jù)類型的概念的迹缀。這點與Python語言不同。 -
print()
是顯示輸出的方法种远。 -
'...'
(或者"..."
)涩澡,表示是有個string
類型的數(shù)據(jù)。
這一點與 Python 中string 類型數(shù)據(jù)一樣的使用方法坠敷。 -
var
定義了一個變量妙同,但是沒有指定特定的數(shù)據(jù)類型。
這種用法是很靈活的膝迎,既可以像Java類似的語言采取強數(shù)據(jù)類型粥帚,也可以像Python那樣在第一次賦值的時候確認(rèn)數(shù)據(jù)類型。
按照Dart 的編程規(guī)范限次,使用2個空格來縮進(jìn)芒涡。
這一點與Python 語言建議的4個空格不一樣柴灯。
一些重要的概念
所有的東西都是對象,無論是變量费尽,數(shù)字赠群,函數(shù)等。
所以的對象都是類的實例旱幼。
所有的對應(yīng)都繼承自內(nèi)置的Object
類查描。程序中指定數(shù)據(jù)類型是為了指出自己的使用意圖,并幫助語言進(jìn)行語法檢查柏卤。但是冬三,指定類型不是必須的。
Dart 語言是弱數(shù)據(jù)類型闷旧。Dart 代碼在運行前解析长豁。
指定數(shù)據(jù)類型和編譯時的常量,可以提高運行速度忙灼。Dart 程序有統(tǒng)一的程序入口:
main()
吹榴。
這一點是C / C++語言相像。Dart 支持頂級的變量定義佣蓉。
Dart 沒有
public
拉馋,protected
,and private
的概念里初。
但是如果變量或函數(shù)以下劃線(_
)開始啃勉,則該函數(shù)或變量屬于這個包私有(private
)的方法。Dart 中變量或函數(shù)以下劃線(
_
)或字母開始双妨,后面接上任意組合的下劃線(_
)淮阐,數(shù)字或字母。
這點與大部分的編程語言是一樣的刁品。嚴(yán)格區(qū)分
expression
和statement
Dart 的工具可以檢查出警告信息(
warning
)和錯誤(errors
)泣特。
警告信息只是表明代碼可能不工作,但是不會妨礙程序運行挑随。
錯誤可以是編譯時的錯誤状您,也可能是運行時的錯誤。編譯的錯誤將阻止程序運行兜挨,運行時的錯誤將會以exception
的方式呈現(xiàn)膏孟。Dart 使用
;
來分割語句
這點類似Java / C++, 但是與Python語言不同。
關(guān)鍵字
Dart 語言提供的關(guān)鍵字如下表所示:
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
abstract | continue | false | new | this |
as | default | final | null | throw |
assert | deferred | finally | operator | true |
async | do | for | part | try |
async | dynamic | get | rethrow | typedef |
await | else | if | return | var |
break | enum | implements | set | void |
case | export | import | static | while |
catch | external | in | super | with |
class | extends | is | switch | yield |
const | factory | library | sync | yield |
變量(Variable
)
變量賦值的例子
// The variable called name contains a reference to a String object with a value of “Bob”.
var name = 'Bob';
默認(rèn)值
沒有初始化的變量都會被賦予默認(rèn)值 null
.
即使是數(shù)字也是如此拌汇, 因為在Dart 中數(shù)字也是一個對象柒桑。
int lineCount;
assert(lineCount == null);
// Variables (even if they will be numbers) are initially null.
```language
Note: The assert() call is ignored in production mode. In checked mode, assert(condition) throws an exception unless condition is true.
可選類型
也可以在定義的時候指定變量的類型。
String name = 'Bob';
指定數(shù)據(jù)類型可以更好的辨明自己的使用意圖噪舀,編譯器和IDE 工具可以根據(jù)這些類型信息來做檢查幕垦,更早的發(fā)現(xiàn)問題丢氢。
如前文所說,通過指定類型先改,也可以減少編譯和運行時間疚察。
常量和固定值
-
如果定義的變量不會變化,可以使用
final
或const
來指明仇奶。
也可以使用final
或const
來代替類型聲明貌嫡。-
final
的值只能被設(shè)定一次。 -
const
是一個編譯時的常量该溯。( Const variables are implicitly final.)
final name = 'Bob'; // Or: final String name = 'Bob'; // name = 'Alice'; // Uncommenting this causes an error
-
通過對
const
類型做四則運算將自動得到一個const
類型的值岛抄。
const bar = 1000000; // Unit of pressure (dynes/cm2)
const atm = 1.01325 * bar; // Standard atmosphere
```language
- 可以通過
const
來創(chuàng)建常量的值
就是說const[] 本身是構(gòu)造函數(shù)。
// Note: [] creates an empty list.
// const [] creates an empty, immutable list (EIA).
var foo = const []; // foo is currently an EIA.
final bar = const []; // bar will always be an EIA.
const baz = const []; // baz is a compile-time constant EIA.
// You can change the value of a non-final, non-const variable,
// even if it used to have a const value.
foo = [];
// You can't change the value of a final or const variable.
// bar = []; // Unhandled exception.
// baz = []; // Unhandled exception.