秀发去无踪之你不得不知道的Dart(下)

简介: 最近flutter发展的如火如荼,而Dart作为flutter的开发语言,了解一下

操作符


  • 除法( / ), 整除(~/)


void main() {
  print('5/2 = ${5 / 2}'); // 5/2 = 2.5
  print('5~/2 = ${5 ~/ 2}'); // 5~/2 = 2
}


  • 类型转换(as), 类型判断(is、is!), as 只能从父类型转子类型, is 判断变量是某种类型, is!和is相反,判断变量不是某种类型


void main() {
  num a = 123;
  //  print(a.isOdd); // error: isOdd 不是num的成员变量
  print((a as int).isOdd);// isOdd 是int的成员方法,所有a必须转换成int类型后再调用
  print('a is not String ? ${a is! String}'); // a is not String ? true
  print('a is int ? ${a is int}'); // a is int ? true
}


  • ??= 为值为null的变量赋值


void main() {
  var a;
  a ??= 1; // 赋值前a = null,赋值后 a=1
  a ??= 2; // 赋值前 a = 1, 赋值后 a=1
  print(a); // 1
}


  • expr1 ?? expr2, 等价于 expr1  != null ? expr1 : expr2


void main() {
  var a;
  var b = 1;
  print(a ?? b); // 1
  a = 0;
  print(a ?? b); // 0
}


  • 级联操作(..)可以在同一个对象上连续调用多个函数及访问成员变量


//  '..'不同于'.',不要求函数有返回值,'..'相当于普通函数执行后返回‘this’
class Car {
  void move(String direction, double distance) {
    print('小汽车向${direction}行驶了${distance} 千米');
  }
  Car run(String direction, double distance) {
    print('小汽车向${direction}行驶了${distance} 千米');
    return this;
  }
}
void main() {
  Car car = new Car();
  car..move('东', 3)..move('南', 4)..move('西', 4)..move('北', 4);
  car..move('东', 3)..run('西', 3)..run('北', 4).run('西', 4).run('北', 4);
}


  • a?.b 如果a为null,则返回null,否则返回a.b


void main() {
  int a;
  // print(a.isOdd); // error: a未赋值,不能访问成员变量和成员函数
  print(a?.isOdd);
  // 相当于
  if (a == null) {
    print(null);
  } else {
    print(a.isOdd);
  }
}



  • 每个对象都是一个类的实例,所有的类都集成于Object


void main() {
  int a = 1;
  print(a is Object); // true
}


  • 每个类都只能有一个父类,但是可以同时实现多个接口,一个父类可以同时被多个子类继承


class Tiger extends Animal implements Fly, Swim {
  // todo
}
class Dog extends Animal {
  // todo
}


  • 每个实例变量都会自动生成一个getter方法,Non-final实例变量还会自动生成一个setter方法


class Test {
  int a;
  // 相当于
  // int _a;
  // int get a => _a;
  // set a(int val) => this._a = val;
}


  • 定义一个和类名字一样的方法就定义了一个构造函数,还可以带有其他可选的标识符,如果没有定义,会生成一个不带参数的默认构造函数,构造函数不会被继承


class Parent {
  String name;
  Parent(this.name);
}
class Child extends Parent {
  Child(String name) : super(name);
  Child.create(String name) : super(name);
}
void main(){
  var zhangsan = Child('张三');
  var lisi = Child.create('李四');
}


  • 可以使用abstract来定义抽象类,抽象类不能被实例化。抽象类通常含有抽象方法,抽象方法只有方法签名,没有实现。


abstract class Animal {
  // 抽象方法
  void moving();
}


  • 用extends来实现继承,用implements来实现接口,使用@override来重新父类方法


class Animal {
  final String name;
  Animal(this.name);
  void moving() {
    print('${this.name}正在移动');
  }
}
abstract class Fly {
  // 抽象方法
  void fly();
}
class Tiger extends Animal implements Fly {
  Tiger() : super('老虎');
  @override
  void fly() {
    print('如虎添翼');
  }
}


  • 用static定义静态变量和静态方法


class Calculator {
  static int Add(int m, int n) {
    return m + n;
  }
}
void main(){
  print(Calculator(1, 2));
}


库的使用


  • 通过import来引入库


  • 引用内部库 import 'dart:schema',如:import 'dart:io';


  • 引用外部库 import 'package:schema', 如:import 'package:utils/utils.dart';


  • 可以通过 as 来指定库前缀,如 import 'package:utils/utils.dart' as utils;


  • 可以通过 showhide 来部分导入库


  • 可以通过 deferred as 延迟加载一个库


dart 核心库


  • dart:core 提供了基础类型、集合和其他少量但是非常核心的功能,dart应用会自动导入这个库。


  • dart:convert 提供了一些用来转换 JSON 和 UTF-8 的转换器,还可以自定义 新的转换器。


  • dart:async 异步编程通常使用回调函数,但是 Dart 提供了另外的 选择: Future 和 Stream 对象。


  • dart:html 为基于web的应用提供了操作Dom元素和使用HTML5 API的功能。


  • dart:math 提供了常用的数学运算功能。


  • dart:io 提供了一下文件读写、进程访问、sockets等相关的功能,只有命令行应用可以使用。


PUB


pub类似于node的npm,用于管理dart应用的包,详情参见pub.dev/


总结


了解了上面这些基础语法,基本上就可以看懂一些dart示例和源码了,想有所成,了解这些还是远远不够的,但是这些可以作为一个开始,作为学习dart的起点。


参考







相关文章
|
9月前
|
Dart 编译器 API
Dart笔记:Dart 库
Dart笔记:Dart 库
217 0
|
JSON Dart 编译器
Dart简单介绍
Dart是一种面向对象、用于构建高性能应用程序的编程语言,它具有快速开发、易于维护和可移植性等特点,因此在 Flutter 应用程序开发方面越来越受欢迎。在这篇文章中,我们将深入探讨 Dart 语言的一些技术思考。 类型系统
Dart简单介绍
Runes——Dart
Dart中,Runes是指UTF-32定义的Unicode字符串。 Unicode使用数字表示世界上所有的字母、数字和符号。因为Dart中的String是一系列UTF-16字节单元,而在String中想要表示32位的Unicode值,则需要特殊的语法。 一般我们使用 `\uXXXX` 这种形式表示一个Unicode码,`XXXX`表示4个十六进制值。例如,字符(♥)的Unicode字符是`\u2665`。 当十六进制数据多余或者少于4位时,将十六进制数放入到花括号中,例如,微笑表情(😆)是`\u{1f600}`。 String类中有几个属性你可以用来获取`rune`信息。
|
Dart JavaScript 前端开发
Numbers——Dart
Dart中的数字类型有两种,int和double。
|
Dart
在 dart 中使用 equatable
在 dart 中使用 equatable
203 0
|
Dart 开发工具
使用 dart tear-off
使用 dart tear-off
167 0
|
存储 Dart
Flutter之搞定Dart(二下)
这里,我只列出来相对其他语言比较特殊的运算符,因为某些运算符太简单了,不浪费时间,比如+、-、+=、==。 你可能会疑惑,Dart为什么要搞出这么多特殊的运算符呢? 你要坚信一点:所有这些特殊的运算符都是为了让我们在开发中可以更加方便的操作,而不是让我们的编码变得更加复杂。
341 0
Flutter之搞定Dart(二下)
|
自然语言处理 Dart JavaScript
Flutter之搞定Dart(一)
Google为Flutter选择了Dart就已经是既定的事实,无论你多么想用你熟悉的语言,比如JavaScript、Java、Swift、C++等来开发Flutter,至少目前都是不可以的。 在讲解Dart的过程中,我会假定你已经有一定的编程语言基础,比如JavaScript、Java、Python、C++等。
407 0
Flutter之搞定Dart(一)
|
Dart
Flutter之搞定Dart(二上)
这里,我只列出来相对其他语言比较特殊的运算符,因为某些运算符太简单了,不浪费时间,比如+、-、+=、==。 你可能会疑惑,Dart为什么要搞出这么多特殊的运算符呢? 你要坚信一点:所有这些特殊的运算符都是为了让我们在开发中可以更加方便的操作,而不是让我们的编码变得更加复杂。
177 0
Flutter之搞定Dart(二上)
|
Dart 监控 索引
Flutter之搞定Dart(二中)
这里,我只列出来相对其他语言比较特殊的运算符,因为某些运算符太简单了,不浪费时间,比如+、-、+=、==。 你可能会疑惑,Dart为什么要搞出这么多特殊的运算符呢? 你要坚信一点:所有这些特殊的运算符都是为了让我们在开发中可以更加方便的操作,而不是让我们的编码变得更加复杂。
209 0