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。

相关推荐
方见华Richard26 分钟前
整数阶时间重参数化:基于自适应豪斯多夫维数的偏微分方程正则化新框架
人工智能·笔记·交互·原型模式·空间计算
2601_9498333941 分钟前
flutter_for_openharmony口腔护理app实战+知识实现
android·javascript·flutter
好奇龙猫41 分钟前
【人工智能学习-AI入试相关题目练习-第十六次】
人工智能·学习
晚霞的不甘43 分钟前
Flutter for OpenHarmony从基础到专业:深度解析新版番茄钟的倒计时优化
android·flutter·ui·正则表达式·前端框架·鸿蒙
舟舟亢亢1 小时前
JVM复习笔记——下
java·jvm·笔记
量子-Alex1 小时前
【大模型课程笔记】斯坦福大学CS336 课程环境配置与讲座生成完整指南
人工智能·笔记
土拨鼠烧电路1 小时前
笔记04:价值链深度游:追踪一包纸巾的“数字一生”
笔记
鸟儿不吃草1 小时前
android的Retrofit请求https://192.168.43.73:8080/报错:Handshake failed
android·retrofit
Minilinux20181 小时前
Android音频系列(09)-AudioPolicyManager代码解析
android·音视频·apm·audiopolicy·音频策略
BlackWolfSky1 小时前
鸿蒙中级课程笔记12—应用质量建议与测试指南
笔记·华为·harmonyos