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
,默认为 和
重载支持的运算符: 同时,您可以在回调上注册方法 A同步逻辑可以通过 查看更多:《Flutter完整开发实战详解(十一、全面深入理解Stream)》 例如 有兴趣的话请看这里: generators code_generator.dart Flutter详细实战开发(11.Stream)彻底全面、 getter
和 如果它是
那么它只有一个方法,final
或 const
constobject 全部支持覆盖getter和setter:
。13、Assert
.等等。在assert
仅在控制模式下有效,开发过程中= nullassert(unicorn);只有条件为真才正常,否则直接抛出异常。通常在开发过程中用来指定哪些状态不应该出现在某些地方。
任务,任务运算符
,如下所示,然后对类进行+/-操作。 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);
复制代码
调度MicroTask插入
异步执行方式:Zone.current.scheduleMicrotask((){
//todo something
});
复制代码
未来
未来,只是未来
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修改。
Stream
还有一项权利使用另一个封装的Zone
Dart 中的另一个异步操作,async*
/ yield
或 ♷ 或 am Stream 异步*
转换为 / ♷ 或 上午 yield
只是语法糖,最终会被编译器Stream。
Stream 还支持同步操作。
1)、 2), 通常创建 作者:连毛德小果Stream
主要包括Stream
、e、Stream
Sink
和StreamSubscription
四个键 对象可以总体如下: StreamController
:正如类名所描述的,它用于控制整个Stream
流程,并提供不同的接口来创建不同的事件流。 StreamSink
:常用作事件的入口点,如add
、addStream❀❙
:事件源本身,一般可用于侦听事件或变换事件,例如侦听
、其中
。 StreamSubscription
:事件后订阅的对象,用于看似管理订阅等各种操作,如cacenl
、内部、、❀、❀也是一个事件转发器。基本的。 Stream
到StreamController
;通过StreamSink
添加事件; 流
收听事件;通过StreamSubscription
管理订阅。 † 、take
等操作,还支持将转换为Future
。
来源:掘金
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。