我是靠谱客的博主 迷人音响,最近开发中收集的这篇文章主要介绍Dart基础语法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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基础语法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部