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。

相关推荐
观书喜夜长10 小时前
大模型应用开发学习-基于langchain框架做一个个人文档问答助手
python·学习·idea
承渊政道10 小时前
【优选算法】(实战体验滑动窗口的奇妙之旅)
c语言·c++·笔记·学习·算法·leetcode·visual studio
huohuopro10 小时前
UML的概念和主图学习
学习·uml
C羊驼10 小时前
C语言学习笔记(十):操作符
c语言·开发语言·经验分享·笔记·学习
鹭天10 小时前
RAG学习笔记
笔记·学习
myloveasuka11 小时前
[Java]单列集合
android·java·开发语言
arvin_xiaoting11 小时前
OpenClaw学习总结_I_核心架构_6:Compaction详解
学习·系统架构·学习总结·ai agent·compaction·openclaw
存储服务专家StorageExpert11 小时前
NetApp NVME SSD 盘的学习笔记
运维·服务器·笔记·学习·存储维护·emc存储·netapp
fundroid11 小时前
Room 3.0 完全解析:一次面向未来的现代化重构
android·数据库·database·kmp
漂洋过海来看你啊11 小时前
Jetpack Compose高效列表实战:状态管理与性能优化指南
android