簡介
Dart([KK] 英語發音:/dɑrt/, [DJ] 英語發音:/dɑ:t/)
Dart
是一種適用於全球資訊網的開放原始碼程式語言,由Google主導開發,於2011年10月公開。它的開發團隊由Google Chrome瀏覽器V8引擎團隊的領導者拉爾斯·巴克主持,目標在於成為下一代結構化Web
開發語言。類似JavaScript
,Dart
也是一種面嚮物件語言,但是它採用基於類程式設計。它只允許單一繼承,語法風格接近C
語言。 --維基百科
閒話少說,上程式碼,先看看Dart長什麼樣:
// 定義一個函式。
printInteger(int aNumber) {
print('The number is $aNumber.'); // 使用字串插值寫法,列印到控制檯。
}
// 這是應用程式開始執行的地方。
main() {
var number = 42; // 宣告並初始化變數。
printInteger(number); // 呼叫一個函式。
}
複製程式碼
注意:Dart語言的函式必須要先宣告,再呼叫,宣告程式碼要寫在呼叫程式碼前面。
Dart變數型別
1.使用var
宣告一個變數並賦值(官方推薦):
var name = 'Bob' ;
複製程式碼
變數儲存引用。變數name包含對String值為“Bob” 的物件的引用。name推斷變數的型別String,但也可以通過指定它來更改該型別。
2.如果物件不限於單一型別,還可以使用dynamic
來進行宣告:
dynamic name = 'Bob' ;
複製程式碼
3.另一種選擇是顯式宣告可以推斷出的型別:
String name = 'Bob' ;
複製程式碼
備註:如果只宣告變數不賦值,則預設值為null
,包括數字型別變數。在Dart
裡一切都是物件,數字也是一種物件型別,例如:
num lineCount;
lineCount ==null;// true
複製程式碼
final 與 const
如果不打算更改變數,請使用final
或const
宣告。filal
與const
變數都只能在初始化時賦值一次,宣告後不可再改變; const
變數是編譯時常量。
注意: 例項變數可以是final,但不能是const。
以下是建立和設定最終變數的示例:
final name = 'Bob' ; //沒有型別註釋
final String nickname = 'Bobby' ;
複製程式碼
無法更改final
變數的值:
name = 'Alice' ; //錯誤:final變數只能設定一次。
複製程式碼
Dart內建型別
Dart語言特別支援以下型別:
- numbers
- strings
- booleans
- lists (也稱為陣列)
- maps
- runes (用於表示字串中的Unicode字元)
- symbols
因為Dart中的每個變數都引用一個物件 ,一個類的例項,您通常可以使用建構函式來初始化變數。一些內建型別有自己的建構函式。例如,您可以使用Map()
建構函式來建立map物件。
1.Numbers有兩種型別
int
:整數值不大於64位,具體取決於平臺。
double
:64位(雙精度)浮點數。
int
和double
是number的子型別。
字串與數字型別互轉:
// String -> int
var one = int.parse('1');
assert(one == 1);
// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);
// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');
// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');
複製程式碼
2. Strings
可以使用單引號' '或雙引號" "來建立字串:
var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
複製程式碼
可以通過${expression}
將一個表示式放入字串中,如果表示式expression
是一個識別符號,則可以直接省略花括號{}
,為了獲取與物件對應的字串, Dart 會呼叫物件的 toString () 方法。
可以使用相鄰的字串文字或+ 運算子連線字串:
var s1 = 'String ''concatenation'" works even over line breaks.";
assert(s1 == 'String concatenation works even over ''line breaks.');
var s2 = 'The + operator ' + 'works, as well.';
assert(s2 == 'The + operator works, as well.');
複製程式碼
建立多行字串的另一種方法:使用帶有單引號或雙引號的三重引號:
var s1 = '''
You can create
multi-line strings like this one.
''';
var s2 = """This is also a
multi-line string.""";
複製程式碼
可以通過為其新增字首來建立“原始”字串r
:
var s = r'In a raw string, not even \n gets special treatment.';
複製程式碼
3. Booleans
布林值使用bool
宣告,取值為:true
和 false
,它們都是編譯時常量。
// Check for an empty string.
var fullName = '';
assert(fullName.isEmpty);
// Check for zero.
var hitPoints = 0;
assert(hitPoints <= 0);
// Check for null.
var unicorn;
assert(unicorn == null);
// Check for NaN.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);
複製程式碼
4. Lists
Dart裡的list
與JavaScript裡的list
類似,以下是宣告方式:
var list = [1, 2, 3];
複製程式碼
注意: 解析器推斷出list有型別List。如果嘗試將非整數物件新增到此列表,則解析器或執行時會引發錯誤。
列表的索引使用從0開始,其中0是第一個元素的索引,list.length - 1
是最後一個元素的索引。
5. Maps
通常,對映是關聯鍵和值的物件。鍵和值都可以是任何型別的物件。每個鍵只出現一次,但可以多次使用相同的值。
宣告示例:
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
複製程式碼
注意: 該解析推斷
gifts
元素型別 Map<String, String>,且nobleGases
元素型別 Map<int, String>。如果您嘗試將錯誤型別的值新增到任一對映,則解析器或執行時會引發錯誤。
也可以使用Map建構函式建立相同的物件:
var gifts = Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
var nobleGases = Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
複製程式碼
注意:可能希望看到new Map()而不僅僅是Map()。從Dart 2開始,
new
關鍵字是可選的。
var gifts = {'first': 'partridge'};
// 增
gifts['fourth'] = 'calling birds'; // Add a key-value pair
// 刪
gifts.remove('first');
// 改
gifts['fourth'] = '1234';
// 查
var item = gifts['fourth'];
複製程式碼
6. Functions
Dart是一種真正的面嚮物件語言,因此即使是函式也是物件,並且具有Function型別。這意味著函式可以分配給變數或作為引數傳遞給其他函式。你也可以像呼叫函式一樣呼叫Dart類的例項。
函式示例:
bool isNoble(int atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
// 可以省略返回值型別
isNoble(atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
// 箭頭函式
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
複製程式碼
重要的概念
當您瞭解Dart語言時,請記住以下事實和概念:
-
您可以放在變數中的所有內容都是一個物件,每個物件都是一個類的例項。偶數,函式和 null物件。所有物件都從Object類繼承。
-
儘管Dart是強型別的,但型別註釋是可選的,因為Dart可以推斷型別。在上面的程式碼中,number 推斷為型別int。如果要明確說明不需要任何型別,請使用特殊型別dynamic。
-
Dart支援泛型型別,如List(整數列表)或List(任何型別的物件列表)。
-
Dart支援頂級函式(例如main()),以及繫結到類或物件的函式(分別是靜態和例項方法)。您還可以在函式內建立函式(巢狀函式或本地函式)。
-
類似地,Dart支援頂級變數,以及繫結到類或物件的變數(靜態和例項變數)。例項變數有時稱為欄位或屬性。
-
與Java,Dart不具備關鍵字public,protected和private。如果識別符號以下劃線(_)開頭,則它對其庫是私有的。
-
識別符號可以以字母或下劃線(_)開頭,後跟這些字元加數字的任意組合。
-
有時候事物是表達還是陳述是很重要的,因此有助於準確地理解這兩個詞。
-
Dart工具可以報告兩種問題:警告和錯誤。警告只是表明您的程式碼可能無法正常工作,但它們不會阻止您的程式執行。錯誤可以是編譯時或執行時。編譯時錯誤會阻止程式碼執行; 執行時錯誤導致 程式碼執行時引發異常。
尾記:文章為本人學習Dart時做的筆記,這樣做學習起來,知識框架相對比較完整,也容易反覆檢視,也方便其他小夥伴檢視。文章所有內容幾乎都來自Dart programming language,部分來自網際網路,如有雷同,完全是我抄襲。哈哈~