当前位置: 首页 > news >正文

Flutter学习4 - Dart数据类型

1、基本数据类型 num、int、double

(1)常用数据类型

  • num类型,是数字类型的父类型,有两个子类 int 和 double

通过在函数名前加下划线,可以将函数变成私有函数,私有函数只能在当前文件中调用

//常用数据类型
void main() {_numType();
}//返回值为 void 的函数,可省略 void
_numType() {//num类型,是数字类型的父类型,有两个子类  int  和  doublenum num1 = -1.0; //doublenum num2 = 2; //intint num3 = 3; //只能是整数,不可为 int 类型赋值 浮点数double num4 = 1.666; //双精度浮点数print("num1: $num1   num2: $num2   num3: $num3   num4: $num4");
}//num1: -1.0   num2: 2   num3: 3   num4: 1.666

(2)数据类型常用方法及类型转换

  • 绝对值函数 abs() 等
void main() {_numType();
}_numType() {num num1 = -1.0;//绝对值print("num1: $num1   num1.abs(): ${num1.abs()}");
}//num1: -1.0   num1.abs(): 1.0
  • 类型转换 toInt() 等
void main() {_numType();
}_numType() {num num1 = -1.0;//数据类型转换print("num1: $num1   toInt(): ${num1.toInt()}");
}//num1: -1.0   toInt(): -1

2、字符串 String

(1)字符串定义

  • 定义字符串,单引号/双引号 均可
void main() {_stringType();
}//字符串
_stringType() {//定义字符串,单引号/双引号 均可String str1 = '窗前明月光', str2 = "疑是地上霜";String str3 = '$str1$str2';print(str3);
}//窗前明月光,疑是地上霜

(2)字符串常用方法

  • 截断字符串 substring()
  • 查找子字符串位置 indexOf()
  • 对比字符串 compareTo()
  • ···
void main() {_stringType();
}//字符串
_stringType() {//定义字符串,单引号/双引号 均可String str1 = '窗前明月光,疑是地上霜';//截断字符串 substringprint(str1.substring(1, 5)); //前明月光//查找子字符串在父字符串˙中位置print(str1.indexOf("明月")); //2//对比两个字符串String str2 = 'abc', str3 = 'gdf';print(str2.compareTo(str3)); //-1
}

3、布尔类型 bool

  • Dart 是强 bool 类型检查的,只有 bool 类型的值是 true,才被认为是 true
void main() {_boolType();
}// Dart 是强 bool 类型检查的,只有 bool 类型的值是 true,才被认为是 true
_boolType() {bool b1 = true, b2 = false;print("b1: $b1");print("b2: $b2");print("b1 || b2: ${b1 || b2}");print("b1 && b2: ${b1 && b2}");
}//b1: true
//b2: false
//b1 || b2: true
//b1 && b2: false

4、集合

4.1、集合 List

(1)List 的定义
  • 初始化 List:[]
void main() {_listType();
}_listType() {List list1 = [1, 2, 3, "Flutter", true];print("list1: $list1");List<int> list2 = [];// list2 = list1;  报错  List<dynamic> 类型无法转换成 List<int>list2.add(9);list2.add(8);list2.add(7);print("list2: $list2");List list3 = [];list3.add("Hello");list3.addAll(list1);print("list3: $list3");
}//list1: [1, 2, 3, Flutter, true]
//list2: [9, 8, 7]
//list3: [Hello, 1, 2, 3, Flutter, true]
  • List 生成函数:grnerate
void main() {_listType();
}_listType() {List list1 = List.generate(5, (index) => index * 3);print("list1: $list1");List list2 = List.generate(3, (index) => 'index: $index');print("list2: $list2");
}//list1: [0, 3, 6, 9, 12]
//list2: [index: 0, index: 1, index: 2]
(2)List 常用方法
  • 遍历、插入、移除、截取、查找等方法使用
void main() {_listType();
}_listType() {List list = List.generate(5, (index) => index * 3);print("list: $list"); //list: [0, 3, 6, 9, 12]//遍历集合print("--------------- 遍历 for ---------------");for (int i = 0; i < list.length; i++) {print("$i: ${list[i]}");}print("--------------- 遍历 in ---------------");for (var e in list) {print(e);}print("--------------- 遍历 forEach ---------------");list.forEach((element) {print(element);});//插入list.insert(0, 'start');print(list); //[start, 0, 3, 6, 9, 12]//移出list.removeAt(1);print(list); //[start, 3, 6, 9, 12]list.remove('start');print(list); //[start, 3, 6, 9, 12]//截取List list2 = list.sublist(0, 2);print("list: $list"); //list: [3, 6, 9, 12]print("list2: $list2"); //list2: [3, 6]//查找int index = list.indexOf(9);print("index: $index");
}

4.2、集合 Map

  • Map 是 key-value 键值对
  • key 和 value 可以是任意类型
(1)Map 定义
void main() {_mapType();
}_mapType() {//Map 初始化Map map1 = {'xiaolan': '小蓝', 1: '小白', 1.2: true};print(map1); //{xiaolan: 小蓝, 1: 小白, 1.2: true}print(map1[1]); //小白Map map2 = {};map2[1] = true;map2['abc'] = 1.4;print(map2); //{1: true, abc: 1.4}Map<String, int> map3 = {};map3['leon'] = 18;map3['alice'] = 19;print(map3); //{leon: 18, alice: 19}
}
(2)Map 常用方法
  • 遍历
  • 移除
  • 判断是否包含
void main() {_mapType();
}_mapType() {Map map = {'小蓝': 2, '小白': 1};print(map); //{{小蓝: 2, 小白: 1}// Map遍历map.forEach((key, value) {print("key: $key, value: $value");});//key: 小蓝, value: 2// key: 小白, value: 1//通过遍历生成 MapMap map2 = map.map((key, value) {return MapEntry(key, value + 1);});print(map2); //{小蓝: 3, 小白: 2}//遍历 keysfor (var key in map2.keys) {print("key: $key, value: ${map2[key]}");}//key: 小蓝, value: 3// key: 小白, value: 2//遍历 valuesfor (var value in map2.values) {print("value: $value");}//value: 3// value: 2//移除元素map2.remove('小白');print(map2); //{小蓝: 3}//是否包含元素print("小白还在吗?  ${map2.containsKey('小白')}"); //小白还在吗?  false
}

5、补充:dynamic、var、Object

(1)动态类型 dynamic

  • dynamic 是所有 Dart 对象的基础类型,在大多数情况下,通常不直接使用它

  • 当我们不给泛型类型指定一个类型时,系统就会将其指定为动态类型,如 List list = [];

  • 不建议使用 dynamic 类型,因为通过它定义的变量会关闭静态类型检查,有些异常只有运行时才能 carsh 出来

  • 崩溃报错

void main() {_dynamicType();
}_dynamicType() {dynamic x = '111';x.foo(); //报错崩溃//静态类型检查时不会报错//但运行时报错 NoSuchMethodError: Class 'String' has no instance method 'foo'.//因为 String 没有 foo() 这个方法,但是因为关闭了检查,只会在运行时报错
}

静态变量检查时,不报错
在这里插入图片描述

运行时,会报 crash
在这里插入图片描述

  • 查看运行时类型
void main() {_dynamicType();
}_dynamicType() {dynamic x = '111';print("x 的运行时类型:${x.runtimeType}"); //x 的运行时类型:Stringx = 123;print("x 的运行时类型:${x.runtimeType}"); //x 的运行时类型:int
}

(2)关键字 var

  • var 是一个关键字,定义变量时不关心变量类型是什么,系统会自动推断类型 runtimeType
  • 类似 Kotlin 中的 var
  • var 声明的变量,静态类型检查时会检查类型,但动态类型 dynamic 不会检查
void main() {_var();
}_var() {var a = 'AAA';print("a 的运行时类型:${a.runtimeType}"); //a 的运行时类型:Stringa = 11; //静态类型检查时会报错,因为已经推断出是 String 类型,不能在赋值 inta.foo(); //静态类型检查时会报错
}

在这里插入图片描述

(3)Object 类型

  • Object 是 Dart对象的基类
  • 当定义 Object o = ‘11’; 时,系统会认为 o 是个对象,可以调用 o 的 toString() 和 hashCode() 方法,因为 Object 提供了这些方法
  • Object 声明的变量,静态类型检查时会检查类型

综上,Object 和 dynamic 的区别就在于静态类型的检查上

void main() {_objectType();
}_objectType() {Object o1 = '11';print("o1运行时类型:${o1.runtimeType}"); //o1运行时类型:Stringo1 = 123;print("o1运行时类型:${o1.runtimeType}"); //1运行时类型:into1.foo(); //静态类型检查时会报错
}

在这里插入图片描述

相关文章:

Flutter学习4 - Dart数据类型

1、基本数据类型 num、int、double &#xff08;1&#xff09;常用数据类型 num类型&#xff0c;是数字类型的父类型&#xff0c;有两个子类 int 和 double 通过在函数名前加下划线&#xff0c;可以将函数变成私有函数&#xff0c;私有函数只能在当前文件中调用 //常用数据…...

leetcode hot100单词拆分

在本题中&#xff0c;我们是要把一个字符串&#xff0c;判断是否能用给的字符串数组中的单词进行拆分&#xff0c;如果可以则返回true&#xff0c;不能的话则返回false。这个题一开始看无法与背包问题联系在一起。但仔细考虑&#xff0c;就是用物品&#xff08;给的字符串数组中…...

大数据构建知识图谱:从技术到实战的完整指南

文章目录 大数据构建知识图谱&#xff1a;从技术到实战的完整指南一、概述二、知识图谱的基础理论定义与分类核心组成历史与发展 三、知识获取与预处理数据源选择数据清洗实体识别 四、知识表示方法知识表示模型RDFOWL属性图模型 本体构建关系提取与表示 五、知识图谱构建技术图…...

WebServer -- 定时器处理非活动连接(上)

目录 &#x1f34d;函数指针 &#x1f33c;基础知识 &#x1f419;整体概述 &#x1f382;基础API sigaction 结构体 sigaction() sigfillset() SIGALRM, SIGTERM 信号 alarm() socketpair() send() &#x1f4d5;信号通知流程 统一事件源 信号处理机制 &#x…...

微服务部署:金丝雀发布、蓝绿发布和滚动发布的对比

金丝雀发布、蓝绿发布和滚动发布的对比 金丝雀发布、蓝绿发布和滚动发布都是软件发布策略&#xff0c;它们都旨在降低发布风险并提高发布速度。但是&#xff0c;这三种策略在工作方式、优缺点等方面存在一些差异。 工作方式 金丝雀发布&#xff1a;将新版本软件逐步发布给用…...

轻松入门MySQL:优化复杂查询,使用临时表简化数据库查询流程(13)

在进销存管理系统中&#xff0c;复杂的数据查询是司空见惯的。这些查询往往需要处理大量的数据&#xff0c;并执行复杂的逻辑操作。然而&#xff0c;处理这些查询可能会变得非常耗时&#xff0c;并且难以维护。为了解决这个问题&#xff0c;我们可以利用临时表&#xff0c;这是…...

vmware的ubuntu虚拟机因空间满无法启动

正在虚拟机编译android源代码&#xff0c;没注意空间不足&#xff0c;结果回来发现了 Assuming drive cache: write through 的问题&#xff0c;经查是空间不足的原因 按照这个教程&#xff0c;清除出来部分空间&#xff0c;才能进去系统&#xff0c;并且对系统空间做下优化 …...

Unity数据持久化之PlayerPrefs

这里写目录标题 PlayerPrefs概述基本方法PlayerPrefs存储位置实践小项目反射知识补充数据管理类的创建反射存储数据----常用成员反射存储数据----List成员反射存储数据----Dictionary成员反射存储数据----自定义类成员反射读取数据----常用成员反射读取数据----List成员反射读取…...

uniapp微信公众号H5分享

如果项目文件node_modules中没有weixin-js-sdk文件&#xff0c;则直接使用本文章提供的&#xff1b; 如果不生效&#xff0c;则在template.h5.html中引入 <script src"https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> 首先引入weixin-js-…...

深入理解指针(c语言)

目录 一、使用指针访问数组二、数组名的理解1、数组首元素的地址2、整个数组 三、一维数组传参的本质四、冒泡排序五、二级指针六、指针数组 一、使用指针访问数组 可以使用指针来访问数组元素。例如&#xff0c;可以声明一个指针变量并将其指向数组的第一个元素&#xff0c;然…...

高级语言期末2015级唐班B卷

1.编写函数&#xff0c;按照如下公式计算圆周率π的值&#xff08;精确到1e-5&#xff09; #include <stdio.h>double pai() {double last0;double flag1;int n1;while(flag-last>1e-5) {lastflag;flag*1.0*(2*n)*(2*n)/((2*n-1)*(2*n1));n;}return 2*last; }int main…...

开发一款招聘小程序需要具备哪些功能?

随着时代的发展&#xff0c;找工作的方式也在不断变得简单&#xff0c;去劳务市场、人才市场的方式早就已经过时了&#xff0c;现在大多数年轻人都是直接通过手机来找工作。图片 找工作类的平台不但能扩大企业的招聘渠道&#xff0c;还能节省招聘的成本&#xff0c;方便求职者进…...

嵌入式学习-qt-Day3

嵌入式学习-qt-Day3 一、思维导图 二、作业 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳…...

零基础到高级:Android音视频开发技能路径规划

音视频开发趋势 Android音视频开发领域目前正处于一个高速发展的阶段&#xff0c;主要趋势如下&#xff1a; 超高清视频&#xff1a;4K视频亚毫米级显示清晰&#xff0c;更加逼真&#xff0c;为开发更加逼真的虚拟现实应用提供了基础。AI技术&#xff1a;自适应码率控制、视频…...

阿里云香港轻量应用服务器网络线路cn2?

阿里云香港轻量应用服务器是什么线路&#xff1f;不是cn2。 阿里云香港轻量服务器是cn2吗&#xff1f;香港轻量服务器不是cn2。阿腾云atengyun.com正好有一台阿里云轻量应用服务器&#xff0c;通过mtr traceroute测试了一下&#xff0c;最后一跳是202.97开头的ip&#xff0c;1…...

python中websockets与主线程传递参数

目录 一、子线程创建websockets服务端接收客户端数据 二、主线程内启动子线程接收并处理数据 一、子线程创建websockets服务端接收客户端数据并存入队列 发送的消息客户端与服务端统一&#xff0c;多种消息加入判断的标签 服务端&#xff1a;web_server.py import asynci…...

js谐音梗创意小游戏《望子成龙》

&#x1f33b; 前言 龙年到来&#xff0c;祥瑞满天。愿您如龙般矫健&#xff0c;事业腾飞&#xff1b;如龙鳞闪耀&#xff0c;生活美满。祝您龙年大吉&#xff0c;万事如意&#xff01; 龙年伊始&#xff0c;我给各位设计了一款原创的小游戏&#xff0c;话不多说&#xff0c;直…...

第十篇:node处理404和服务器错误

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录</...

左右互博。

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 讨厌鬼在和小甜妹在玩石头游戏。 游戏一开始有 nnn 堆石子&#xff0c;第 iii 堆石子&#xff0c;有 aia_iai​ 个石子。两人轮流进行游戏。 轮到某个人时&#xff0c;这个人先选数量为 x(x&…...

android通过广播打印ram使用信息

在内存非常吃紧的情况下&#xff0c;android设备会开始kill部分非系统进程甚至系统进程来保证基本的系统运行。在这种情况下如何获取设备过去某段时间的ram使用情况至关重要。 通过开发者模式中的“内存”可以完美得知设备内存使用信息。 我们可以通过此途径&#xff0c;设计一…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...