概述
1.var、const 、final
通过var声明变量,通过final和const声明常量,const 变量是一个编译时常量(编译时直接替换为常量值),final变量在第一次使用时被初始化。变量类型可以省略,但类型不能再改变
var a = "hi world";
final b = "hi world";
const c = "hi world";
//下列赋值方法错误,类型不能再改变
a=1;
b=2;
c=3;
4.late和空安全
在新版的dart中加入了空安全的校验,初始化时可以添加late关键字表示延迟初始化,和kotlin类似
testLate() {
int i;
//会提示错误:非空的局部变量'i'必须先赋值后才能使用。
print(i*8);
}
testLate2() {
late int i;
i=1;
//这里的i必须赋值后才能使用,因为编辑器会进行上下文检测,否则还是会提示错误
print(i*8);
}
var jjj=1;
testLate3() {
late Person person;
if(jjj>1){
person=Person();
}
//?语法糖,空安全
person?.run();
}
3.dynamic 和 Object
Object 是 Dart 所有对象的根基类,也就是说在 Dart 中所有类型都是Object的子类(包括Function和Null),所以任何类型的数据都可以赋值给Object声明的对象。 dynamic与Object声明的变量都可以赋值任意对象,且后期可以改变赋值的类型,这和 var 是不同的
dynamic hi;
Object hello;
hi = "hi world";
hello = 'Hello Object';
//下面代码没有问题
hi = 1000;
hello = 1000;
4.Dart 是不支持多继承的,但是它支持 mixin,简单来讲 mixin 可以 “组合” 多个类,实现类似多继承的功能
class Animal {
eat() {
print('eat');
}
}
mixin TestA {
run() {
print('run');
}
}
mixin TestB {
jump() {
print('jump');
}
}
class Person extends Animal with TestA, TestB {}
test() {
var person = Person();
person.eat();
person.run();
person.jump();
}
5.函数
Dart是一种真正的面向对象的语言,所以即使是函数也是对象,并且有一个类型Function。这意味着函数可以赋值给变量或作为参数传递给其他函数,这是函数式编程的典型特征。
如果没有显式声明返回值类型时会默认当做dynamic处理
//以下方法类似
String testMethod(){
return 'xxx';
}
testMethod2(){
return 'xxx';
}
//函数作为变量
var say = (str){
print(str);
};
say("hi world");
//函数作为参数传递
void execute(var callback) {
callback();
}
execute(() => print("xxx"))
//默认参数
printI(String name, [int age=0]) {
print('I am $name ,age: $age');
}
//c是必要参数,a和b是命名参数,但调用时必须为b参数传值
void fun(int c, {int? a, required int b}) {
}
//调用
//a可以不传值,但是b必须传值
fun(3, b: 2);
fun(3, a: 1, b: 2);
异步支持
Future
用于处理异步操作的,异步处理成功了就执行成功的操作,异步处理失败了就捕获错误或者停止后续操作。一个Future只会对应一个结果,要么成功,要么失败。
//延时2秒
Future.delayed(Duration(seconds: 2),(){
//return "hi world!";
throw AssertionError("Error");
}).then((data){
//执行成功会走到这里
print(data);
}).catchError((e){
//执行失败会走到这里
print(e);
}).whenComplete((){
//无论成功或失败都会走到这里
});
await
- async用来表示函数是异步的,定义的函数会返回一个Future对象
- await 后面是一个Future,表示等待该异步任务完成,异步完成后才会往下走;await必须出现在 async 函数内部
task() async {
await method1();
await method2();
}
Stream
在执行异步任务时,可以通过多次触发成功或失败事件来传递结果数据或错误异常。 Stream 常用于会多次读取数据的异步任务场景,如网络内容下载、文件读写等
Stream.fromFutures([
// 1秒后返回结果
Future.delayed(Duration(seconds: 1), () {
return "hello 1";
}),
// 2秒后抛出一个异常
Future.delayed(Duration(seconds: 2),(){
throw AssertionError("Error");
}),
// 3秒后返回结果
Future.delayed(Duration(seconds: 3), () {
return "hello 3";
})
]).listen((data){
print(data);
}, onError: (e){
print(e.message);
},onDone: (){
print('onDone');
});
最后
以上就是迷人音响为你收集整理的Dart基础语法的全部内容,希望文章能够帮你解决Dart基础语法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复