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。

相关推荐
阿巴斯甜15 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker15 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952716 小时前
Andorid Google 登录接入文档
android
黄林晴18 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_2 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android