Dart4Flutter-01– 變量, 類型和 函數(shù)

Hello World

dart 版的hello world

main(List<String> args) {
  print('Hello World');
}

和Java語言類似臭增,每個dart程序都有一個main,是整個程序的入口竹习。

將程序保存到hello_world.dart文件中誊抛,執(zhí)行如下命令,就可以運行程序整陌。

dart hello_world.dart

變量定義

類似在JavaScript中一樣拗窃,你可以使用var關(guān)鍵字定義變量

main(List<String> args) {
  var number = 42;
  var name = 'Gurleen Sethi';
  var salary = 150300.56;
  var isDoorOpen = true;
}

但是瞎领,和JavaScript不同的是,在Dart2中随夸,一旦你給變量賦值一種類型的值九默,就不能再賦值另一種類型的值。Dart 可以自動從右邊數(shù)據(jù)推斷數(shù)據(jù)類型宾毒。

你也可以明確指定數(shù)據(jù)類型定義變量驼修。

main(List<String> args) {
  int number = 42;
  String name = 'Gurleen Sethi';
  double salary = 150300.56;
  bool isDoorOpen = true;
}

If you don’t intend to change the value held by a variable, then declare it with a final or a const.

如果你不想改變變量所持有的值,可以用關(guān)鍵字final或者const聲明诈铛。

main(List<String> args) {
  final int number = 42;
  const String name = 'Gurleen Sethi';
 
  //Omit explicitly defining data types
  final salary = 150300.56;
  const isDoorOpen = true;
}

final 和 const的不同在于乙各,const是編譯時常量。例如癌瘾,const變量在編譯時必須要有一個值觅丰。例如,const PI = 3.14,然而final變量只能被賦值一次妨退,他不需要在編譯時就賦值妇萄,可以在運行時賦值。

內(nèi)置的數(shù)據(jù)類型

dart語言提供所有現(xiàn)代語言提供的所有基本數(shù)據(jù)類型咬荷。

  • Numbers
  • Strings
  • Booleans
  • Lists
  • Maps
main(List<String> args) {
  //Numbers
  int x = 100;
  double y = 1.1;
  int z = int.parse('10');
  double d = double.parse('44.4');
 
  //Strings
  String s = 'This is a string';
  String backslash = 'I can\'t speak';
  //String interpolation
  String interpolated = 'Value of x is $x';    //Prints: Value of x is 100
  String interpolated2 = 'Value of s is ${s.toLowerCase()}';    //Prints: Value of s is this is a string
  
  //Booleans
  bool isDoorOpen = false;
}

Lists

聲明一個list非常的簡單冠句,可以簡單使用方括號[]定義list。下面是list的常用操作幸乒。

main(List<String> args) {
  var list = [1,2,3,4];
 
  print(list); //Output: [1, 2, 3, 4]
  //Length 長度
  print(list.length);
 
  //Selecting single value 獲取單個值
  print(list[1]);    //Outout: 2
 
  //Adding a value 添加值到list
  list.add(10);
 
  //Removing a single isntance of value 刪除單個值
  list.remove(3);
 
  //Remove at a particular position 刪除指定位置的值
  list.removeAt(0);
}

如果你想定義一個編譯時常量list懦底,例如,list的內(nèi)容是不可改變的罕扎,可以使用關(guān)鍵字const.

main(List<String> args) {
  var list = const [1,2,3,4];   
}

Maps

定義map也很簡單聚唐。可以使用花括號{}定義map腔召。

main(List<String> args) {
  var map = {
    'key1': 'value1',
    'key2': 'value2',
    'key3': 'value3'
  };
 
  //Fetching the values 獲取值
  print(map['key1']);    //Output: value1
  print(map['test']);    //Output: null
 
  //Add a new value 添加值
  map['key4'] = 'value4';
  
  //Length   獲取長度
  print(map.length);
 
  //Check if a key is present 檢查是否存在
  map.containsKey('value1');
 
  //Get entries and values
  var entries = map.entries;
  var values = map.values;
}

你也可以使用map構(gòu)造函數(shù)定義map杆查。

main(List<String> args) {
  var squares = new Map();
  squares[4] = 16;
}

如果你想定義編譯時常量的map,可以使用const關(guān)鍵字。

main(List<String> args) {
  var squares = const {    //不能改變當(dāng)前map的值
    2: 4,
    3: 9,
    4: 16,
    5: 25
  };
}

函數(shù)

dart中的函數(shù)和JavaScript中有點類似臀蛛。你需要定義就是函數(shù)的名字亲桦、返回值、參數(shù)浊仆。

main(List<String> args) {
  var name = fullName('John', 'Doe');
  print(name);
}
 
String fullName(String firstName, String lastName) {
  return "$firstName $lastName";
}

你也可以省略返回值類型客峭,程序同樣可以運行。

main(List<String> args) {
  var name = fullName('John', 'Doe');
  print(name);
}
 
fullName(String firstName, String lastName) {
  return "$firstName $lastName";
}

下面是定義一行函數(shù)的方法抡柿。

main(List<String> args) {
  var name = fullName('John', 'Doe');
  print(name);
}
 
fullName(String firstName, String lastName) => "$firstName $lastName";

命名參數(shù)

dart有個叫命名參數(shù)的東西舔琅。當(dāng)你調(diào)用函數(shù)的時候,你必須指定參數(shù)的名字沙绝。要使用命名參數(shù)搏明,可以將函數(shù)的參數(shù)包括在花括號{}內(nèi)鼠锈。

main(List<String> args) {
  var name = fullName(firstName: 'John', lastName: 'Doe');
  print(name);
}
 
fullName({String firstName, String lastName}) {
  return "$firstName $lastName";
}

如果你在調(diào)用命名參數(shù)的函數(shù)時,沒有指定參數(shù)的名字星著,程序?qū)⒈罎ⅰ?/p>

參數(shù)默認值

你可以給函數(shù)的命名參數(shù)一個默認值购笆。下面的例子給lastName一個默認值。

main(List<String> args) {
  var name = fullName(firstName: 'John');
  print(name);
}
 
fullName({String firstName, String lastName = "Lazy"}) {
  return "$firstName $lastName";
}

函數(shù)是一等公民

在dart中函數(shù)比較靈活虚循,例如同欠,你可以將函數(shù)當(dāng)參數(shù)傳遞給另一個函數(shù)。

main(List<String> args) {
  out(printOutLoud);
}
 
out(void inner(String message)) {
  inner('Message from inner function');
}
 
printOutLoud(String message) {
  print(message.toUpperCase());
}

這里定義一個函數(shù)名字為out,需要一個函數(shù)參數(shù)横缔。然后我定義一個名為printOutLoud的函數(shù)铺遂,他所做的就是將字符串以大寫的形式打印。

dart 也有匿名函數(shù)茎刚,所以上面的例子中不用預(yù)定一個函數(shù)襟锐,而是傳遞一個匿名函數(shù)。

main(List<String> args) {
  out((message) {
    print(message.toUpperCase());
  });
}
 
out(void inner(String message)) {
  inner('Message from inner function');
}

另一個匿名函數(shù)的例子膛锭。

main(List<String> args) {
  var list = [1,2,3,4];
 
  list.forEach((item) {
    print(item);
  });
}

本教程結(jié)束粮坞。

參考

http://thetechnocafe.com/just-enough-dart-for-flutter-tutorial-01-variables-types-and-functions/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市初狰,隨后出現(xiàn)的幾起案子莫杈,更是在濱河造成了極大的恐慌,老刑警劉巖奢入,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筝闹,死亡現(xiàn)場離奇詭異,居然都是意外死亡腥光,警方通過查閱死者的電腦和手機关顷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來武福,“玉大人解寝,你說我怎么就攤上這事∷胰澹” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵夫偶,是天一觀的道長界睁。 經(jīng)常有香客問我,道長兵拢,這世上最難降的妖魔是什么翻斟? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮说铃,結(jié)果婚禮上访惜,老公的妹妹穿的比我還像新娘嘹履。我一直安慰自己,他們只是感情好债热,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布砾嫉。 她就那樣靜靜地躺著,像睡著了一般窒篱。 火紅的嫁衣襯著肌膚如雪焕刮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天墙杯,我揣著相機與錄音配并,去河邊找鬼。 笑死高镐,一個胖子當(dāng)著我的面吹牛溉旋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嫉髓,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼观腊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了岩喷?” 一聲冷哼從身側(cè)響起恕沫,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纱意,沒想到半個月后婶溯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡偷霉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年迄委,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片类少。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡叙身,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出硫狞,到底是詐尸還是另有隱情信轿,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布残吩,位于F島的核電站财忽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泣侮。R本人自食惡果不足惜即彪,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望活尊。 院中可真熱鬧隶校,春花似錦漏益、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至稠屠,卻和暖如春峦睡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背权埠。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工榨了, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人攘蔽。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓龙屉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親满俗。 傳聞我的和親對象是個殘疾皇子转捕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容