二、Dart

一、dart SDK:

https://dart.dev/get-dart


二、Dart关键字

关键字
abstractdynamicimplementsshow
aselseimportstatic
assertenuminsuper
asyncexportinterfaceswitch
awaitextendsissync
breakexternallibrarythis
casefactoryfactoryfactory
catchfalsenewtrue
classclassnulltry
constfinallyontypedef
continueforoperatorvar
covariantFunctionpartpart
defaultgetrethrowwhile
deferredhidereturnwith
doifsetset


三、变量

变量声明使用var关键字,未初始化的变量的初始值为null,即便是数字类型的变量也是null。
如果对象不限于单一类型,可以指定Object或dynamic类型。
如果定义的变量不会变化,可以使用final或const来代替var,final变量只能设置一次。
const变量为编译时常量,如果const变量在类级别,可以使用static const。
const不仅仅用来定义常量,也可以使用const来创建常量的值。


四、 基本数据类型

Dart的基本数据类型包括:Number、String、Boolean、List、Set、Map、 Symbol、Runes。

4.1 number类型为两类:int、double。
4.2 String是 UTF-16 编码的字符序列。

可以使用单引号或者双引号来创建字符串
可以在字符串中使用表达式,用法是: ${expression}。如果表达式是一个标识符,可以省略 {}

var s = 'abc';
assert('$s' ==
       'abc');

使用三个单引号或者三个双引号可以创建多行字符串对象

var s1 = '''
第一行
第二行
''';
4.3 bool:Dart是强bool类型检查,只有true对象才被认为是true
var name = 'abc';
if (name) {//编译不通过,name是字符串,不是bool类型
  print('abc');
}
4.4 List的第一个元素的索引是0,最后一个元素的索引是 list.length - 1
4.5 Set是一组无序的集合

要创建一个空集,可以在{}前面带有类型参数:

var heros= <String> {};

使用add()或addAll()方法将条目添加到现有集中:

var heros = <String>{};
heros.add('石破天');
heros.addAll(hero);
4.6 Map

是一个键值对相关的对象,键和值可以是任何类型的对象,每个键都是唯一的,而一个值则可以出现多次

var player= {
// Keys      Values
  '1' : 'aaa',
  '2': 'bbb',
  '4' : 'ccc',
  '8' : 'ddd',
  '9' : 'eee'
};
 var player = new Map();
  player['1'] = 'aaa';
  player['2'] = 'bbb';
  player['4'] = 'ccc';


五、函数

5.1 可选命名参数

定义函数时,使用{param1, param2, …}的形式来指定命名参数:

coffeeFlavor ({bool sugar , bool sugar}) {
}
5.2 可选位置参数

把函数的参数放到 [] 中就变成可选位置参数了:

String go(String to, [String who]) {
  var result = 'go to the $to';
  if (who != null) {
    result = '$result with $who';
  }
  return result;
}
5.3 默认参数值

可以使用 = 来定义可选参数的默认值, 默认值必须是编译时常量。 如果没有提供默认值,则默认值为 null。

String go(String to, [String who= 'abc']) {
  var result = 'go to the $to';
  if (who != null) {
    result = '$result with $who';
  }
  return result;
}
 String result= go ('beijing');
5.4 main函数

每个应用都需要有个顶级的main() 函数来作为入口才能执行。 main()函数的返回值为 void 并且有个可选的 List 参数

5.5 匿名函数

大部分函数都有名字,例如 main() 或者 printElement()。 可以创建没有名字的匿名方法,格式如下所示。

([[Type] param1[,]]) { 
  codeBlock; 
}; 

var list = ['张无忌', '风清扬', '张三丰', '独孤求败', '萧峰'];
  list.forEach((i) {
    print(list.indexOf(i).toString() + ': ' + i);
  });


六、流程控制语句

和Java差不多

for-in形式的遍历:

var list = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
for (var h in list) {
  print(h);
}


七、捕获异常

try {
    //...
} on OutOfLlamasException {
    //...
} on Exception catch (e) {
    print('Unknown exception: $e');
} catch (e) {
    print('Something really unknown: $e');
} finally {
    //...
}

使用on或者catch来声明捕获语句,也可以同时使用。其中on来指定异常类型,catch来捕获异常对象。


七、多继承和引用库

7.1 多继承

Dart是面向对象编程语言,支持基于Mixin的继承机制。Mixin理解为多继承,在with关键字的后面为一个或者多个类

class A{}
class B{}
class C extends A with B{}
7.2 引用库 https://pub.flutter-io.cn/

使用import来引入一个库,内置库使用dart: scheme。 第三方的库使用文件系统路径或者 package: scheme。

import 'dart:io';
import 'package:mylib/mylib.dart';
import 'package:utils/utils.dart';

指定库前缀
如果导入的两个库具有冲突的名字, 可以使用库的前缀来进行区分。 例如,如果library1和library2 都有一个名字为Element的类,可以这样使用:

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// ...
Element element1 = new Element();           //使用lib1中的Element
lib2.Element element2 = new lib2.Element(); //使用lib2中的Element

导入库的一部分
如果只使用库的一部分功能,则可以选择需要导入的部分内容。其中show代表只导入指定的部分,hide代表除了指定的部分都导入。

import 'package:lib1/lib1.dart' show foo;// 只导入foo
import 'package:lib2/lib2.dart' hide foo;// 除了foo,其他部分都导入

延迟加载库
延迟加载意味着应用程序可以在需要的时候再加载库,使用延迟加载库的场景主要有以下几点:

  • 减少APP的初始启动时间。
  • 执行A/B测试,例如尝试各种算法的不同实现。
  • 加载很少使用的功能。

要延迟加载一个库,需要先使用 eferred as来导入:

import 'package:deferred/hello.dart' deferred as hello;

当需要使用的时候,调用loadLibrary() 函数来加载库:

greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}


八、异步支持

Dart库中包含许多返回Future或Stream对象的函数。这些函数是异步的,它们在基本操作后会返回,而不等待该操作完成
要使用await,其方法必须带有async关键字:

FileOperate() async {
var file= await readFile()
//其他处理
}


九、类可调用

如果Dart中的类实现了call()函数,那么这个类可以当做方法来调用。

class JointFunction {
  call(String a, String b, String c, String d) => '$a $b $c $d';
}
main() {
  var jf = new JointFunction();
  var out = jf("放","手","去","做");//此处调用
  print('$out');
}

创建实例
在Java中创建实例可以用new,在Dart中你可以选择用new,也可以选择不用

Element element = Element();


参考

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值