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。

相关推荐
百锦再1 小时前
第21章 构建命令行工具
android·java·图像处理·python·计算机视觉·rust·django
陈橘又青1 小时前
CANN在智能安防场景中的落地实践:释放硬件潜能,简化AI开发
人工智能·网络协议·学习·ai·编辑器
未若君雅裁1 小时前
斐波那契数列 - 动态规划实现 详解笔记
java·数据结构·笔记·算法·动态规划·代理模式
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [kernel]sysctl
linux·笔记·学习
专注于大数据技术栈3 小时前
java学习--==和equals
java·python·学习
skyhh3 小时前
Android Studio 最新版汉化
android·ide·android studio
路人甲ing..3 小时前
Android Studio 快速的制作一个可以在 手机上跑的app
android·java·linux·智能手机·android studio
携欢6 小时前
PortSwigger靶场之Web shell upload via path traversal靶场通关秘籍
android
智商低情商凑11 小时前
Go学习之 - Goroutines和channels
开发语言·学习·golang