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 异步编程
Future和async、await关键字支持异步编程,允许进行非阻塞操作
2.5 集合
List、Set、Map支持数据集合的操作
- 支持集合字面量和集合操作如添加、删除、遍历等
- 支持展开运算符(...)和集合 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 问题总结
- Dart语言中 final 和 const 有什么不同?
- final:可以在运行时被初始化一次,其值在第一次使用时才确定。这意味着
final变量的值可以依赖于运行时数据。 - const:必须在编译时就确定其值,因此不能将运行时数据赋值给
const变量。const变量用于表示编译时常量。 - final:虽然
final变量的值不可改变,但是Dart只有在运行时才会检查这一点。因此,final变量的值可以是在编译时未知的,只要它在运行时之前能够确定即可。 - const:
const变量必须在编译时就确定其值,这就意味着它们的值必须是一个编译时常量。Dart编译器会在编译时对const变量进行处理。 - final:当你需要一个不可变的值,但该值依赖于运行时计算或数据时,应使用
final。例如,从数据库获取的数据可以赋值给final变量。 - const:当你需要定义编译时常量,如固定配置信息或者在编译时就已知且不会改变的值时,应使用
const。const常用于定义类内部的常量或全局常量。 - const:由于
const值在编译时就已确定,因此可以提高性能。Dart会在编译时将相同的const值合并,减少内存占用。 - final:
final变量的值可能在运行时才确定,因此无法享受编译时优化。但是,由于其值不可变,可以在一定程度上提高代码的安全性和可维护性。
final和const都用于声明变量,都能够创建不可变的值。然而,它们的不同主要体现在初始化时机、编译期处理以及使用场景上。初始化时机
编译期处理
使用场景
性能考虑
一句话总结来说,
final和const都用于声明不可变的变量,但final更灵活,允许运行时初始化,而const则专注于编译时常量,适用于不变的全局值。- Dart中有哪些访问修饰符?
- Dart没有类似Java中的
protected修饰符,用于允许子类访问父类的成员。 - Dart的私有性是基于库的,而不是基于类的。这意味着,同一库内的不同类可以互相访问私有成员。
- 使用下划线命名约定来实现私有性是Dart的一项独特设计,它简化了语言规范,同时提供了足够的封装能力。
在Dart中,控制访问级别的机制与传统的访问修饰符(如public、private、protected等)有所不同。
Dart语言本身只区分两种访问级别:库级别的公开访问和私有访问。
这是通过变量、类或成员的命名约定来实现的,而不是通过关键字。
下面是Dart的两种访问级别:
1. 公开访问(Public)
在Dart中,默认情况下,所有声明都是公开的,即它们可以被同一库中的任何代码以及导入该库的其他代码访问。如果你定义了一个类、函数或变量,而没有使用特殊的命名约定来标记它们为私有的,那么它们就是公开的。
2. 私有访问(Private)
要使某个声明成为私有的,你需要在其名称前加上下划线(_)。这表明该声明只能被定义它的库内部的代码访问。这适用于类、变量、函数以及类的成员(属性和方法)。
注意,Dart的私有性是基于库的,这意味着即使两个文件是同一个包的一部分,如果它们属于不同的库(通过part/part of机制连接),它们也无法访问彼此的私有成员。
在上述示例中,
PublicClass、publicVar和publicMethod()是公开的,可以在导入了lib.dart库的任何地方访问。而_privateVar和_privateMethod()是私有的,只能在lib.dart这个库文件内被访问。注意
一句话总结来说,Dart通过命名约定而非传统的访问修饰符来控制访问级别,主要区分为公开访问和私有访问两种方式。
- Dart中,函数或方法的参数类型有几种?
1. 必需参数(Required Parameters)
必需参数是在函数定义时必须提供的参数,它们在函数声明中按顺序列出。调用函数时,必须按照函数定义时的顺序提供所有必需参数的值。
2. 可选位置参数(Optional Positional Parameters)
可选位置参数允许你在调用函数时省略部分参数。它们被包裹在方括号
[]中,并且位于必需参数之后。调用函数时,可以根据参数在函数定义中的位置来传递可选参数。3. 可选命名参数(Optional Named Parameters)
可选命名参数提供了另一种方式来定义可选参数。与可选位置参数不同,命名参数在调用时使用参数名指定,这增加了代码的可读性。可选命名参数被包裹在花括号
{}中。4. 默认参数值(Default Parameter Values)
对于可选位置参数和可选命名参数,你可以为它们提供默认值。如果在调用函数时没有提供相应参数的值,则将使用默认值。这通过在参数声明时使用
=操作符后跟一个值来实现。5. 必需命名参数(Required Named Parameters)
从Dart 2.12开始,你可以将命名参数标记为必需的。这通过在参数名称前添加
required关键字来实现。这意味着在调用函数时,必须提供这些参数的值,即使它们是命名参数。一句话来总结,必需参数添加require,可选参数[ ? ] , 默认参数值 { }
Loading...

