1. dynamic的使用
- 在開發(fā)中, 通常情況下不使用dynamic, 因為類型的變量會帶來潛在的危險
dynamic name = 'WinJayQ';
print(name.runtimeType);//String
name = 18;
print(name.runtimeType);//int
2.final&const的使用
- final和const都是用于定義常量的, 也就是定義之后值都不可以修改
2.1 final和const有什么區(qū)別呢?
- const在賦值時, 賦值的內容必須是在編譯期間就確定下來的
- final在賦值時, 可以動態(tài)獲取, 比如賦值一個函數(shù)
String getName() {
return 'WinJayQ';
}
main(List<String> args) {
const name = getName(); // 錯誤的做法, 因為要執(zhí)行函數(shù)才能獲取到值
final name2 = getName(); // 正確的做法
}
2.2 const放在賦值語句的右邊裙戏,可以共享對象株憾,提高性能
class Person {
const Person();
}
main(List<String> args) {
final a = const Person();
final b = const Person();
print(identical(a, b)); // true
final m = Person();
final n = Person();
print(identical(m, n)); // false
}
3.布爾類型
- 注意: Dart中不能判斷非0即真, 或者非空即真
var message = 'Hello Dart';
// 錯誤的寫法
//Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
if (message) {
print(message)
}
4.字符串類型
Dart字符串是UTF-16編碼單元的序列。您可以使用單引號或雙引號創(chuàng)建一個字符串,可以使用三個單引號或者雙引號表示多行字符串:
// 2.表示多行字符串的方式
var message1 = '''
哈哈哈
呵呵呵
嘿嘿嘿''';
5.函數(shù)
如果函數(shù)中只有一個表達式, 那么可以使用箭頭語法(arrow syntax)
- 注意, 這里面只能是一個表達式, 不能是一個語句
sum(num1, num2) => num1 + num2;
5.1函數(shù)的參數(shù)問題
函數(shù)的參數(shù)可以分成兩類: 必須參數(shù)和可選參數(shù)
可選參數(shù)可以分為 命名可選參數(shù) 和 位置可選參數(shù)
定義方式:
命名可選參數(shù): {param1, param2, ...}
位置可選參數(shù): [param1, param2, ...]
- 5.1.1 命名可選參數(shù)的演示:
// 命名可選參數(shù)
printInfo1(String name, {int age, double height}) {
print('name=$name age=$age height=$height');
}
// 調用printInfo1函數(shù)
printInfo1('win'); // name=win age=null height=null
printInfo1('win', age: 18); // name=win age=18 height=null
printInfo1('why', age: 18, height: 1.88); // name=win age=18 height=1.88
printInfo1('why', height: 1.88); // name=win age=null height=1.88
- 5.1.2 位置可選參數(shù)的演示:
// 定義位置可選參數(shù)
printInfo2(String name, [int age, double height]) {
print('name=$name age=$age height=$height');
}
// 調用printInfo2函數(shù)
printInfo2('win'); // name=win age=null height=null
printInfo2('win', 18); // name=win age=18 height=null
printInfo2('win', 18, 1.88); // name=win age=18 height=1.88
- 5.1.3 命名可選參數(shù), 可以指定某個參數(shù)是必傳的(使用@required)
- Required 是在meta 包下面定義的司训,因此你需要import package:meta/meta.dart 或者,import那些輸出meta包的包宏怔,如Flutter下的package:flutter/material.dart.
// 命名可選參數(shù)的必傳
printInfo3(String name, {int age, double height, @required String address}) {
print('name=$name age=$age height=$height address=$address');
}
5.1.4 參數(shù)默認值
參數(shù)可以有默認值, 在不傳入的情況下, 使用默認值注意, 只有可選參數(shù)才可以有默認值, 必須參數(shù)不能有默認值
// 參數(shù)的默認值
printInfo4(String name, {int age = 18, double height=1.88}) {
print('name=$name age=$age height=$height');
}
6.匿名函數(shù)的使用
某些情況下愉豺,給函數(shù)命名太麻煩了,我們可以使用沒有名字的函數(shù)隙袁,這種函數(shù)可以被稱之為匿名函數(shù)( anonymous function),也可以叫l(wèi)ambda或者closure弃榨。
main(List<String> args) {
// 1.定義數(shù)組
var movies = ['盜夢空間', '星際穿越', '少年派', '大話西游'];
// 2.使用forEach遍歷: 有名字的函數(shù)
printElement(item) {
print(item);
}
movies.forEach(printElement);
// 3.使用forEach遍歷: 匿名函數(shù)
movies.forEach((item) {
print(item);
});
movies.forEach((item) => print(item));
}
學習內容來自Flutter從入門到實戰(zhàn)