Dart4Flutter -01– 变量, 类型和 函数

7,596 阅读4分钟

Dart4Flutter -01 – 变量, 类型和 函数

Dart4Flutter – 02 –控制流 和异常

Dart4Flutter – 03 – 类和泛型

Dart4Flutter – 04 – 异步和库

Dart4Flutter -拾遗01 - flutter-dart环境搭建

flutter入门 - 状态管理

Flutter 入门实例1

Flutter 入门-本地访问-MethodChannel

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环境搭建