dart 怎么判断function的返回值为空_极简Dart

Dart借着Flutter要上位

03744043696a94d197c039bf66019b08.png

特点

  • 长得像JavaScript
  • 支持AOT、JIT编译
  • 性能强大,不需要锁就能对象分配和垃圾回收,它被编译为本地代码,不需要建立语言间的桥梁(像JavaScriptCore)
  • 不需要单独的声明式布局语言
  • 一切皆为对象
  • 弱数据类型
  • 运行前解析,指定数据类型和编译时的常量,可以提高运行速度
  • 有统一的入口main
  • 没有public、protected、private概念,私有特性通过上下划线表示
  • 工具可以检查出警告信息和错误信息
  • 支持async / await

Dart的常用库

  • dart:async
  • data:collection
  • dart:convert
  • dart:core
  • dart:html
  • dart:io
  • dart:math
  • dart:svg

注释

// 单行注释
/*
多行注释
*/
/**
文档注释
*/
///文档注释

变量声明与数据类型

var name = "foo"; //变量
final username = "bar"; //只能被设定一次的常量,有点像Java里的final
const pi = 3.1415; //编译时常量
//以上声明变量只有一个类型,可以类型推断
dynamic myName; // myName变量没有类型
int lineCount; // 此时lineCount为null
  • Number
    • int
    • double
  • String
  • Boolean
  • List
  • Map
var s1 = 'hi ';
var s2 = "flutter" //支持单引号和双引号
var s3 = '''
  多行文本
''';
var s4 = """;
  多行文本
"""; //类似于es6的```
const s = 'foo';
const ss = '${s}bar';
var sex = 'male';
if (sex) { } //错误,不支持像JavaScript里的真值判定
var list = [1, 2, 3];
print(list.length);
var map = {
  'Monday': '星期一'
}; //Map类似于JavaScript里的对象
print(map['Monday']);
print(map.length);

函数

bool equal(String str1, String str2) {
  return str1 == str2;
}

String getUserInfo(String name, [String form]) {
 //可选参数用[]
}
String getUserInfo(String name, [String form = 'China']) {} //参数默认值

所有函数都有返回值,如果没有指定返回值,则默认的返回值是null

运算符

//一些Dart里特殊的运算符 
5 ~/ 2 //整除
as //类型转换
is is! //类型判断
b??=value //b为空时将value赋给b
expr1 ?? expr2 // 如果expr1为空,则返回其值,否则计算并返回expr2的值 
querySelector('#btn')
  ..text = 'OK'
  ..onClick.listen( (e) => {}) // 级联操作

流程控制语句

同其他语言

  • if else
  • for
  • while do-while
  • break continue
  • switch case
  • assert

异常

可以抛出异常或者任何非空对象

throw FormatException('An Exception');
throw '数据非法';

捕获异常

try {

} on OutOfLlamasException {
  // 特定的异常
} on Exception catch(e) {
  // 其它的Exception
} catch (e, s) { // e是异常 s是堆栈跟踪信息
  // 其它
} finally {
  // 最终都会执行的操作
}

对象

定义类和产生实例

class User {
  String name;
  int age;
  User(String name, int age) {
    this.name = name;
    this.age = age;
  }
  //或者简写成User(this.name, this.age)

  //命名的构造函数,从另一类现有数据中快速实现
  User.fromJson(Map json) {
    name = json['name'];
    age = json['age'];
  }
}
var user = new User();

Dart里支持get( )和set( )

class Rectangle {
  num left;
  num top;
  num width;
  num height;
  Rectangle(this.left, this.top, this.width, this.height);

  num get right => left + width;
  set right(num value) => left = value - width;
  
  num get bottom => top + height;
  set bottom(num value) => top = value - height;  
}

Dart里支持运算符重载,不过感觉用处不大

类的继承,Dart里支持抽象类的定义

class Human extends Animal {
  void say() {
  }
}
abstract class DateBaseOperate {
  void insert();
  void delete();
  void update();
  void query(); 
}

Dart支持枚举类型的声明

enum Color {
  red,
  green,
  blue
}
List<Color> colors = Color.values; // 获取枚举类中所有的值
Color aColor = Color.blue;

Dart支持Mixins

class S {
  a() { print("S.a"); }
}
class A {
  a() { print("A.a"); }
  b() { print("A.b"); }
}
class T = A with S;
T t = new T();
t.a(); // S.a
t.b(); // A.b

Dart也支持泛型

库的使用

//引用库
import 'dart:io';
import 'package:mylib/mylib.dart';
//指定一个库的前缀
import 'package:lib1/lib1.dart' as lib2;
lib2.Element element2 = new lib2.Element();
//引用库的一部分
import 'package:lib1/lib1.dart' show foo; //只引用foo函数
import 'package:lib2/lib2.dart' hide foo; //引用除了foo函数的其他内容

异步

Dart支持async / await

readFile( ) async {
  //返回异步对象
}
await readFile()

元数据

元数据就是Java里的注解,目前支持三个修饰符

  • @deprecated 被弃用的
  • @override 重写
  • @proxy 代理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值