Android学Dart学习笔记第四节 基本类型

Numbers

Dart中的number只有两种类型,分别为int和double

在官方文档中明确说明:

Dart numbers come in two flavors:

int

int的值不可大于64位,在navite平台是-263 to 263 - 1,在web上是-253 to 253 - 1,这一点需要注意,可能导致跨平台的bug。

看看源码中int的定义:

可以看到int类继承自num,接下来我们去看看num

可以看到注释中描述,num是int和double的父类,且任何除int和double之外的类型继承或实现num,都会导致编译时错误。

double

这里是意思是,double、int都是num的子类,num提供了诸如+、-、*、/之类的函数,如果找不到就到math包下找。

同时,支持给double直接赋值int,此时int将自动转换为double

num

在实际开发中,我们也可以直接使用num来定义数值,num就既可以是int,也可以是double,这取决于他的值到底是什么。

string

支持$的写法

也支持条件表达式

多行字符串

官方建议使用三个单引号或双引号来实现换行,实测使用\n依然有效,但不允许中间使用回车符(编译报错)。

原始字符串

使字符串中的特殊字符,如\n、\t等以纯文本的形式存在

看下面的例子:

boolean

在dart中,boolean类型使用bool定义,同时只有true和false。

Runes and grapheme clusters

这块主要是说dart使用的是utf-16的字符编码,讲解了如何在dart中使用UniCode编码,看下面的例子:

输出是个笑脸。

以及如果要读取或者写入单个Unicode字符,建议使用characters,下面看看官方的案例:

dart 复制代码
import 'package:characters/characters.dart';

void main() {
  var hi = 'Hi 🇩🇰';
  print(hi);
  print('The end of the string: ${hi.substring(hi.length - 1)}');
  print('The last character: ${hi.characters.last}');
}
dart 复制代码
dart run bin/main.dart
Hi 🇩🇰
The end of the string: ???
The last character: 🇩🇰

有经验的同学应该可以发现这里的DK是个特殊字符,明显比英文DK要矮点。

那么为什么会出现这样的情况呢?

我打印了这个字符串的长度,结果是7。

借助AI,

这样我们就理解了。

现在我们修改下代码,再次运行

这样我们就理解了文档的意思。以后在遇到类似问题的时候,做到心中有数。

Symbols

表示一种不会被改名的name,对通过name引用的api十分有效。

下面是Symbol类的注释

/// Opaque name used by mirrors, invocations and [Function.apply].

看到这里就有所猜猜测了,下面来一段ai的解释:

"Symbol 在 Dart 中被定义为一个 '被镜像(反射)、动态调用和 Function.apply 所使用的不透明名称'。

'不透明名称' 意味着它是一个标识符(如变量名、方法名)的引用,但你无法直接获取其背后的字符串值,这主要是为了支持代码混淆和树抖动优化。

它的主要应用场景是在 dart:mirrors 反射库中,用于在运行时动态地查找和操作类的成员。

此外,在与动态函数调用相关的 API,如 Function.apply 中,也会用到它。

不过需要强调的是,由于 Flutter 为了追求最佳性能和最小应用体积而禁用了 dart:mirrors,所以在日常 Flutter 开发中我们很少直接使用 Symbol,而是用代码生成(如 json_serializable、riverpod)来替代反射的需求。"

暂时了解有这个东西,就ok。

相关推荐
hunter14509 小时前
windows server AD域与CA部署证书
笔记
im_AMBER9 小时前
Leetcode 101 对链表进行插入排序
数据结构·笔记·学习·算法·leetcode·排序算法
Mr -老鬼10 小时前
Rust与Go:从学习到实战的全方位对比
学习·golang·rust
laplace012310 小时前
# 第四章|智能体经典范式构建 —— 学习笔记(详细版)
笔记·学习
程序猿零零漆10 小时前
Spring之旅 - 记录学习 Spring 框架的过程和经验(十四)SpringMVC的请求处理
学习·spring·pandas
别了,李亚普诺夫10 小时前
PCB设计大师篇笔记
笔记·嵌入式硬件·学习
西瓜堆10 小时前
提示词工程学习笔记: IT技术行业提示词推荐
笔记·学习
2301_8107463110 小时前
CKA冲刺40天笔记 - day24 Kubernetes Clusterrole 和 Clusterrole Binding
笔记·容器·kubernetes
robotx10 小时前
AOSP设备节点权限添加相关
android
顾林海10 小时前
Android文件系统安全与权限控制:给应用数据上把“安全锁”
android·面试·操作系统