当前位置: 首页 > news >正文

dart语言基本介绍及基本语法

关于作者: CSDN内容合伙人、技术专家, 从零开始做日活千万级APP,带领团队单日营收超千万。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业化变现、人工智能等,希望大家多多支持。

目录

  • 一、导读
  • 二、概览
  • 三、简介
    • 3.1 var 关键字
    • 3.2 dynamic 和 Object
    • 3.3 final 和 const
    • 3.4 空安全(null-safety)
    • 3.5 函数声明
    • 3.6 函数作为变量
    • 3.7 函数作为参数
    • 3.8 可选的位置参数
    • 3.9 可选的命名参数
    • 3.10 mixin
  • 四、Future 异步支持
    • 4.1 Future.then
    • 4.2 Future.catchError
    • 4.3 Future.whenComplete
    • 4.4 Future.wait
    • 4.5 async/await
  • 五、 Stream
  • 六、 推荐阅读

在这里插入图片描述

一、导读

我们继续总结学习flutter基础知识,温故知新。

本文主要介绍dart语言的基础知识。

二、概览

Dart 在静态语法方面和 Java 非常相似,如类型定义、函数声明、泛型等,
而在动态特性方面又和 JavaScript 很像,如函数式特性、异步支持等。
除了融合 Java 和 JavaScript 语言之所长之外,Dart 也具有一些其他很有表现力的语法,
如可选命名参数、…(级联运算符)和?.(条件成员访问运算符)以及??(判空赋值运算符)

三、简介

Dart 本身是一个强类型语言,任何变量都是有确定类型的

3.1 var 关键字

Dart 中 var 关键字,可以声明一个变量,并赋予一个初始值,

可以接收任何类型的变量,Dart 中 var 变量一旦赋值,类型便会确定,则不能再改变其类型

var t = "hi world";
// 下面代码在dart中会报错,因为变量t的类型已经确定为String,
// 类型一旦确定后则不能再更改其类型。
t = 1000;

对于变量的声明,也可显式的声明类型,比如:

var name = 'Alice'; // 自动推断类型为 String
int age = 25;       // 显式声明类型

3.2 dynamic 和 Object

dynamic 和 Object可以声明一个变量,并赋予一个初始值

Dart 中所有类型都是Object的子类(包括Function和Null),所以任何类型的数据都可以赋值给Object声明的对象。

dynamic与Object声明的变量都可以赋值任意对象,且后期可以改变赋值的类型

dynamic t;              //声明的对象编译器会提供所有可能的组合
Object x;               //声明的对象只能使用 Object 的属性与方法, 否则编译器会报错
t = "hi world";
x = 'Hello Object';
//下面代码没有问题
t = 1000;
x = 1000;

dynamic 的这个特点使得我们在使用它时需要格外注意,这很容易引入一个运行时错误,比如下面代码在编译时不会报错,而在运行时会报错:

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

3.3 final 和 const

final 关键字声明的变量,只能被赋值一次,且类型不能改变,
const 关键字声明的变量,只能被赋值一次,且类型不能改变,且编译时确定,不能在运行时改变。

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

const str1 = "hi world";
//const String str1 = "hi world";

3.4 空安全(null-safety)

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

// 如果我们预期变量不能为空,但在定义时不能确定其初始值,则可以加上late关键字,
// 表示会稍后初始化,但是在正式使用它之前必须得保证初始化过了,否则会报错
late int k;
k=9;

如果一个变量我们定义为可空类型,在某些情况下即使我们给它赋值过了,
但是预处理器仍然有可能识别不出,这时我们就要显式(通过在变量后面加一个”!“符号)告诉预处理器它已经不是null了,比如:

class Test{
   
  int? i;
  Function? fun;
  say(){
   
    if(i!=null) {
   
      print(i! * 8); //因为已经判过空,所以能走到这 i 必不为null,如果没有显式申明,则 IDE 会报错
    }
    if(fun!=null){
   
      fun!(); // 同上
    }
  }
}

上面中如果函数变量可空时,调用的时候可以用语法糖:

fun?.call() // fun 不为空时则会被调用

3.5 函数声明

Dart是一种真正的面向对象的语言,所以即使是函数也是对象,并且有一个类型Function。
这意味着函数可以赋值给变量或作为参数传递给其他函数,这是函数式编程的典型特征。

bool isNoble(int atomicNumber) {
   
  return _nobleGases[atomicNumber] != null;
}

// 对于只包含一个表达式的函数,可以使用简写语法:
bool isNoble (int atomicNumber)=> true ;

// Dart函数声明如果没有显式声明返回值类型时会默认当做dynamic处理
// 不指定返回类型,此时默认为dynamic,不是bool
isNoble(int atomicNumber) {
   
  return _nobleGases[atomicNumber] != null;
}


typedef bool CALLBACK();

//不指定返回类型,此时默认为dynamic,不是bool
isNoble(int atomicNumber) {
   
  return

相关文章:

  • 树莓派学习【2】开机自动启动程序的方法
  • Android 8.0 (API 26) 对广播机制做了哪些变化
  • MQTT实现智能家居------4、在Linux上运行MQTT
  • MySql常用指令
  • 请谈谈 React 中的状态管理,如何使用 Context API 和 Redux 进行状态管理?
  • 在 Windows 下的 Docker 中安装 R语言
  • 微服务即时通信系统---(六)语音识别子服务
  • Mac 上安装多版本的 JDK 且实现 自由切换
  • Zabbix问题记录2--踩坑HttpRequest,header添加无效
  • 4.static关键字和const关键字的作用【高频】
  • 算法思想-动态规划算法
  • Vue的项目创建以及项目目录与组合式API
  • 快速入门——状态管理VueX
  • 动态规划(背包问题)--是否逆序使用的问题--二进制拆分的问题
  • linux /var/log/syslog过大问题及解决 Systemd定时器用于清除
  • 深入理解 `Sinks.Empty<Void>` 和 `Mono<Void>`:如何触发完成信号并结合 WebSocket 示例
  • axios、axios二次封装、api解耦
  • CF 58A.Chat room(Java实现)
  • 【ProtoBuf】proto3语法(一)
  • ctfshow——版本控制泄露源码
  • 门户网站建设理由/aso排名
  • 模板网站 建设教材/痘痘怎么去除效果好
  • 建设厅职业资格中心网站/免费b2b推广网站
  • wordpress pc 手机/推送者seo
  • 网页图片一般不会采用什么格式/人教版优化设计电子书
  • wordpress建站镜像/提交网址给百度