dart入门指南 (3)

is 的结果取反

import 'dart:math' as math; // 这里导入库时使用as指定了别名 class Person { String name; Person(); say() { print("person say $name"); } } class User extends Person { String password; User(this.password); run() { print("user run"); } } void main() { print(math.max(4, 5)); // 指定别名的库调用 User u = User("password"); print(u is User); // true u.name = "name"; u.run(); // user run Person p = u as Person; // 通过as将子类型强转为父类型 print(p is User); // true print(p is Person); // true print(p is List); // fasle p.say(); // person say name // p.run(); // 错误,已经被转换成了Person, 不能再调用User的方法 } 流程控制语句

流程控制与其他语言相同,这里简单列举

if .. else if..else

for

while、do..while

break、continue

switch .. case

assert

assert表示断言,判断一个表达式的真假,若为假则抛出一个异常

模块化

dart支持模块化编程,可以导入dart内置库,其他三方库,也可以将自己的代码拆分成不同模块。

导入

导入内置库

import "dart:math";

导入三方库

需要在项目描述文件pubspec.yaml(类似js中的package.json或者java的pom.xml)中声明你要依赖的库,然后安装,最后导入。

pubspec.yaml

dependencies: http: ^0.12.0+2

安装

pub get

导入

import 'package:http/http.dart';

导入本地文件

导入本地的文件后可以使用其中定义的类,变量,函数等

import '../common/Utils.dart';

导入时指定别名

相当于将一个库导出的东西挂到一个对象,可以解决重名问题(上边讲as有提到)

import 'package:http/http.dart' as http;

条件导入

可以只导入指定内容,或者不导入某些内容

import 'package:lib1/lib1.dart' show foo; import 'package:lib2/lib2.dart' hide foo;

动态导入或者按需加载

可以在运行时导入依赖,针对web应用,类似webpack的按需加载。

创建库

内容较多,此处略过,笔者也尚未研究,可参考官网

dart内置库介绍

dart:core

dart核心内库,默认导入,类似java的java.lang包。提供内置数据类型等。

dart:async

异步支持库,大名鼎鼎的Future就在这里边。

dart:math

复杂数学计算相关

dart:convert

json序列化、反序列化,字符集转换相关。

dart:html

web应用相关api

dart:io

io相关,与发请求相关的HttpClient在这里边

函数

函数可以在顶层,也就是不属于任何一个类

函数可以是类的成员方法

可以有返回值也可以没有

函数是对象,可以赋值给变量,可以作为参数或返回值

参数可以是常见的位置参数,也可以是命名参数,命名参数传递时不必考虑顺序,命名参数大多数语言没有,听说是从oc借鉴过来的

只有一条语句的函数可以使用箭头函数

可以使用typedef定义特定的函数类型

函数参数可以指定默认值

// 没有返回值的函数 import 'package:flutter/foundation.dart'; void printInfo(String name, int age) { print('$name:$age'); } // 有返回值的函数 String getInfo(String name, int age) { return '$name:$age'; } // 函数作为参数传递 void excuteFn(var function, String name, int age) { function(name, age); } // 返回一个函数 Function getPrintInfoFn(int age) { return (String name) { print('$name:$age'); }; } // 函数体只有一条语句,可以使用箭头函数 void printInfo2(String name, int age) => print('$name:$age'); // 可以使用命名参数 void printInfo3({String name, int age}) { print('$name:$age'); } // 位置参数和命名参数混用,指定默认值 void printInfo4(String name, { int age}) { print('$name:$age'); } // 定义一种函数类型 typedef PrintFn = void Function(String name, int age); // 将特定类型的函数作为参数传递 void excuteFn2(PrintFn function, String name, int age) { function(name, age); } class User { // 函数作为类的成员方法 say() { print("hello"); } } void main() { printInfo("张三", 18); print(getInfo('李四', 18)); User user = User(); user.say(); excuteFn(printInfo, "王五", 18); Function fn1 = getPrintInfoFn(19); fn1("小明"); fn1("小花"); printInfo("小张", 18); printInfo2('小李', 20); printInfo3(name: "小华", age: 21); // 命名参数函数调用方式 printInfo4("AA"); printInfo4("aa", age: 30); excuteFn2(printInfo, "王五", 18); } 注释

单行注释

// 我是一行注释

多行注释

/** * 多行注释 * 多行注释 */

文档注释

/// 文档注释 /// 文档注释 面向对象 类的定义与组成

类使用class关键字定义

一个类可以由如下部分组成:

普通成员变量

静态成员变量

普通方法

静态方法

构造函数,不声明的话默认有无参构造

命名构造函数

set,get方法

说明

不支持重载

静态成员不用实例化即可访问,只能通过类名访问,不像java可以通过实例访问静态成员变量

静态成员方法中不能使用this,且只能访问静态成员变量

不写set,get方法会有默认的set,get方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfyzy.html