Flutter开发01-Dart基础

Flutter开发01-Dart基础
type
status
date
slug
summary
tags
category
icon
password
😀
这里写文章的前言: Dart 语言提供了一系列的运算符和编程机制,使得开发者能够以简洁、高效的方式编写代码。

Dart学前预览

Dart: https://dart.cn/
以下是 Dart 中一些常用的运算符和机制:

基本内容

1.常用运算符

1.1 算术运算符

  • + 加法
  • 减法
  • 乘法
  • / 除法
  • ~/ 整除(返回整数结果)
  • % 取模(返回余数)

1.2 关系运算符

  • == 等于
  • != 不等于
  • > 大于
  • < 小于
  • >= 大于等于
  • <= 小于等于

1.3 类型测试运算符

  • is 类型判断(如果对象是指定的类型返回 true)
  • is! 非类型判断(如果对象不是指定的类型返回 true)

1.4 赋值运算符

  • = 简单赋值
  • ??= 如果变量为 null,则赋值(否则不赋值)
  • 其他复合赋值运算符如 +===

1.5 逻辑运算符

  • && 逻辑与
  • || 逻辑或
  • ! 逻辑非

1.6 条件表达式

  • condition ? expr1 : expr2 三元运算符
  • expr1 ?? expr2 如果 expr1 是非 null,则返回其值;否则执行并返回 expr2 的值

1.7 级联运算符

  • .. 允许对同一个对象进行一系列操作而不中断这个过程

2.常用编程机制

2.1 控制流语句

  • if, else 条件分支
  • for, while, do-while 循环
  • switch, case 多路分支
  • break, continue 循环控制

2.2 异常处理

  • try, on, catch, finally 提供异常捕获和处理机制

2.3 函数

  • 支持顶级函数、静态函数和实例函数
  • 支持匿名函数、闭包
  • 支持可选位置参数和命名参数
  • 支持默认参数值

2.4 异步编程

  • Futureasyncawait 关键字支持异步编程,允许进行非阻塞操作

2.5 集合

  • ListSetMap 支持数据集合的操作
  • 支持集合字面量和集合操作如添加、删除、遍历等
  • 支持展开运算符(...)和集合 if、集合 for

2.6 类和对象

  • 支持类的定义与对象创建
  • 支持继承、接口、混入(Mixin)
  • 支持构造函数,包括默认构造函数、命名构造函数和工厂构造函数
  • 支持getter和setter

2.7 泛型

  • 支持在类、接口、方法上使用泛型,以增加代码的复用性和类型安全

1.基础语法

1.1 变量声明和赋值

在Dart中,变量可以使用var或者明确的类型来声明。例如:
此外Dart 提供了强大的集合类型,包括但不限于列表(List)、集合(Set)和映射(Map)。
  • List:有序集合,支持索引访问。可以容纳重复元素。
  • Set:无序集合,不支持索引访问。自动去除重复元素。
  • Map:键值对集合,键唯一。支持根据键访问值。

1.2 函数定义

在Dart中,函数可以使用关键字“void”或者具体返回类型来定义。例如:

1.3 控制流语句

Dart支持常见的控制流语句,例如if-else语句和for循环语句:

1.4 类和对象

Dart是面向对象的编程语言,支持类和对象的概念。例如:

1.5 问题总结

  1. Dart语言中 finalconst 有什么不同?
    1. finalconst都用于声明变量,都能够创建不可变的值。然而,它们的不同主要体现在初始化时机编译期处理以及使用场景上。

      初始化时机

      • final:可以在运行时被初始化一次,其值在第一次使用时才确定。这意味着final变量的值可以依赖于运行时数据。
      • const:必须在编译时就确定其值,因此不能将运行时数据赋值给const变量。const变量用于表示编译时常量。

      编译期处理

      • final:虽然final变量的值不可改变,但是Dart只有在运行时才会检查这一点。因此,final变量的值可以是在编译时未知的,只要它在运行时之前能够确定即可。
      • constconst变量必须在编译时就确定其值,这就意味着它们的值必须是一个编译时常量。Dart编译器会在编译时对const变量进行处理。

      使用场景

      • final:当你需要一个不可变的值,但该值依赖于运行时计算或数据时,应使用final。例如,从数据库获取的数据可以赋值给final变量。
      • const:当你需要定义编译时常量,如固定配置信息或者在编译时就已知且不会改变的值时,应使用constconst常用于定义类内部的常量或全局常量。

      性能考虑

      • const:由于const值在编译时就已确定,因此可以提高性能。Dart会在编译时将相同的const值合并,减少内存占用。
      • finalfinal变量的值可能在运行时才确定,因此无法享受编译时优化。但是,由于其值不可变,可以在一定程度上提高代码的安全性和可维护性。
      一句话总结来说,finalconst都用于声明不可变的变量,但final更灵活,允许运行时初始化,而const则专注于编译时常量,适用于不变的全局值。
  1. Dart中有哪些访问修饰符
    1. 在Dart中,控制访问级别的机制与传统的访问修饰符(如public、private、protected等)有所不同。
      Dart语言本身只区分两种访问级别:库级别的公开访问私有访问
      这是通过变量、类或成员的命名约定来实现的,而不是通过关键字。
      下面是Dart的两种访问级别:

      1. 公开访问(Public)

      在Dart中,默认情况下,所有声明都是公开的,即它们可以被同一库中的任何代码以及导入该库的其他代码访问。如果你定义了一个类、函数或变量,而没有使用特殊的命名约定来标记它们为私有的,那么它们就是公开的。

      2. 私有访问(Private)

      要使某个声明成为私有的,你需要在其名称前加上下划线(_)。这表明该声明只能被定义它的库内部的代码访问。这适用于类、变量、函数以及类的成员(属性和方法)。
      注意Dart的私有性是基于库的,这意味着即使两个文件是同一个包的一部分,如果它们属于不同的库(通过part/part of机制连接),它们也无法访问彼此的私有成员。
      在上述示例中,PublicClasspublicVarpublicMethod()是公开的,可以在导入了lib.dart库的任何地方访问。而_privateVar_privateMethod()是私有的,只能在lib.dart这个库文件内被访问。

      注意

      • Dart没有类似Java中的protected修饰符,用于允许子类访问父类的成员。
      • Dart的私有性是基于库的,而不是基于类的。这意味着,同一库内的不同类可以互相访问私有成员。
      • 使用下划线命名约定来实现私有性是Dart的一项独特设计,它简化了语言规范,同时提供了足够的封装能力。
      一句话总结来说,Dart通过命名约定而非传统的访问修饰符来控制访问级别,主要区分为公开访问私有访问两种方式。
  1. Dart中,函数或方法的参数类型有几种?
    1. 1. 必需参数(Required Parameters)

      必需参数是在函数定义必须提供的参数,它们在函数声明中按顺序列出。调用函数时,必须按照函数定义时的顺序提供所有必需参数的值。

      2. 可选位置参数(Optional Positional Parameters)

      可选位置参数允许你在调用函数时省略部分参数。它们被包裹在方括号[]中,并且位于必需参数之后。调用函数时,可以根据参数在函数定义中的位置来传递可选参数。

      3. 可选命名参数(Optional Named Parameters)

      可选命名参数提供了另一种方式来定义可选参数。与可选位置参数不同,命名参数在调用时使用参数名指定,这增加了代码的可读性。可选命名参数被包裹在花括号{}中。

      4. 默认参数值(Default Parameter Values)

      对于可选位置参数和可选命名参数,你可以为它们提供默认值。如果在调用函数时没有提供相应参数的值,则将使用默认值。这通过在参数声明时使用=操作符后跟一个值来实现。

      5. 必需命名参数(Required Named Parameters)

      从Dart 2.12开始,你可以将命名参数标记为必需的。这通过在参数名称前添加required关键字来实现。这意味着在调用函数时,必须提供这些参数的值,即使它们是命名参数。
      一句话来总结,必需参数添加require,可选参数[ ? ] , 默认参数值 { }
上一篇
Flutter开发02-Dart进阶
下一篇
模板说明
Loading...