Dart入门—库、泛型与异常

Pub仓库

在Pub上可以下载到支持各种功能的包,首页在根目录下建立pubspec.yaml文件

name: test_app
dependencies:sqljocky: ^0.14.1

name是包的名称,dependencies是需要依赖的包名,上面的sqljocky是用来连接MySQL的。执行pub get命令下载相关依赖包

执行完毕后,在根目录下会产生多个文件

更多细节请查看Pub仓库

使用库

使用dart核心库

import "dart:math";void main() {print(PI);
}

导入Pub上的库

import 'package:sqljocky/sqljocky.dart';void main() {// 创建一个连接池var pool = new ConnectionPool(host:'localhost', port:3306, user:'bob', password:'wibble', db:'userdb', max:5);// 执行一个查询var results = pool.query('SELECT user_id,telphone FROM t_user WHERE telphone="13823128549" OR user_id="699"');// 遍历查询结果(forEach是异步操作)results.then((results){results.forEach((row){print('UserId:${row[0]}, Telphone:${row[1]}');print('UserId:${row.user_id}, Telphone:${row.telphone}');});});
}

如果两个库有冲突的标识符,可以为其中一个或两个库都指定前缀

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// ...
var element1 = new Element();
var element2 = new lib2.Element();

如果只需要使用库的一部分,可以选择性的导入

//只导入foo
import 'package:lib1/lib1.dart' show foo;//导入除了foo以外的所有
import 'package:lib2/lib2.dart' hide foo;

让程序延迟加载一个库时,延迟加载库,您必须使用deferred as,await 关键字暂停执行直到加载库,您可以多次使用loadLibrary(),库只加载一次

import 'package:deferred/hello.dart' deferred as hello;// 当你需要使用库,使用 loadLibrary() 调用库
greet() async {await hello.loadLibrary();hello.printGreeting();
}

自定义库

首先创建mystorage.dart文件,声明mystorage库和需要的util.dart与tool.dart文件

library mystorage;import "dart:math";part "util.dart";
part "tool.dart";void printPi() => print(PI);

创建util.dart文件供mystorage库使用

part of mystorage;void printUtil() => print("Hello util.dart!");

创建tool.dart文件供mystorage库使用

part of mystorage;void printTool() => print("Hello tool.dart!");

最后在主方法中调用mystorage库

import "mystorage.dart";void main(){printUtil();printTool();printPi();
}

泛型

dart中所有基本类型数组和列表都是泛型,这样可以提高代码的可读性

void main(){var names = new List<String>();names.addAll(['Seth', 'Kathy', 'Lars']);// 检查模式编译失败,生产模式编译成功names.add(42);
}

泛型可以减少代码重复,也可以创建多类型共享的接口,同时还能在检查模式早期预警,比如创建一个接口缓存对象

abstract class ObjectCache {Object getByKey(String key);setByKey(String key, Object value);
}

如果还要创建String的接口、number的接口就会很麻烦,使用泛型可以节省创建这些接口的麻烦

abstract class Cache<T> {T getByKey(String key);setByKey(String key, T value);
}

dart的泛型需要具体化,这意味着泛型在运行时携带着类型信息

var names = new List<String>();
names.addAll(['Seth', 'Kathy', 'Lars']);
print(names is List<String>);

异常

dart会抛出并捕获异常,如果没有捕获异常,就会中断运行或结束程序,与Java不同的是dart的所有异常都是未经检查的,dart提供了Exception、Error类型,以及更多的子类型,也可以自定义异常

Throw

    // 抛出一个异常throw new FormatException('Expected at least 1 section');// 抛出任意异常对象throw 'Out of llamas!';// 用=> statements在任何地方抛出任意异常distanceTo(Point other) => throw new UnimplementedError();

Catch

捕获异常并处理

    try {breedMoreLlamas();} on OutOfLlamasException {buyMoreLlamas();}

多个类型可以指定多个异常处理,可以使用on和catch或两者都用,使用on指定异常类型,使用catch给异常处理程序一个异常对象

    try {breedMoreLlamas();} on OutOfLlamasException {//指定的异常buyMoreLlamas();} on Exception catch (e) {//所有异常print('Unknown exception: $e');} catch (e) {//没有指定类型,处理所有异常print('Something really unknown: $e');}

Finally

确保代码的运行,不管是否抛出异常,使用finally子句,无论是否有匹配异常的catch子句,最终都执行finally子句

    try {breedMoreLlamas();} finally {//总是执行,即使抛出异常cleanLiamaStalls();}

匹配任何异常catch子句后运行finally子句

    try {breedMoreLlamas();} catch(e) {//首先处理异常print('Error: $e');} finally {//然后执行cleanLiamaStalls();}

Dart入门—库、泛型与异常相关推荐

  1. Flutter必备——Dart入门(下)

    文章目录 类 实例变量 构造方法 默认构造方法 构造方法不会继承 命名构造方法 调用超类构造方法 初始化列表 重定向构造方法 常量构造方法 工厂方法构造方法 方法 实例方法 Getter.Setter ...

  2. mysql主从复制 跳过表_mysql主从复制-从库跳过异常日志点

    mysql主从复制-从库跳过异常日志点 来源:互联网 作者:佚名 时间:2015-03-08 08:39 mysql主从复制--从库跳过错误日志点 (本文转载,特此声明) 在MYSQL进行Replic ...

  3. Dart入门—控制流程与其他

    Dart入门-控制流程与其他 控制流程 if~else if语句和可选的else语句,简单的if语句可以用条件运算符( ? : )来处理 if (isRaining()) {you.bringRain ...

  4. Dart入门—函数与运算符

    Dart入门-函数与运算符 函数 基本语法 void main(){printNameA("XiaoMing");printNameB("XiaoMing"); ...

  5. Dart入门—开发环境

    Dart入门-开发环境 Dart是什么? 首先要明确一点,Dart是一门小众语言,目前无法用于实际项目的开发... 我就简单的说一下Dart现在的应用范围,如果想看具体细节,Dart官网-传送门 服务 ...

  6. 掌握 Dart 中库 library 的使用

    在 Dart 中import和library指令可以帮助你创建模块化且可共享的代码库.库不仅仅构成了 dart 程序的模块化单元,而且还是访问权限可见的单元,比如我们都知道在 dart 使用_下划线开 ...

  7. Java中的泛型与异常机制

    Java中的泛型与异常机制 ※泛型的使用 如果在使用集合时没有限定集合所保存的数据类型,则在代码运行期间容易会出现ClassCastException类转换的异常 通过设置泛型,可以在编译期间发生问题 ...

  8. Flutter必备——Dart入门(上)

    文章目录 变量 默认值 可选的类型 final以及const 内置的类型 Numbers(数值) Strings(字符串) Booleans(布尔值) Lists(列表) Maps Runes 函数 ...

  9. Flutter+Dart入门与实战套餐(含电子商城系统)

    套餐(全): https://ke.qq.com/course/package/23970?tuin=2c77f7f0 课程目标 掌握Dart语言及Flutter跨平台开发技术 适用人群 零基础,小白 ...

最新文章

  1. yum 快速搭建lnmp环境
  2. DL框架之darknet:深度学习框架darknet的简介、安装、使用方法的详细攻略
  3. 用自定义的RoundImageView来实现圆形图片(可加边框)
  4. 十年的老代码,你敢动?
  5. spring boot整合mybatis+通用mapper+pagehelper分页插件
  6. AES加密算法256位密钥与128位密钥的不同之处
  7. extjs tree 遍历树节点并设置选中
  8. log4j 日志级别_Qt使用Log4Qt写日志
  9. aesmiyao php_php写的AES加密解密类分享
  10. CMake 使用总结(转载)
  11. 用C语言来实现冒泡排序
  12. tmb100a linux,天猫魔盒TMB100E短接降级官方1.7版本
  13. 【UnityShader】使用Cubemap/Matcap制作玻璃
  14. 【工具】C盘垃圾自动清理软件
  15. https安全证书过期失效的原因以及解决方法
  16. HCIE-RS 论述题园区网出口选路
  17. 台式电脑脑计算机没法启动怎么办,台式机主机电源灯不亮,开不了机怎么办? 台式电脑无法开机什么原因...
  18. LeetCode:387(Python)—— 字符串中的第一个唯一字符(简单)
  19. debian 安装声卡驱动(Realtek alc887_vd)
  20. 信息学奥赛一本通在线提交地址

热门文章

  1. J - DNA Consensus String
  2. Matlab语音倍速播放
  3. 【看这一篇就够了】如何删除gitHub仓库中的文件
  4. Java中文编码转换与字节长度判断
  5. JavaScript 中的 this 与闭包详解
  6. MySQL之SQL优化详解(一)
  7. 南阳oj a+b问题
  8. 各种系统扫描磁带驱动器的操作方法
  9. 20172331 《Java程序设计》第3周学习总结
  10. 设计模式のFactoryPattern(工厂模式)----创建模式