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,一经查实,立即删除!

相关文章

Oracle误删除数据文件恢复---惜分飞

有客户通过sftp误删除oracle数据文件,咨询我们是否可以恢复,通过远程上去检查,发现运气不错,数据库还没有crash,通过句柄找到被删除文件 oraclecwgstestdb[testwctdb]/proc/20611/fd$ls -ltr total 0 lr-x------ 1 oracle oinstall 64 Feb 20 14:03 9 -> /oracle/db19c/rdbm…

R语言【raster】——res():获取(或设置)Raster*对象的x和/或y分辨率

Package raster version 3.6-27 Usage xres(x) yres(x) res(x) res(x) <- value Arguments 参数【x】&#xff1a;Raster*对象。 参数【value】&#xff1a;分辨率&#xff08;单个数或两个数的向量&#xff09;。 Value 单个数值或两个数值。 Examples r <- raster…

Python 使用配置文件管理API令牌和实现跨脚本调用

创建一个配置文件&#xff08;例如config.ini&#xff09;&#xff0c;在里面存储你的token。使用Python的configparser模块来读取配置文件。创建一个模块&#xff08;例如api_token.py&#xff09;&#xff0c;它将负责从配置文件读取token&#xff0c;并且该模块可以被其他脚…

Python学习笔记——类(基础知识)

学习编程&#xff0c;无论那种语言&#xff0c;面向对象编程&#xff08;object-oriented programming&#xff0c;OOP&#xff09;是当前最有效最普遍的编写方法之一。类则是面向对象编程的最基础的知识&#xff0c;可以说能够深刻理解类即掌握面向对象编程。 关于编程&#…

docker之安装mongo创建运行环境

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

java序列化之Jackson

当涉及到在Java中进行JSON序列化和反序列化时,Jackson和Gson是两个最常用的库。它们都提供了强大的功能来处理JSON数据,但在某些方面有一些不同之处。 Jackson Jackson 是一个功能强大且灵活的 JSON 处理库,由 FasterXML 维护。以下是 Jackson 的一些特点 强大的功能 Ja…

关于OpenAI的Sora的基本介绍

OpenAI Sora&#xff1a;探索人工智能与区块链技术的融合 随着人工智能&#xff08;AI&#xff09;和区块链技术的日益成熟&#xff0c;OpenAI Sora 应运而生&#xff0c;成为这两大前沿技术融合的典型案例。本文将为您科普OpenAI Sora&#xff0c;探讨其在AI与区块链领域的独…

C#中的`out`关键字

C# 中的 out 关键字是一个用来在方法调用时传递数据的修饰符。它允许你在方法内部创建一个临时的变量&#xff0c;用于接收传递进来的参数值&#xff0c;并在方法执行完毕后&#xff0c;将该变量的值返回给调用方法的对象。out 关键字主要用于那些需要知道方法执行结果的参数上…

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

文章目录 前言 在进入顺序表前&#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…

php7 新特性总结和举例说明

1&#xff0c;标量类型声明和返回值类型声明 在函数参数和返回值中指定期望的数据类型&#xff0c;包括&#xff08;int&#xff0c;float&#xff0c;string&#xff0c;bool&#xff09;。 举例&#xff1a; function addNumbers(int $a, int $b) : int {return $a $b; }va…

Flutter面试之事件分发机制

Flutter中事件分发的主要类:PointerEvent、HitTestResult、HitTestEntry、RenderObject,以及它们之间的关系。 1. PointerEvent PointerEvent是Flutter中所有事件的基类。它包含了事件的类型、位置、时间戳、设备信息等。PointerEvent的子类包括PointerDownEvent、PointerM…

如何修改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;我…

OpenAI Sora文本生成视频注册教程

使用Sora需要确保已经注册了OpenAI账户并升级到ChatGPT Plus&#xff0c;Sora目前仍处于早期访问或测试阶段&#xff0c;还没有进入公测阶段&#xff0c;请耐心关注和等待。 据官方透露的消息&#xff0c;OpenAI近期大概率会宣布将Sora首批开放给Chatgpt Plus用户申请使用。所…

Java中使用Jedis实现Redis的“查找附近的人”功能示例

在Java中&#xff0c;你可以使用Jedis库来与Redis进行交互&#xff0c;实现查找附近的人等功能。以下是一个简单的Java示例&#xff0c;展示了如何使用Jedis来实现这个功能&#xff1a; 首先&#xff0c;确保你已经在项目中添加了Jedis的依赖。如果你使用Maven&#xff0c;可以…

Java中的关键字

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

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

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