// 這是程序執行的入口。 main() { var number = 42; // 定義並初始化一個變量。 printNumber(number); // 調用一個方法。 } // 定義個方法。 printNumber(num aNumber) { print('The number is $aNumber.'); // 在控制檯打印內容。 num m = 10; //數字類型變量申明 print(m); // 在控制檯打印內容。 int n = 10; //整形類型變量申明 print(n); // 在控制檯打印內容。 bool isBool = true; //布爾類型變量申明 print(isBool); // 在控制檯打印內容。 double l = 10.001; //浮點型類型變量申明 print(l); // 在控制檯打印內容。 String lastName = 'bird'; //字符串類型變量申明,使用`'...'` (或者 `"..."`)表示字面量 print(lastName); // 在控制檯打印內容。 //var 一種不指定類型聲明變量的方式,建議使用以上強制類型來使用,這樣編譯器不須要去推導類型 var k = 'animal'; print(k); // 在控制檯打印內容。 var o = 10; print(o); // 在控制檯打印內容。 }
輸出結果:javascript
The number is 42. 10 10 true 10.001 bird animal 10
經過以上一個簡單的Dart小程序簡單分析一下html
//Dart 程序執行的入口方法,每一個程序都 *須要* 一個這樣的方法 void main() { }
//單行註釋 /* 多行 註釋 */
num m = 10; //數字類型變量申明 int n = 10; //整形類型變量申明 bool isBool = true; //布爾類型變量申明 double l = 10.001; //浮點型類型變量申明 String lastName = 'bird'; //字符串類型變量申明,使用`'...'` (或者 `"..."`)表示字面量 //var 一種不指定類型聲明變量的方式,建議使用以上強制類型來使用,這樣編譯器不須要去推導類型 var k = 'animal'; var o = 10;
賦值語句後面的值即爲字面量,好比以上的十、true、bird等java
print("要輸出的內容......")
在字符串字面量中引用變量或者表達式 ,經過$variableName 或者 ${expression}形式引用變量express
String dogName = "Sam"; print("my dog name is :$dogName"); print("my dog name is :${dogName}");
輸出結果:小程序
my dog name is :Sam my dog name is :Sam
Dart 是一個真正的面嚮對象語言,方法也是對象而且具備一種 類型 Function。 這意味着,方法能夠賦值給變量,也能夠當作其餘方法的參數。 也能夠把 Dart 類的實例當作方法來調用。api
printNumber(num aNumber) { //省略內容 }
能夠選擇使用縮寫語法來定義:微信
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
=> *expr*
語法是 { return *expr*; }
形式的縮寫。=>
形式 有時候也稱之爲 胖箭頭 語法。async
經過以上簡單的Dart程序對變量已經有所瞭解,下面來對變量具體講講。ide
聲明變量並賦值的示例:工具
var name = 'Bob'
變量是一個引用。上面名字爲 name
的變量引用了 一個內容爲 「Bob」 的 String 對象
沒有初始化的變量自動獲取一個默認值爲 null
。類型爲數字的 變量如何沒有初始化其值也是 null
num m; print(m == null); //true int n; print(n == null); //true bool isBool; print(isBool == null); //true double l; print(l == null); //true String lastName; print(lastName == null);//true
num //數字類型 int //整數類型 bool //布爾類型 double //浮點類型 String //字符串類型
在聲明變量的時候,你能夠選擇加上具體類型:
String name = 'Bob';
添加類型能夠更加清晰的表達你的意圖。 IDE 編譯器等工具備可使用類型來更好的幫助你, 能夠提供代碼補全、提早發現 bug 等功能。 通常使用 var
而不是具體的類型來定義局部變量
若是你之後不打算修改一個變量,使用 final
或者 const
,二者的區別
相同點,都是修飾一個不可變動的變量
const lastName = 'postbird'; final firstName = 'bird '; lastName = '123'; // 報錯 firstName = '123'; // 報錯
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-DZ6cr6O5-1571992016901)(E:\Baidu\學習筆記\dart\2.Dart基礎介紹\1.png)]
const 只能經過靜態數據賦值,不然會報錯 , 給 const變量賦值非 const 字面量,則報錯以下:
const lastName = 'postbird'; final firstName = 'bird '; final time = new DateTime.now(); const time2 = new DateTime.now(); // 報錯
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-DptjZEbh-1571992016905)(E:\Baidu\學習筆記\dart\2.Dart基礎介紹\2.png)]
''' '''
String content = ''' multipart ... string '''; print(content);
輸出結果
multipart ... string
拼接除了使用加好,還能夠像 js 的模板字符串直接拼接,語法差很少,只不過不須要反引號,普通引號便可,${v}
,其中若是隻是變量名,能夠省略大括號 $v
:
String str1 = 'dart1'; String str2 = 'darg2'; int age = 21; print('$str1 $str2 ${age.toString()}'); print('${str1} ${str2} ${age.toString()} ${age} ${age * age}');
輸出結果
dart1 darg2 21 dart1 darg2 21 21 441
int num1 = 123; double price = 123.452323232; print(price * num1); price = 12; print(price * num1);
輸出結果
15184.635757536 1476.0
if 判斷只能是 bool 類型的返回值,這點和 js 這衶弱類型語言徹底不一樣:
bool flag = true; if(flag) { print('--- true'); } int num1 = 1; double num2 = 1.0; String num3 = '1'; if(num1 == num2) { print('num1 == num2'); } else { print('num1 != num2'); } if(num1 == num3) { print('num1 == num3'); } else { print('num1 != num3'); } // int a = 1; // if(a) { // 報錯 // print('true'); // }
若是 if 使用了非 bool 類型判斷報錯以下
int a = 1; if(a) { // 報錯 print('true'); }
輸出結果
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-2bjEzoLy-1571992016907)(E:\Baidu\學習筆記\dart\2.Dart基礎介紹\3.png)]
is
操做符可以判斷類型歸屬,好比 A is B
,可以返回 bool 類型,判斷 A 是否屬於 B 類型。
var value = 123; if(value is String) { print('${value} is string'); } else if (value is int) { print('${value} is int'); } else if (value is double) { print('${value} is double'); } else { print('${value} is other type'); }
輸出結果
123 is int
List 類型是使用很是多的類型,與 js 的 Array 相似,初始賦值能夠直接給一個列表,也能夠經過 new List()
指定空的列表.
默認列表子項支持的值類型是 dynamic,不限制具體類型,若是須要限制具體類型則須要使用泛型,好比 new List()
限制子項類型
List 做爲對象提供了一些的方法和屬性: API 文檔地址: https://api.dart.dev/dev/2.4.0-dev.0.0/dart-core/List-class.html
經過 add()
可以添加一個子項, 經過 addAll()
可以追加另外一個 List
List l1 = [123, '123', 'postbird']; print(l1); List l2 = new List(); l2.add('abc'); l2.add(123); l2.addAll(['iterable', '222', '333', 123]); print(l2); List l3 = new List<String>(); l3.add('abc'); // l3.add(123); print(l3); List l4 = new List<int>(); l4.add(123); // l4.add(123.12); print(l4); List l5 = new List<int>(); l5.add(1); l5.add(3); l5.add(2); l5.add(4); l5.add(6); l5.add(2); print(l5); l5.sort(); print(l5);
輸出結果
[123, 123, postbird] [abc, 123, iterable, 222, 333, 123] [abc] [123] [1, 3, 2, 4, 6, 2] [1, 2, 2, 3, 4, 6]
與 javascript 對象相似,在 oc 中稱爲字典。
能夠經過字面量指定,也能夠經過聲明一個 new Map()
的空 Map。
API 文檔地址:https://api.dart.dev/dev/2.4.0-dev.0.0/dart-core/Map-class.html
var person = { 'name': 'ptbird', 'age': 24, 'work': ['it1', 'it2'] }; print(person); print(person.toString()); print(person['name']); print(person['age']); print(person['work']); Map person2 = new Map(); person2['name'] = 'name2'; person2['age'] = 24; person2['work'] = ['it1', 'it2']; print(person2); print(person2['work']);
輸出結果
{name: ptbird, age: 24, work: [it1, it2]} {name: ptbird, age: 24, work: [it1, it2]} ptbird 24 [it1, it2] {name: name2, age: 24, work: [it1, it2]} [it1, it2]
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 |
http://dart.goodev.org/guides/language/language-tour
http://www.ptbird.cn/dart-variable-operation.html#menu_index_3
歡迎掃面下列二維碼關注「餘弦的自留地」公衆微信號
萬物之中,但願至美