Dart4Flutter -01– 變數, 型別和 函式

黃馬發表於2018-06-21

Dart4Flutter -01 – 變數, 型別和 函式

Dart4Flutter – 02 –控制流 和異常

Dart4Flutter – 03 – 類和泛型

Dart4Flutter – 04 – 非同步和庫

Dart4Flutter -拾遺01 - flutter-dart環境搭建

flutter入門 - 狀態管理

Flutter 入門例項1

Flutter 入門-本地訪問-MethodChannel

Dart4Flutter -01– 變數, 型別和 函式

Hello World

dart 版的hello world

main(List<String> args) {
  print('Hello World');
}
複製程式碼

和Java語言類似,每個dart程式都有一個main,是整個程式的入口。

將程式儲存到hello_world.dart檔案中,執行如下命令,就可以執行程式。

dart hello_world.dart

變數定義

類似在JavaScript中一樣,你可以使用var關鍵字定義變數

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

但是,和JavaScript不同的是,在Dart2中,一旦你給變數賦值一種型別的值,就不能再賦值另一種型別的值。Dart 可以自動從右邊資料推斷資料型別。

你也可以明確指定資料型別定義變數。

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

如果你不想改變變數所持有的值,可以用關鍵字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變數只能被賦值一次,他不需要在編譯時就賦值,可以在執行時賦值。

內建的資料型別

dart語言提供所有現代語言提供的所有基本資料型別。

  • 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的內容是不可改變的,可以使用關鍵字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建構函式定義map。

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

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

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

函式

dart中的函式和JavaScript中有點類似。你需要定義就是函式的名字、返回值、引數。

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";
}
複製程式碼

下面是定義一行函式的方法。

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

命名引數

dart有個叫命名引數的東西。當你呼叫函式的時候,你必須指定引數的名字。要使用命名引數,可以將函式的引數包括在花括號{}內。

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

如果你在呼叫命名引數的函式時,沒有指定引數的名字,程式將崩潰。

引數預設值

你可以給函式的命名引數一個預設值。下面的例子給lastName一個預設值。

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

函式是一等公民

在dart中函式比較靈活,例如,你可以將函式當引數傳遞給另一個函式。

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

這裡定義一個函式名字為out,需要一個函式引數。然後我定義一個名為printOutLoud的函式,他所做的就是將字串以大寫的形式列印。

dart 也有匿名函式,所以上面的例子中不用預定一個函式,而是傳遞一個匿名函式。

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

另一個匿名函式的例子。

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

本教程結束。

下一講 dart4flutter – 02 –控制流 和異常

參考

thetechnocafe.com/just-enough…

Dart4Flutter -01 – 變數, 型別和 函式

Dart4Flutter – 02 –控制流 和異常

Dart4Flutter – 03 – 類和泛型

Dart4Flutter – 04 – 非同步和庫

Dart4Flutter -拾遺01 - flutter-dart環境搭建

相關文章