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(); //静态类型检查时会报错
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/694704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker之安装mongo创建运行环境

目录 一、docker pull 最新资源 二、启动mongo镜像 启动命令查看日志拉取低版本镜像成功启动 三、进入mongo容器 进入容器进入mongo环境查询当前所在库切换库至admin随意切换库 并 创建用户登录用户新增文档数据等 五、总结 版本兼容可备份操作 一、docker pull 最新资源…

顺序表详解(如何实现顺序表)

文章目录 前言 在进入顺序表前&#xff0c;我们先要明白&#xff0c;数据结构的基本概念。 一、数据结构的基本概念 1.1什么是数据结构 数据结构是由“数据”和“结构”两词组合而来。所谓数据就是&#xff1f;常见的数值1、2、3、4.....、姓名、性别、年龄&#xff0c;等。…

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

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

C# 使用onnxruntime部署夜间雾霾图像的可见度增强

目录 介绍 模型信息 效果 项目 代码 下载 C# Onnx 使用onnxruntime部署夜间雾霾图像的可见度增强 介绍 github地址&#xff1a;GitHub - jinyeying/nighttime_dehaze: [ACMMM2023] "Enhancing Visibility in Nighttime Haze Images Using Guided APSF and Gradien…

如何修改unity的背景颜色

要在Unity中将背景颜色设为黑色&#xff0c;可以按照以下步骤进行&#xff1a; 1、在Unity编辑器中&#xff0c;选择你想要修改背景颜色的摄像机对象&#xff08;一般是Main Camera&#xff09;。 2、在Inspector面板中&#xff0c;找到"Clear Flags"&#xff08;清…

ChatGPT 4.0 升级指南

1.ChatGPT 是什么&#xff1f; ChatGPT 是由 OpenAI 开发的一种基于人工智能的聊天机器人&#xff0c;它基于强大的语言处理模型 GPT&#xff08;Generative Pre-trained Transformer&#xff09;构建。它能够理解人类语言&#xff0c;可以为我们解决实际的问题。 1.模型规模…

计网 - 域名解析的工作流程

文章目录 Pre引言1. DNS是什么2. 域名结构3. 域名解析的工作流程4. 常见的DNS记录类型5. DNS安全6. 未来的发展趋势 Pre 计网 - DNS 域名解析系统 引言 在我们日常使用互联网时&#xff0c;经常会输入各种域名来访问网站、发送电子邮件或连接其他网络服务。然而&#xff0c;我…

Java中的关键字

✨✨ 所属专栏&#xff1a; Java基石&#xff1a;深入探索Java核心基础✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; Java中的关键字是一些具有特殊含义的单词&#xff0c;它们在语法中有特定的用途&#xff0c;不能用作标识符&am…

[力扣 Hot100]Day32 随机链表的复制

题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新…

论文导读 | 因式分解数据库

背景和问题定义 在传统的关系型数据库中&#xff0c;二维表格形式容易造成信息的冗余。如果我们将数据库中的每条元组看成单项式&#xff0c;一个关系型数据库就可以表示成这些单项式的和。通过对多项式的因式分解就能够得到更加紧凑的表示形式。 例如&#xff1a;下图中的表…

【设计模式】01-装饰器模式Decorator

作用&#xff1a;在不修改对象外观和功能的情况下添加或者删除对象功能&#xff0c;即给一个对象动态附加职能 装饰器模式主要包含以下角色。 抽象构件&#xff08;Component&#xff09;角色&#xff1a;定义一个抽象接口以规范准备接收附加责任的对象。具体构件&#xff08…

unity打包apk运行于google手机

第一次打包apk运行于Pixel 7 Pro 一直提示安装包无法安装 untiy版本2020.1.0f1 有两点需要注意 第一 Scrpting Backend 需要选择 IL2CPP 勾选 ARM64 第二 勾选 Custom Main Mainfest 在Assets -> Plugins -> Android文件夹下 AndroidMainfest 中增加android:export…

QT3作业

1 2. 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数&#xff0c;将登录按钮使用t5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#…

iMazing2024Windows和Mac的iOS设备管理软件(可以替代iTunes进行数据备份和管理)

iMazing2024是一款兼容 Windows 和 Mac 的 iOS 设备管理软件&#xff0c;可以替代 iTunes 进行数据备份和管理。以下是一些 iMazing 的主要功能和优点&#xff1a; 数据备份和恢复&#xff1a;iMazing 提供了强大的数据备份和恢复功能&#xff0c;可以备份 iOS 设备上的各种数据…

PWM在STM32中使用指南

什么是PWM? PWM&#xff08;脉冲宽度调制&#xff09;是一种常用来控制模拟电路的技术&#xff0c;通过修改脉冲的宽度&#xff08;即在固定周期内的高电平持续时间&#xff09;来调控输出信号的平均电压。 一个PWM信号主要包括两个部分&#xff1a;一个是占空比&#xff0c;…

四甲基罗丹明-叠氮,5(6)-TAMRA N3,常用的生物标记试剂

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;四甲基罗丹明-叠氮&#xff0c;Tetramethylrhodamine, TMR&#xff0c;5(6)-TAMRA-azide&#xff0c;5(6)-TAMRA N3 一、基本信息 产品简介&#xff1a;5 (6) - TAMRA azide, also known as tetramethylrhodamine a…

智慧安防/视频监控汇聚平台EasyCVR如何通过接口调用获取设备录像回看的流地址?

视频云存储/视频融合/安防监控EasyCVR视频汇聚系统可兼容各品牌的IPC、NVR、移动单兵、智能手持终端、移动执法仪、无人机、布控球等设备的接入&#xff0c;支持的接入协议包括&#xff1a;国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&am…

全流程点云机器学习(二)使用PaddlePaddle进行PointNet的机器学习训练和评估

前言 这不是高支模项目需要嘛&#xff0c;他们用传统算法切那个横杆竖杆流程复杂耗时很长&#xff0c;所以想能不能用机器学习完成这些工作&#xff0c;所以我就来整这个工作了。 基于上文的数据集切分 &#xff0c;现在来对切分好的数据来进行正式的训练。 本系列文章所用的…

使用 Next.js 连接 mysql 数据库

前言 本文主要为大家介绍&#xff0c;如何使用 Next 框架实现一个简单的后端接口&#xff0c;并且从数据库中请求数据返回给前端。 实现 创建api/getData文件夹 项目创建完成后在 app 文件下新建api文件夹&#xff0c;在 api 文件夹下新建 getData 文件夹&#xff0c;在 ge…

IOT-Reaserch安装ghidra以及IDEA和ghidra的配置

Linux research 5.4.0-91-generic #102~18.04.1-Ubuntu SMP Thu Nov 11 14:46:36 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux java --version IOT自带的java是符合要求的&#xff0c;不需要额外下载 iotresearch:~/install-file$ java --version openjdk 11.0.13 2021-10-19 …