Dart基础语法常见题目有哪些?

295 阅读4分钟

前言

Dart基础语法, 是开发过程中, 必须掌握的。接下来, 我们一起学习。

  • 在编程中,"编译期间"和"运行期间"是两个重要的概念,它们涉及到代码的不同阶段和执行方式

    • 编译期间(Compile Time) :这是指在你的代码被实际运行之前的阶段。在编译期间,编译器会对你的源代码进行语法检查、语义分析、类型检查等操作,并将代码翻译成机器可以理解的中间代码(例如,在Dart中就是编译成中间的Dart虚拟机字节码或AOT编译成本地机器代码)。编译期间的工作是为了确保你的代码在运行时没有明显的错误。
    • 运行期间(Runtime) :这是指在你的代码被实际执行的阶段。当你的程序被启动并开始运行时,它会按照代码的逻辑执行操作。在运行期间,你的程序可以与外部环境互动,读取数据、执行计算、展示界面等等。运行期间的工作是代码实际发挥作用的时候。
  • dart是哪种运行方式呢?

    • 即时编译(Just-In-Time Compilation,JIT) :在开发阶段和调试阶段,Dart 使用 JIT 编译。这意味着在运行 Dart 代码时,Dart 虚拟机会将 Dart 代码即时编译成中间代码(Dart 虚拟机字节码),然后在虚拟机中执行。这种方式允许你进行快速的开发和调试,因为代码的更改会迅速地反映在运行中的程序中。
    • 预先编译(Ahead-Of-Time Compilation,AOT) :在发布和部署应用程序时,Dart 可以使用 AOT 编译。这意味着代码在部署之前会被提前编译成本地机器代码(或其他平台的中间代码)。AOT 编译可以提高应用程序的性能和启动速度,因为它消除了即时编译的开销,并使应用程序能够更快地启动。
    • 总结起来,Dart 在不同的阶段可以使用不同的运行方式。在开发和调试时,通常使用 JIT 编译以获得快速的迭代开发体验。在发布和部署时,可以使用 AOT 编译来提高应用程序的性能和运行速度。
  • 所有变量引用的都是 对象,每个对象都是一个  的实例。数字、函数以及 null 都是对象。除去 null 以外(如果你开启了 空安全), 所有的类都继承于 Object 类。

  • 如果你开启了 空安全,变量在未声明为可空类型时不能为 null。你可以通过在类型后加上问号 (?) 将类型声明为可空。例如,int? 类型的变量可以是整形数字或 null。如果你 明确知道 一个表达式不会为空,但 Dart 不这么认为时,你可以在表达式后添加 ! 来断言表达式不为空(为空时将抛出异常)。例如:int x = nullableButNotNullInt!

  • 标识符 可以以字母或者下划线 (_) 开头,其后可跟字符和数字的组合。

  • Dart是强类型语言。但是也可以用var声明变量。

    • var声明的变量, 在编译期自动推导出数据类型
    • dynamic声明的变量, 表示动态类型。被编译后, 是Object类型。编译期间不进行任何数据类型的检查, 运行期间进行数据类型检查
  • constfinal修饰的变量, 无法更改变量值。

    • const 修饰变量表示该变量为 编译时常量
      • const time = DateTime.now(); 会报错 因为我们无法将运行时值分配给 const 变量
      • final x = 0; const y = x; 会报错 因为我们无法将运行时值分配给 const 变量
      • var x = 0; const y = x; 会报错 因为我们无法将运行时值分配给 const 变量
      • const x = 0; const y = x; 正确
    • final 修饰变量表示该变量值在运行时才知道。
      • const x = 0; final y = x; 正确 const 变量同时也是 final 的
      • final time = DateTime.now(); 正确 当前时间在运行时知道
  • Dartif 语句中的条件必须是bool(布尔值)而不能为其它类型

  • Dart 支持两种 Number 类型: intdouble, 没有float类型。intdoublenum的子类

  • Dart 使用 bool 关键字表示布尔类型,布尔类型只有两个对象 true 和 false,两者都是编译时常量。

  • Dart 中数组由 List 对象表示。通常称之为 List

  • Dart 中,set 是一组特定元素的无序集合。 Dart 支持的集合由集合的字面量和 Set 类提供。

    • var names = {}; 可以使用在 {} 前加上类型参数的方式创建一个空的 Set
    • Set names = {}; 将 {} 赋值给一个 Set 类型的变量
    • var names = {}; 错误 创建的是一个map, 不是set
  • Map 是用来关联 keys 和 values 的对象。其中键和值都可以是任何类型的对象。每个  只能出现一次但是  可以重复出现多次。

    • var gifts = {'first': 'partridge', 'second': 'turtledoves', 'fifth': 'golden rings'}; 对使用 Map 字面量创建 Map
    • var gifts = Map<String, String>(); gifts['first'] = 'partridge'; gifts['second'] = 'turtledoves'; gifts['fifth'] = 'golden rings'; 使用 Map 的构造器创建 Map

参考资料

面试知识点集锦

Final 和 Const

官网Dart基础语法

官网diagnostic-messages