语言详解详细讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类-Setter和Getter
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; }
类-命名构造函数
class Point { num x; num y;
Point(this.x, this.y);
//命名构造函数 Point.fromJson(Map json) {
x = json['x']; y = json['y']; } }
类-重定向构造函数
class Point { num x; num y; Point(this.x, this.y); //重定向构造函数,使用冒号调用其他构造函数 Point.alongXAxis(num x) : this(x, 0);
存在)
内置类型-Runes
Main(){ Runes runes = new Runes('\u{1f605} \u6211‘); var str1 = String.fromCharCodes(runes); print(str1);
}
内置类型-Symbol
• Symbol标识符,主要是反射用, 现在mirrors模块已经被移除
流程控制语句
• if else • for, forEach, for-in • while , do-while • break , continue • switch case
异常-Exception类型
名称 DeferredLoadException FormatException IntegerDivisionByZeroException IOException IsolateSpawnException TimeoutException
变量-final和const
区别(需要注意的地方):
• 类级别常量,使用static const • const可使用其他const 常量的值来初始化其值 • 使用const赋值声明,const可省略 • 可以更改非final、非const变量的值,即使曾经具有const值 • const导致的不可变性是可传递的 • 相同的const常量不会在内存中重复创建 • const需要是编译时常量
//在构造函数的初始化列表中使用super(),需要把它放到最后 Child.fromJson(x, y)
: x = x, y = y, super.fromJson(x, y) {
print('子类命名构造函数'); } }
类-常量构造函数
class Point2 { //定义const构造函数要确保所有实例变量都是final final num x; final num y; static final Point2 origin = const Point2(0, 0);
内置类型
• Numbers 数值 • Strings 字符串 • Booleans 布尔值 • Lists 列表(数组) • Sets 集合 • Maps 集合 • Runes 符号字符 • Symbols 标识符
内置类型-num, int, double
• int : 整数值 • double : 64-bit双精度浮点数 • int和double是num的子类
} finally { print('end');
}
类-构造函数
//java中写法 class Point {
double x; double y;
Point(int x, int y) { this.x = x; this.y = y;
} }
//dart建议写法 class Point {
num x; num y; Point(this.x, this.y); }
异常-捕获
try { throw new OutOfMemoryError();
} on OutOfMemoryError { print('没有内存了');
} on Error catch(e) { print('Unknown error: $e');
} catch (e, s) { print('Exception details: $e'); print('Stack Trace: $s');
}
类-初始化列表
import 'dart:math';
class Point { //final变量不能被修改,必须被构造函数初始化 final num x; final num y; final num distanceFromOrigin;
//初始化列表 Point(x, y)
: x = x, y = y, distanceFromOrigin = sqrt(x * x + y * y);
print('a + b'); return a + b; } class Demo1 { Demo1(int f(int a, int b), int x, int y) {
var sum = f(x, y); print("sum1 = $sum"); } } class Demo2 { Demo2(Fun1 f, int x, int y) { var sum = f(x, y); print("sum2 = $sum"); } } class Demo3 { Demo3(Fun2<int, int> f, int x, int y) { var sum = f(x, y); print("sum3 = $sum"); } }
//工厂方法构造函数,关键字factory factory Singleton([String name = 'singleton']) =>
Singleton._cache ??= Singleton._newObject(name);
//定义一个命名构造函数用来生产实例 Singleton._newObject(this.name); }
函数-定义
• 可在函数内定义 • 定义函数时可省略类型 • 支持缩写语法 =>
函数-可选参数
• 可选命名参数 • 可选位置参数 • 默认参数值
函数-匿名函数
• 可赋值给变量,通过变量调用 • 可在其他函数中直接调用或传递给
其他函数
函数-闭包
Function makeAddFunc(int x) { x++; return (int y) => x + y;
}
类-调用超类构造函数
class Parent { int x; int y;
//父类命名构造函数不会传递 Parent.fromJson(x, y)
: x = x, y=y{
print('父类命名构造函数'); } }
class Child extends Parent { int x; int y; //若超类没有默认构造函数, 需要手动调用超类其他构造函数 Child(x, y) : super.fromJson(x, y) { //调用父类构造函数的参数无法访问 this print('子类构造函数'); }
FallThroughError JsonUnsupportedObjectError
说明
抽象类实例化错误 参数错误 断言错误 异步错误 Cast 错误 并发修改错误 周期初始错误
Fall Through 错误 json 不支持错误
名称
说明
NoSuchMethodError 没有这个方法错误
NullThrownError Null 错误
说明 延迟加载异常 格式异常 整数除零异常 IO异常 隔离产生异常 超时异常
异常-Error类型
名称
AbstractClassInstantiationError ArgumentError AssertionError AsyncError CastError ConcurrentModificationError CyclicInitializationError
内置类型-String
• Dart 字符串是 UTF-16 编码的字符序列,可以使用单引号 或者双引号来创建字符串
• 可以使用三个单引号或者双引号创建多行字符串对象。
• 可以使用 r 前缀创建”原始raw”字符串。
• 可以在字符串中使用表达式: ${expression},如果表达式 是一个标识符,可以省略 {},如果表达式的结果为一个 对象,则 Dart 会调用对象的 toString() 函数来获取一个 字符串。
内置类型-bool
• bool对象未初始化的默认值是null
内置类型-List
• Dart中可以直接打印list包括list的元素, List也是对象。java中直接打印list结果是 地址值
• Dart中List的下标索引和java一样从0开始 • 和java一样支持泛型。 • 有增删改查,支持倒序,自带排序、洗
OutOfMemoryError 内存溢出错误
RemoteError
远程错误
StackOverflowError 堆栈溢出错误
StateError
状态错误
UnimplementedError 未实现的错误
Unsupwk.baidu.comortedError 不支持错误
异常-抛出
// 抛出Exception 对象 // throw new FormatException(‘格式异常'); // 抛出Error 对象 // throw new OutOfMemoryError(); // 抛出任意非null对象 // throw '这是一个异常';
操作符
描述 后缀操作
前缀操作
乘除 加减 位移 按位与 按位异或 按位或 类型操作 相等 逻辑与 逻辑或 是否为空 三目运算 级联
赋值
操作符
expr++ expr-- () [] . ?.
-expr !expr ~expr ++expr --expr
* / % ~/ +<< >> & ^ | >= > <= < as is is! == != && || ?? expr1 ? expr2 : expr3 .. = *= /= ~/= %= += -= <<= >>= &= ^= |= ??=
}
main() { var addFunc2 = makeAddFunc(2); var addFunc4 = makeAddFunc(4); print(addFunc2(3)); print(addFunc4(3));
}
函数-函数别名
typedef Fun1(int a, int b); typedef Fun2<T, K>(T a, K b); int add(int a, int b) {
牌,可使用+将两个List合并
内置类型-Map
• 跟java类似
内置类型-Set
• set1.difference(set2):返回set1集合里有但set2里没有的元 素集合
• set1.intersection(set2):返回set1和set2的交集 • set1.union(set2):返回set1和set2的并集 • set1.retainAll():set1只保留某些元素(要保留的元素要在原set中
//const关键字放在构造函数名称之前,且不能有函数体 const Point2(this.x, this.y); }
类-工厂构造函数
class Singleton { String name; //工厂构造函数无法访问this,所以这里要用static static Singleton _cache;
Dart语言详解
主讲老师:Damon
变量-变量的声明
• var • dynamic • Object
变量-默认值
• 没有初始化的变量自动获取一个默认值为null • 一切皆对象,对象的默认值为null
变量-final和const
共同点:
• 声明的类型可省略 • 初始化后不能再赋值 • 不能和var同时使用