Flutter面试知识点:DART强类型语言
学过javaScript
或java/Kotlin
❀的人, Dart结合了动态语言的特点和静态语言。 这里我们主要提供不同的或有趣的概念。
- 1、
Dart
属于强类型语言,但你也可以使用s、变量、
event
..id = 1
..type = ""
..actor = "";
复制代码
- Dart 开始 派生数据类型,
var
实际上是编译时的“语法糖”。dynamic
表示动态类型。构造完成后,它实际上是类型object
。类型检查不是在编译时执行的,而是在运行时执行的。 - 2、
Dart
,例如if
仅支持♺♺❀
支持字符串类型。 - 3、
Dart
数组和List
相同。 - 4、
Dart
、Runes
表示用作UTF字符串的符号文本
,即UTF32。 Runes ('\u{1f596} \u{1f44d}');
Dart
支持闭包。在数字Dart
中,数字类型分为int和double,没有float类型。 dart
在级联操作员cascade操作员您可以轻松配置逻辑,如以下代码所示:♷♷♷分配运算符是:AA ?? "999" ///表示如果 AA 为空,返回999
AA ??= "999" ///表示如果 AA 为空,给 AA 设置成 999
AA ~/999 ///AA 对于 999 整除
复制代码
- 9 。可选方法参数
Dart
该方法可以为参数 设置默认值 ,并为 设置名称 。
例如:getDetail(Sting userName, reposName, {branch = "master"}){}
方法,如果这里没有指定分支,则默认为“master”。参数类型可以设置或取消设置。调用效果:getRepositoryDetailDao("aaa", "bbbb",branch: "dev");
.
- 10。范围
Dart
无关键字 public
、private
和其他修饰符表示 private
但带有注释 @受保护
。
- 11。施工方法
Dart
Dart 通过上述方法可以实现多种施工方法。
默认构造函数只能有一个,可以使用Model.empty()
方法创建空参数的类。其实方法的名字是任意的,而在使用变量的初始化值时,只需要传递this.name
即可在构造函数中指定:
class ModelA {
String name;
String tag;
//默认构造方法,赋值给name和tag
ModelA(this.name, this.tag);
//返回一个空的ModelA
ModelA.empty();
//返回一个设置了name的ModelA
ModelA.forName(this.name);
}
复制代码
- 12。 Getter setter 覆盖
Dart 中的所有基类型、类等
继承自 Object
,默认为 和
、 getter
和 如果它是
那么它只有一个方法,final
或 const
constobject 全部支持覆盖getter和setter:
13、Assert
assert
仅在控制模式下有效,开发过程中= nullassert(unicorn);只有条件为真才正常,否则直接抛出异常。通常在开发过程中用来指定哪些状态不应该出现在某些地方。
14。重写运算符,重载
运算符
,如下所示,然后对类进行+/-操作。
class Vector {
final int x, y;
Vector(this.x, this.y);
Vector operator +(Vector v) => Vector(x + v.x, y + v.y);
Vector operator -(Vector v) => Vector(x - v.x, y - v.y);
···
}
void main() {
final v = Vector(2, 3);
final w = Vector(2, 2);
assert(v + w == Vector(4, 5));
assert(v - w == Vector(0, 1));
}
复制代码
重载支持的运算符:
类、接口、继承
Dart
没有接口,类可以用作接口。将类实现为接口时,只需使用实现
,然后重写父类方法即可。
Dart
支持mixins
。出现的顺序应该是 extends
、
mixins
、tools
。在Zone
Dart
中,Zone
可以用来表示指定代码执行的环境,类似于沙箱概念。在函数Flutter
中, C++ 运行DartDartonon 还运行 _Main 使用
runZoned
方法,我们也可以通过运行它,捕获工作环境中的全局异常等。信息:
runZoned(() { runApp(FlutterReduxApp()); }, onError: (Object obj, StackTrace stack) { print(obj); print(stack); }); 复制代码
同时,您可以在回调上注册方法
runZoned并运行。需要如下面的代码所示。这样在
这个zone
的任何地方,如果 可以获取 onDataZone UnaryCallback♺♺ 可以♺ leData
///最终需要处理的地方 handleData(result) { print("VVVVVVVVVVVVVVVVVVVVVVVVVVV"); print(result); } ///返回得到一个 ZoneUnaryCallback var onData = Zone.current.registerUnaryCallback<dynamic, int>(handleData); ///执行 ZoneUnaryCallback 返回数据 Zone.current.runUnary(onData, 2); 复制代码
A同步逻辑可以通过
调度MicroTask插入
异步执行方式:Zone.current.scheduleMicrotask((){ //todo something }); 复制代码
查看更多:《Flutter完整开发实战详解(十一、全面深入理解Stream)》
未来
未来,只是未来
Zone
。
例如Future.microtask
主要执行Zone
结果._ full
最后一次调用是 _zone.runUnary.等等。在 factory Future.microtask(FutureOr<T> computation()) {
_Future<T> result = new _Future<T>();
scheduleMicrotask(() {
try {
result._complete(computation());
} catch (e, s) {
_completeWithErrorCallback(result, e, s);
}
});
return result;
}
复制代码
Dart
中,可以使用函数async
/await
定义异步操作 或 。事实上,
async
/await
只是语法糖,最终被future修改。
有兴趣的话请看这里:
generators
code_generator.dart
Flutter详细实战开发(11.Stream)彻底全面
Stream
还有一项权利使用另一个封装的Zone
Dart 中的另一个异步操作,async*
/ yield
或 ♷ 或 am Stream 异步*
转换为 / ♷ 或 上午 yield
只是语法糖,最终会被编译器Stream。
Stream 还支持同步操作。
1)、Stream
主要包括Stream
、e、Stream
Sink
和StreamSubscription
四个键 对象可以总体如下:
StreamController
:正如类名所描述的,它用于控制整个Stream
流程,并提供不同的接口来创建不同的事件流。StreamSink
:常用作事件的入口点,如add
、addStream❀❙
:事件源本身,一般可用于侦听事件或变换事件,例如侦听
、其中
。StreamSubscription
:事件后订阅的对象,用于看似管理订阅等各种操作,如cacenl
、内部、、❀、❀也是一个事件转发器。基本的。
2), 通常创建
Stream
到StreamController
;通过StreamSink
添加事件; 流
收听事件;通过StreamSubscription
管理订阅。 † 、take
等操作,还支持将转换为Future
。
作者:连毛德小果
来源:掘金
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。