在 InteIIiJ IDEA 中搭建 Dart 的開(kāi)發(fā)環(huán)境: http://www.lxweimin.com/p/fa275a08b083
Dart 語(yǔ)言簡(jiǎn)易教程(一)
一個(gè)簡(jiǎn)單的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.
}
從這個(gè)程序里面我們可以看到如下的東西:
- 使用
//
來(lái)注釋。同時(shí)/* ...*/
也可以用來(lái)注釋。 -
num
是一個(gè)數(shù)據(jù)類型,定義在語(yǔ)言中。同樣的類型還有String
,int
,bool
。
就是說(shuō)Dart語(yǔ)言是有數(shù)據(jù)類型的概念的。這點(diǎn)與Python語(yǔ)言不同。 -
print()
是顯示輸出的方法。 -
'...'
(或者"..."
),表示是有個(gè)string
類型的數(shù)據(jù)。
這一點(diǎn)與 Python 中string 類型數(shù)據(jù)一樣的使用方法。 -
var
定義了一個(gè)變量,但是沒(méi)有指定特定的數(shù)據(jù)類型。
這種用法是很靈活的,既可以像Java類似的語(yǔ)言采取強(qiáng)數(shù)據(jù)類型,也可以像Python那樣在第一次賦值的時(shí)候確認(rèn)數(shù)據(jù)類型。
按照Dart 的編程規(guī)范,使用2個(gè)空格來(lái)縮進(jìn)。
這一點(diǎn)與Python 語(yǔ)言建議的4個(gè)空格不一樣。
一些重要的概念
所有的東西都是對(duì)象,無(wú)論是變量,數(shù)字,函數(shù)等。
所以的對(duì)象都是類的實(shí)例。
所有的對(duì)應(yīng)都繼承自內(nèi)置的Object
類。程序中指定數(shù)據(jù)類型是為了指出自己的使用意圖,并幫助語(yǔ)言進(jìn)行語(yǔ)法檢查。但是,指定類型不是必須的。
Dart 語(yǔ)言是弱數(shù)據(jù)類型。Dart 代碼在運(yùn)行前解析。
指定數(shù)據(jù)類型和編譯時(shí)的常量,可以提高運(yùn)行速度。Dart 程序有統(tǒng)一的程序入口:
main()
。
這一點(diǎn)是C / C++語(yǔ)言相像。Dart 支持頂級(jí)的變量定義。
Dart 沒(méi)有
public
,protected
,and private
的概念。
但是如果變量或函數(shù)以下劃線(_
)開(kāi)始,則該函數(shù)或變量屬于這個(gè)包私有(private
)的方法。Dart 中變量或函數(shù)以下劃線(
_
)或字母開(kāi)始,后面接上任意組合的下劃線(_
),數(shù)字或字母。
這點(diǎn)與大部分的編程語(yǔ)言是一樣的。嚴(yán)格區(qū)分
expression
和statement
Dart 的工具可以檢查出警告信息(
warning
)和錯(cuò)誤(errors
)。
警告信息只是表明代碼可能不工作,但是不會(huì)妨礙程序運(yùn)行。
錯(cuò)誤可以是編譯時(shí)的錯(cuò)誤,也可能是運(yùn)行時(shí)的錯(cuò)誤。編譯的錯(cuò)誤將阻止程序運(yùn)行,運(yùn)行時(shí)的錯(cuò)誤將會(huì)以exception
的方式呈現(xiàn)。Dart 使用
;
來(lái)分割語(yǔ)句
這點(diǎn)類似Java / C++, 但是與Python語(yǔ)言不同。
關(guān)鍵字
Dart 語(yǔ)言提供的關(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)值
沒(méi)有初始化的變量都會(huì)被賦予默認(rèn)值 null
.
即使是數(shù)字也是如此, 因?yàn)樵贒art 中數(shù)字也是一個(gè)對(duì)象。
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.
可選類型
也可以在定義的時(shí)候指定變量的類型。
String name = 'Bob';
指定數(shù)據(jù)類型可以更好的辨明自己的使用意圖,編譯器和IDE 工具可以根據(jù)這些類型信息來(lái)做檢查,更早的發(fā)現(xiàn)問(wèn)題。
如前文所說(shuō),通過(guò)指定類型,也可以減少編譯和運(yùn)行時(shí)間。
常量和固定值
-
如果定義的變量不會(huì)變化,可以使用
final
或const
來(lái)指明。
也可以使用final
或const
來(lái)代替類型聲明。-
final
的值只能被設(shè)定一次。 -
const
是一個(gè)編譯時(shí)的常量。( Const variables are implicitly final.)
final name = 'Bob'; // Or: final String name = 'Bob'; // name = 'Alice'; // Uncommenting this causes an error
-
通過(guò)對(duì)
const
類型做四則運(yùn)算將自動(dòng)得到一個(gè)const
類型的值。
const bar = 1000000; // Unit of pressure (dynes/cm2)
const atm = 1.01325 * bar; // Standard atmosphere
```language
- 可以通過(guò)
const
來(lái)創(chuàng)建常量的值
就是說(shuō)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.