Dart语法知识(List ,Final ,Const,Maps,异常处理,构造方法 as is)

释放双眼,带上耳机,听听看~!

var
类似在JavaScript中一样,你可以使用var关键字定义变量


1
2
3
4
5
6
7
8
9
1main(List<String> args) {
2  var number = 42;
3  var name = 'Gurleen Sethi';
4  var salary = 150300.56;
5  var isDoorOpen = true;
6}
7
8
9

但是,和JavaScript不同的是,在Dart2中,一旦你给变量赋值一种类型的值,就不能再赋值另一种类型的值。Dart 可以自动从右边数据推断数据类型。

特殊情况
Dart2.1里面新增特性,当double的值为int值时,int自动转成double。
例如:double test = 12;//打印结果是12.0
即 var a=5.5 ,确定是变量a是double类型时,也可以接受a=10;

Dart2.1,double也有api转成int,会把小数点后面的全部去掉。


1
2
3
4
5
6
1   double test2 = 15.1;
2   double test3 = 15.1234;
3   print(test2.toInt());// 结果是15
4print(test3.toInt());// 结果是15
5
6

Final 和 Const的用法
1、被final或者const修饰的变量,变量类型可以省略。


1
2
3
4
5
6
7
8
9
1//可以省略String这个类型声明
2final name1 = "张三";
3//final String name1  = "张三";
4    
5const name2 = "李四";
6//const String name2 = "李四";
7
8
9

2、被 final 或 const 修饰的变量无法再去修改其值。
3、注意:flnal 或者 const 不能和 var 同时使用,


1
2
3
4
5
1 //这样写都会报错
2    //final var name1 = "张三";
3    //const var name2 = "李四";
4
5

Lists


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1main(List<String> args) {
2  var list = [1,2,3,4];
3
4  print(list); //Output: [1, 2, 3, 4]
5  //Length 长度
6  print(list.length);
7
8  //Selecting single value 获取单个值
9  print(list[1]);    //Outout: 2
10
11  //Adding a value 添加值到list
12  list.add(10);
13
14  //Removing a single isntance of value 删除单个值
15  list.remove(3);
16
17  //Remove at a particular position 删除指定位置的值
18  list.removeAt(0);
19  var list = const [1,2,3,4];   //不可变
20}
21
22
23

Maps


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1main(List<String> args) {
2  var map = {
3    'key1': 'value1',
4    'key2': 'value2',
5    'key3': 'value3'
6  };
7
8  //Fetching the values 获取值
9  print(map['key1']);    //Output: value1
10  print(map['test']);    //Output: null
11
12  //Add a new value 添加值
13  map['key4'] = 'value4';
14  
15  //Length   获取长度
16  print(map.length);
17
18  //Check if a key is present 检查是否存在
19  map.containsKey('value1');
20
21  //Get entries and values
22  var entries = map.entries;
23  var values = map.values;
24}
25
26
27

异常
如果你不知道抛出异常的类型,或者不确定,可以使用catch块处理任意类型的异常。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1main(List<String> args) {
2  try {
3    divide(10, 0);
4  } on IntegerDivisionByZeroException {
5    print('Division by zero.');
6  } catch (e) {
7    print(e);
8  }
9}
10
11divide(int a, int b) {
12  if (b == 0) {
13    throw new Exception('Some other exception.');
14  }
15  return a / b;
16}
17
18

构造函数的写法
给构造函数提供了名称,这样做使得不同的构造函数变的更加清晰。


1
2
3
4
5
6
7
8
9
10
11
12
13
1class Dog {
2  String name;
3  int age;
4
5  Dog(this.name, this.age);
6
7  Dog.newBorn() {
8    name = 'Doggy';
9    age = 0;
10  }
11}
12
13

Getter and Setters


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1main(List<String> args) {
2  Dog d = new Dog('Duffy', 5);
3  d.respectedName = 'Mr.Duffy';
4  print(d.respectedName);
5}
6
7class Dog {
8  String name;
9  int age;
10
11  Dog(this.name, this.age);
12
13  String get respectedName {
14    return 'Mr.$name';
15  }
16
17  set respectedName(String newName) {
18    name = newName;
19  }
20
21  Dog.newBorn() {
22    name = 'Doggy';
23    age = 0;
24  }
25
26  bark() {
27    print('Bow Wow');
28  }
29}
30
31
32

访问控制
在dart中,可以在属性和方法名前添加“_”使私有化。现在让我们使name属性私有化。

枚举


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1main(List<String> args) {
2  Dog d = new Dog('Duffy', 12, CurrentState.sleeping);
3  print(d.state == CurrentState.sleeping); //Prints 'true'
4}
5
6enum CurrentState {
7  sleeping,
8  barking,
9  eating,
10  walking
11}
12
13class Dog {
14  String name;
15  int age;
16  CurrentState state;
17
18  Dog(this.name, this.age, this.state);
19
20  static bark() {
21    print('Bow Wow');
22  }
23}
24
25
26

as, is, is!
as,is,和 !is 运算符在运行时检查类型很方便

as: 类型转换, 也用于指定库前缀
is: 类似于java的instanceof
!is: is操作符的取反, 即不是xxx
代码示例:


1
2
3
4
5
6
7
8
9
1if (emp is Person) {
2  // 类型检查
3  emp.firstName = 'Bob';
4}
5
6// 如果emp为Person,则将firstName改为Bod, 否则会在运行时期报错
7(emp as Person).firstName = 'Bob';
8
9

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++ 中 struct和class 的区别

2022-1-11 12:36:11

安全经验

整理:深度学习 vs 机器学习 vs 模式识别

2021-11-28 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索