(一)Dart基本语法

Dart编程:变量、类型、异步与流
本文介绍了Dart编程中的变量声明,包括var、dynamic、Object的区别,以及final和const的使用。详细阐述了Dart的空安全机制,展示了如何处理可空类型。此外,还讲解了Dart中的列表、映射、函数以及可选参数的使用。最后,深入探讨了异步编程,包括Future和Stream的概念以及async/await的运用,帮助理解Dart中的异步处理方式。

变量声明

关键字 var

通过 var 声明一个变量,如果这个变量在声明时赋值了,此时类型就已经确定了,再次赋值时不能更改其他类型。

var str = "hello dart";
// 因为声明时已经赋值为String,所以不能更改类型
str = 3;  // 编译器会报错
str = "nihao"; //再次赋值只能为String类型

因为 Dart 本身是一个强类型语言,任何变量都是有确定类型的,在 Dart 中,当用var声明一个变量后,Dart 在编译时会根据第一次赋值数据的类型来推断其类型,编译结束后其类型就已经被确定。

关键字 dynamic和Object

Object是Dart所有对象的基类,就是说在 Dart 中所有类型都是Object的子类(包括Function和Null),所以任何类型的数据都可以赋值给Object声明的对象。 dynamicObject声明的变量都可以赋值任意对象,且后期可以改变赋值的类型,这和 var 是不同的,如:

dynamic str = "hi dart!";
str = 4;

Object src = 34.32;
src = "nihao";

这样赋值时没有任何问题的,这时候有人会问,既然用 dynamic 和 object 都可以让变量赋值任何类型,那么这两个有什么区别呢?
**dynamic **与 **Object **不同的是 **dynamic **声明的对象编译器会提供所有可能的组合,而 **Object **声明的对象只能使用 Object 的属性与方法, 否则编译器会报错,如:

dynamic a = "hi dart!";

Object b = "nihao";

// 正常打印  值为8
print(a.length);
// 报错
print(b.length);

用Object修饰的变量b,不能使用length属性,因为Object对象并没有这个属性,而用dynamic修饰的变量a,赋予了String类型的属性和方法,所以可以使用length属性。

但是这里有个点需要注意 :dynamic修饰的变量a,使用a.length没有报错,而且能正常打印值,是因为 a 被赋值为String 类型,而String类型有length这个属性,但是如果我们把length改成其他String类型没有的属性,比如随便写一个不存在的属性:

print(a.ccccc); //  a是字符串,没有"ccccc"属性,编译时不会报错,运行时会报错

这样写在编译期不会报错,但运行时会报错,这一点要注意。

关键字 final和const

final 和const 都是修饰一个不可变的变量,一个final变量只能被设置一次,两者区别在于:const 变量是一个编译时常量(编译时直接替换为常量值),final变量在第一次使用时被初始化。被final或者const修饰的变量,变量类型可以省略,如:

//可以省略String这个类型声明
final str = "hi dart";
//final String str = "hi dart"; 
const str1 = "hi dart";
//const String str1 = "hi dart";

空安全(null-safety)

Dart 中一切都是对象,这意味着如果我们定义一个数字,在初始化它之前如果我们使用了它,假如没有某种检查机制,则不会报错,比如:

test() {
  int i; 
  print(i*8);
}

在 Dart 引入空安全之前,上面代码在执行前不会报错,但会触发一个运行时错误,原因是 i 的值为 null 。但现在有了空安全,则定义变量时我们可以指定变量是可空还是不可空。
在这里插入图片描述

由于空安全机制,将运行时的错误提前到编译期,这样在我们对这个变量操作时,提前发现这个变量是否为空,从而避免运行时崩溃。

int i = 8; // 默认不为空,使用前必须初始化
int? j; // 定义为可空类型,对于可空变量,我们在使用前必须判空。

// 如果我们预期变量不能为空,但在定义时不能确定其初始值,则可以加上late关键字,
// 表示会稍后初始化,但是在正式使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值