那些你不知道的Dart细节之内置类型(二)

简介: 在Dart中,内置类型有以下几种:Numbers 数值、Strings 字符串、Booleans 布尔值、Lists 列表(数组)、Sets 集合、Maps 集合、Runes 符号字符、Symbols 标识符。

前言

上一篇文章说了Dart中的变量的一些细节问题,大家可以去看一下。在本篇文章中会详细说明Dart中内置类型的你不知道的细节问题。

那些你不知道的Dart细节之变量

那些你不知道的Dart细节之内置类型

那些你不知道的Dart细节之函数(方法)

那些你不知道的Dart细节之操作符、流程控制语句、异常

那些你不知道的Dart细节之类的点点滴滴

那些你不知道的Dart细节之泛型和库

概述

在Dart中,内置类型有以下几种:Numbers 数值、Strings 字符串、Booleans 布尔值、Lists 列表(数组)、Sets 集合、Maps 集合、Runes 符号字符、Symbols 标识符。

num, int, double

int和double大家都很熟悉,int还是整数值,double是64-bit双精度浮点数。这里需要着重看一下num,int和double是num的子类。剩下的就没什么好说的了,其他的使用方法和Java基本一样,只是可以直接定义num类型的数据,剩下的大家直接看下面的代码应该就明白了:

int i = 1; //整数值
  double d = 1.0; //double  64-bit (双精度) 浮点数
  int bitLength = i.bitLength;
  print('bitLength: ${bitLength}'); //bitLength判断int值需要多少bit位
  double maxFinite = double.maxFinite;
  print('maxFinite: ${maxFinite}'); //maxFinitedouble的最大值
  //int和double都是num的子类
  num n1 = 1;
  num n2 = 1.0;
  //支持十进制、十六进制
  int i1 = 0xfff;
  //科学计数法
  double d1 = 1.2e2; //120.0
  //转换
  //String->int
  int i2 = int.parse('1');
  double d2 = 1; //当double的值为int值时,int自动转成double
  print('d2: ${d2}');
//  int i2 = int.tryParse('1.0');//返回null

String

Dart 字符串是 UTF-16 编码的字符序列,可以使用单引号或者双引号来创建字符串


main(){
  String a = 'zhujiang';
  String b = "zhujiang";
}

可以使用三个单引号或者双引号创建多行字符串对象

String c = "dd"
    "sssdffg"
  "vftgt";
  String d = '''ssss
  fffffffgg
  grrrr''';

可以使用 r 前缀创建”原始raw”字符串。


String e = '''ssss
  fff\nffffgg
  grrrr''';
  String f = r'''ssss
  fff\nffffgg
  grrrr''';
  print(e);
  print(f);

这里需要说明一下,如果使用r前缀,即是原始字符串,\n换行会直接打印出来而不会实现换行,下面是执行结果:

lib/2-type.dart: Warning: Interpreting this as package URI, 'package:darttest/2-type.dart'.
ssss
  fff
ffffgg
  grrrr
ssss
  fff\nffffgg
  grrrr

可以在字符串中使用表达式: ${expression},如果表达式是一个标识符,可以省略 {},如果表达式的结果为一个对象,则 Dart 会调用对象的 toString() 函数来获取一个字符串。

print("object:$c");

这里既然已经说到String了,那就再说一下StringBuffer吧,使用方法和Java一样,但是可以省略new关键字,还可以进行链式调用:

StringBuffer stringBuffer = StringBuffer();
  stringBuffer..write("sss")..write("ssss");

bool

这里的bool相当于Java中boolean,这里只需要记着bool对象未初始化的默认值是null(上一篇文章中提到过)

List

Dart中可以直接打印list包括list的元素,List也是对象(java中直接打印list结果是地址值)。

print(List)

这里会直接输出List。

Dart中List的下标索引和java一样从0开始

和java一样支持泛型。

有增删改查,支持倒序,自带排序、洗牌,可使用+将两个List合并

//常用方法 增删改查,排序,洗牌,复制子列表
  var list4 = [];
  //增
  list4.add(1);
  print('add 1 :${list4}');
  //删
  list4.remove(5);
  print('remove 5 :${list4}');
  list4.removeAt(2);
  print('remove at 0 :${list4}');
  //改
  list4[4] = 5;
  print('update list4[4] to 5 :$list4}');
  //range
  list4.fillRange(0, 3, 9);
  print('fillRange update list4[0]-list4[2] to 9 :$list4}');
  Iterable getRange = list4.getRange(0, 3);
  print('getRange list4[0]-list4[2] :$getRange}');
  //查
  var contains = list4.contains(5);
  print('list4 contains 5 :${contains}');
  var indexOf = list4.indexOf(1);
  print('list4 indexOf 1 :${indexOf}');
  int indexWhere = list4.indexWhere((test) => test == 5);
  print('list4 indexWhere 5 :${indexWhere}');
  //排序
  list4.sort();
  print('list4 sort :${list4}');
  //洗牌
  list4.shuffle();
  print('list4 shuffle :${list4}');
  //复制子列表
  var list5 = list4.sublist(1);
  print('sublist(1) list5 :${list5}');
  //操作符
  var list6 = [8, 9];
  print('list6 :${list6}');
  var list7 = list5 + list6;
  print('list5 + list6 :${list7}');

这里的代码比较长,但是很好理解,就是一个集合的增删改查和一些比较常用的方法,大家可以自己手写一下加深理解。

Map

map这里就不多说了,和Java类似

Set

Set这里其实也和Java差不多,但是有几个地方需要说明一下:

set1.difference(set2):返回set1集合里有但set2里没有的元素集合
set1.intersection(set2):返回set1和set2的交集
set1.union(set2):返回set1和set2的并集
set1.retainAll():set1只保留某些元素(要保留的元素要在原set中存在)
这几个方法非常好用,简单写一下伪代码大家看一下吧:
  var difference12 = set1.difference(set2);
  var difference21 = set2.difference(set1);
  print('set1 difference set2 :${difference12}'); //返回set1集合里有但set2里没有的元素集合
  print('set2 difference set1 :${difference21}'); //返回set2集合里有但set1里没有的元素集合
  var intersection = set1.intersection(set2);
  print('set1 set2交集 :${intersection}'); //返回set1和set2的交集
  var union = set1.union(set2);
  print('set1 set2并集 :${union}'); //返回set1和set2的并集
  set2.retainAll(['aa', 'flutter']); //只保留(要保留的元素要在原set中存在)
  print('set2只保留aa flutter :${set2}');

Runes

表示符文的意思,用于在字符串中表示Unicode字符。使用String.fromCharCodes显示字符图形。如果非4个数值,需要把编码值放到大括号中。

Runes runes = new Runes('\u{1f605} \u6211‘);
  var str1 = String.fromCharCodes(runes);  
  print(str1);

直接这样写就可以了,下面看一下打印效果:

😅 我
1

直接可以打印出表情,有表情需求的可以直接使用Runes。

Symbol

Symbol标识符,以前主要是反射使用,但是现在mirrors模块已经被移除,所以没啥大用了,大家只要知道有这么一个内置类型就可以了。

总结

到这里Dart的第二篇文章就结束了,本篇文章主要讲解了一下Dart语言的内置类型。Dart其实挺好用的,有很多Java没有的优点,在细节方面做的非常好👍。下一篇文章讲解一下Dart中的函数(方法),希望大家能够喜欢

目录
相关文章
|
监控 网络架构
CAN-TP传输协议详解
CAN-TP传输协议详解
CAN-TP传输协议详解
|
5月前
|
编译器 程序员 Linux
实用工具:VS Code 配置 Markdown 编译器全指南
本文介绍如何在VS Code中配置高效Markdown写作环境,通过启用内置预览、安装Markdown All in One与Markdown Preview Enhanced插件,并配置Princexml实现PDF等格式导出,全面提升编辑、预览与输出效率,适合程序员、学生及内容创作者使用。
3124 2
实用工具:VS Code 配置 Markdown 编译器全指南
|
3月前
|
缓存 IDE 开发工具
Visual Studio 2022安装教程 Windows版专业版/企业版选择+安装路径修改+产品密钥激活指南
Microsoft Visual Studio(VS)是Windows平台主流IDE,集代码编辑、调试、测试、版本控制等功能于一体。本文详述VS2022专业版/企业版的离线安装、路径设置、工作负载选择及密钥激活全流程,操作清晰,新手友好。(239字)
4314 2
|
6月前
|
人工智能 API Python
Gemini 3 Nano Banana 的MCP服务器开发设计和 国内直连方案
基于Gemini 3 API开发的MCP绘图工具,支持在Coding客户端中边写代码边生成流程图。项目采用Python实现,兼容Gemini 2.5 Flash与3 Pro图像API,集成超时控制、国内直连路由转发功能,可高效调用AI生图。提供完整GitHub开源代码及在线试用地址,欢迎提交Issue交流。
|
存储 数据安全/隐私保护 开发者
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
826 8
苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
|
11月前
|
API 开发工具 开发者
HarmonyOS NEXT实战:拨打电话
本课程介绍如何在HarmonyOS SDK中使用Telephony Kit实现拨打电话功能。通过CallPhoneDemoPage示例,讲解如何输入电话号码并调用makeCall接口拨号,涉及call模块的使用及设备通话能力检测。
8081 0
|
安全 TensorFlow 算法框架/工具
开源大模型与闭源大模型,你更看好哪一方?
开源大模型与闭源大模型,你更看好哪一方?
|
C语言