Code前端首页关于Code前端联系我们

Flutter面试知识点:DART强类型语言

terry 2年前 (2023-09-23) 阅读数 77 #移动小程序

学过javaScriptjava/Kotlin❀的人, Dart结合了动态语言的特点和静态语言。 这里我们主要提供不同的或有趣的概念。

  • 1、Dart属于强类型语言,但你也可以使用s、变量、
event
  ..id = 1
  ..type = ""
  ..actor = "";
复制代码
  • Dart 开始 派生数据类型, var实际上是编译时的“语法糖”。 dynamic 表示动态类型。构造完成后,它实际上是类型object。类型检查不是在编译时执行的,而是在运行时执行的。
  • 2、Dart,例如if仅支持♺♺❀ 支持字符串类型。
  • 3、Dart数组List相同。
  • 4、DartRunes表示用作UTF字符串的符号文本

,即UTF32。 Runes ('\u{1f596} \u{1f44d}');

  • 5,Dart支持闭包。在数字
  • 6、Dart中,数字类型分为int和double,没有float类型。
  • 7,dart在级联操作员cascade操作员您可以轻松配置逻辑,如以下代码所示:♷♷♷分配运算符是:
    AA ?? "999"  ///表示如果 AA 为空,返回999
    AA ??= "999" ///表示如果 AA 为空,给 AA 设置成 999
    AA ~/999 ///AA 对于 999 整除
    复制代码
    • 9 。可选方法参数

    Dart 该方法可以为参数 设置默认值 ,并为 设置名称

    例如:getDetail(Sting userName, reposName, {branch = "master"}){}方法,如果这里没有指定分支,则默认为“master”。参数类型可以设置或取消设置。调用效果:getRepositoryDe​​tailDao("aaa", "bbbb",branch: "dev");.

    • 10。范围

    Dart 无关键字 publicprivate 和其他修饰符表示 private 但带有注释 @受保护

    • 11。施工方法

    DartDart 通过上述方法可以实现多种施工方法。

    默认构造函数只能有一个,可以使用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 如果它是 finalconstconst 那么它只有一个方法,object 全部支持覆盖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));
    }
    复制代码

    重载支持的运算符:Flutter 面试知识点:Dart 强类型语言

    • 类、接口、继承

    Dart没有接口,类可以用作接口。将类实现为接口时,只需使用实现,然后重写父类方法即可。

    Dart 支持mixins。出现的顺序应该是 extends

    • mixinstools。在
      • Zone

      Dart中,Zone可以用来表示指定代码执行的环境,类似于沙箱概念。在函数 Flutter 中, C++ 运行 DartDartonon 还运行 _Main 使用 runZoned 方法,我们也可以通过 运行它,捕获工作环境中的全局异常等。信息:

        runZoned(() {
          runApp(FlutterReduxApp());
        }, onError: (Object obj, StackTrace stack) {
          print(obj);
          print(stack);
        });
      复制代码

      同时,您可以在回调上注册方法runZoned并运行。需要如下面的代码所示。这样在 zone 的任何地方,如果 可以获取 onData 这个 Zone 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主要包括Streame、StreamSinkStreamSubscription 四个键 对象可以总体如下:

    • StreamController:正如类名所描述的,它用于控制整个Stream流程,并提供不同的接口来创建不同的事件流。
    • StreamSink:常用作事件的入口点,如addaddStream❀❙ :事件源本身,一般可用于侦听事件或变换事件,例如侦听其中
    • StreamSubscription:事件后订阅的对象,用于看似管理订阅等各种操作,如cacenl、内部、、❀、❀也是一个事件转发器。基本的。

    2), 通常创建StreamStreamController;通过StreamSink添加事件; 收听事件;通过StreamSubscription管理订阅。 † 、take等操作,还支持将转换为Future

    作者:连毛德小果
    来源:掘金

    版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    热门