Flutter基础 -- Dart 语言 -- 基础类型

目录

0. 配置

1. 变量

1.1 弱类型

var Object dynamic

1.2 强类型

1.3 使用场景

var 简化定义变量

查询参数定义

返回的实例对象

2. 常量 

final 和 const

2.1 相同点

类型声明可以省略

初始后不能再赋值

不能和 var 同时使用

2.2 不同点

const 需要确定的值

不可变性可传递

内存中重复创建

2.3 使用场景

final 成员变量初始

const 全局参数

3. 数值类型

3.1 数值类型

int

double

num

3.2 十进制、十六进制

3.3 科学计数法

3.4 数值转换

3.5 位运算 & | ^

4. 布尔

4.1 bool

4.2 关于assert

4.3 逻辑运算符和关系运算符

5. 字符串

5.01 单引号或者双引号

5.02 字符串模板

5.03 字符串连接

5.04 转义符号

5.05 取消转义

5.06 搜索

5.07 提取数据

5.08 大小写转换

5.09 裁剪 判断空字符串

5.10 替换部分字符

5.11 字符串创建

6. 日期时间

6.1 声明

6.2 创建时间 UTC

6.3 解析时间 IOS 8601(标准)

6.4 时间增减量

6.5 比较时间

6.6 时间差

6.7 时间戳


因为编写 flutter 用的 dart 语言,所以先学 dart。

博主一路学下来发现对有cc基础的还是很方便哈,目前感觉没什么大的区别。

0. 配置

相关推荐:

使用 VSCode 搭建 Flutter 开发环境 - guangzan - 博客园 (cnblogs.com)

1. 变量

1.1 弱类型

var Object dynamic

如果没有初始值,可以变成任何类型

var a;
// var a = ""; // 一旦赋值,就确定类型,不能随意改动
a = 'ducafecat';
a = 123;
a = true;
a = {'key': 'val123'};
a = ['abc'];print(a);

Object 编译阶段检查类型 , dynamic  编译阶段不检查检查类型

比较 var 与 dynamic、Object

唯一区别 var 如果有初始值,类型被锁定

1.2 强类型

声明后,类型被锁定

String a = 'doucafecat';
int i = 123;
double d = 0.12;
bool b = true;
DateTime dt = new DateTime.now();
List l = [ a, i, d, b, dt];

变量声明后默认都是 null

1.3 使用场景

var 简化定义变量

不用明确变量类型

    var map = <String, dynamic>{};map["image"] = image;map["title"] = title;map["desc"] = desc;

这里不用 var ,就要写成 Map<String, dynamic>

查询参数定义

api 查询通用接口封装的时候,我们一般用动态类型

如一个 api 请求

  Future<Response<T>> get<T>(String path, {Map<String, dynamic> queryParameters,...});

Map<String, dynamic>? queryParameters, 查询参数值是动态

返回的实例对象

如分类实例定义

class Category {int id; // 数字 idString name; // 字符串 分类名称String slug;Category({this.id, this.name, this.slug});...
}

int id; String name; 明确类型

2. 常量 

final 和 const

2.1 相同点

类型声明可以省略

final String a = 'ducafecat';
final a = 'ducafecat';const String a = 'ducafecat';
const a = 'ducafecat';

初始后不能再赋值

final a = 'ducafecat';
a = 'abc'; errconst a = 'ducafecat';
a = 'abc'; err

不能和 var 同时使用

final var a = 'ducafecat'; err
const var a = 'ducafecat'; err

2.2 不同点

const 需要确定的值

final dt = DateTime.now(); const dt = const DateTime.now(); err

不可变性可传递

final List ls = [11, 22, 33];
ls[1] = 44;const List ls = [11, 22, 33];
ls[1] = 44; err

内存中重复创建

final a1 = [11 , 22];
final a2 = [11 , 22];
print(identical(a1, a2)); falseconst a1 = [11 , 22];
const a2 = [11 , 22];
print(identical(a1, a2)); true

identical 通过比较两个引用的是否是同一个对象判断是否相等

2.3 使用场景

final 成员变量初始

final定义成员变量,指的是让变量在构造函数的

  // 本地存储keystatic const storageFirstOpen = 'first_open';static const storageLanguageCode = 'language_code';static const storageThemeCode = 'theme_code';static const storageToken = 'token';static const storageProfile = 'profile';

时候都一次性初始化,好处就是就不会遗漏成员变量

const 全局参数

class PlaceholdWidget extends StatelessWidget {final String? assetImagePath;const PlaceholdWidget({Key? key,this.assetImagePath,}) : super(key: key);@overrideWidget build(BuildContext context) {...}
}

3. 数值类型

3.1 数值类型

int

整数值,其取值通常位于 -253 和 253 之间。

double

64-bit (双精度) 浮点数,符合 IEEE 754 标准。

num

int 和 double 都是 num 的子类。

3.2 十进制、十六进制

3.3 科学计数法

num a = 2e3;
print([a]);[2000]

3.4 数值转换

3.5 位运算 & | ^

这些和c是一样的

4. 布尔

4.1 bool

为了代表布尔值,Dart 有一个名字为 bool 的类型。 只有两个对象是布尔类型的:true 和 false 所创建的对象, 这两个对象也都是编译时常量。

bool a; print(a);

只有 true 对象才被认为是 true。 所有其他的值都是 flase(null也是)。

4.2 关于assert

注意: 断言只在检查模式下运行有效,如果在生产模式 运行,则断言不会执行。

4.3 逻辑运算符和关系运算符

&& || ! 和 != == ...都和c一样的

5. 字符串

5.01 单引号或者双引号

赋值

String a = 'ducafecat';
String b = "ducafecat";

区别 转义分隔符

final myString = 'Bob\'s dog';            // Bob's dog
final myString = "a \"quoted\" word";     // a "quoted" wordfinal myString = "Bob's dog";             // Bob's dog
final myString = 'a "quoted" word';       // a "quoted" wordfinal value = '"quoted"';                 // "quoted"
final myString = "a $value word";         // a "quoted" word

区别就是没啥区别....

5.02 字符串模板

当需要插入一个简单的变量时,可以直接在字符串中使用 $ 符号加上变量名。如果插入的是一个更复杂的表达式,则需要使用 ${} 包裹表达式。

var a = 123;
String b = 'ducafecat : ${a}';
print(b);

5.03 字符串连接

var a = 'hello' + ' ' + 'ducafecat';
var a = 'hello'' ''ducafecat';
var a = 'hello'   ' '     'ducafecat';var a = 'hello'
' '
'ducafecat';var a = '''
hello word
this is multi line
''';var a = """
hello word
this is multi line
""";print(a);

可以直接+,也可以+都不要,''' 和 """ 也非常好用

5.04 转义符号

var a = 'hello word \n this is multi line';
print(a);hello wordthis is multi line

5.05 取消转义

var a = r'hello word \n this is multi line';
print(a);hello word \n this is multi line

就是在前面加了一个 r

5.06 搜索

var a = 'web site ducafecat.tech';
print(a.contains('ducafecat'));
print(a.startsWith('web'));
print(a.endsWith('tech'));
print(a.indexOf('site'));true
true
true
4

5.07 提取数据

var a = 'web site ducafecat.tech';
print(a.substring(0,5));
var b = a.split(' ');
print(b.length);
print(b[0]);web s
3
web

这里b[0]=web就可以发现,切分字符串返回的是一个数组

5.08 大小写转换

var a = 'web site ducafecat.tech';
print(a.toLowerCase());
print(a.toUpperCase());web site ducafecat.tech
WEB SITE DUCAFECAT.TECH

5.09 裁剪 判断空字符串

print('    hello word     '.trim());
print(''.isEmpty);hello word
true

5.10 替换部分字符

print('hello word word!'.replaceAll('word', 'ducafecat'));hello ducafecat ducafecat!

5.11 字符串创建

var sb = StringBuffer();
sb..write('hello word!')
..write('my')
..write(' ')
..writeAll(['web', 'site', 'https://ducafecat.tech']);
print(sb.toString());hello word!my websitehttps://ducafecat.tech

6. 日期时间

6.1 声明

当前时间

var now = new DateTime.now();
print(now);2022-05-28 20:04:43.607

指定年月日

var d = new DateTime(2018, 10, 10, 9, 30);
print(d);2018-10-10 09:30:00.000

6.2 创建时间 UTC

创建 utc 时间

var d = new DateTime.utc(2018, 10, 10, 9, 30);
print(d);2018-10-10 09:30:00.000Z

发现后面跟了个Z,也就是0时区的时间

6.3 解析时间 IOS 8601(标准)

var d1 = DateTime.parse('2018-10-10 09:30:30Z');
print(d1);2018-10-10 09:30:30.000Zvar d2 = DateTime.parse('2018-10-10 09:30:30+0800');
print(d2);2018-10-10 01:30:30.000Z

6.4 时间增减量

var d1 = DateTime.now();
print(d1);
print(d1.add(new Duration(minutes: 5)));
print(d1.add(new Duration(minutes: -5)));2022-05-28 22:09:12.805
2022-05-28 22:14:12.805
2022-05-28 22:04:12.805

6.5 比较时间

var d1 = new DateTime(2018, 10, 1);
var d2 = new DateTime(2018, 10, 10);
print(d1.isAfter(d2));
print(d1.isBefore(d2));false
truevar d1 = DateTime.now();
var d2 = d1.add(new Duration(milliseconds: 30));
print(d1.isAtSameMomentAs(d2));false

6.6 时间差

var d1 = new DateTime(2018, 10, 1);
var d2 = new DateTime(2018, 10, 10);
var difference = d1.difference(d2);
print([difference.inDays, difference.inHours]);[-9, -216]

6.7 时间戳

var now = new DateTime.now();
print(now.millisecondsSinceEpoch);
print(now.microsecondsSinceEpoch);1653747090687
1653747090687000

创作不易,希望读者三连支持 💖
赠人玫瑰,手有余香 💖

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

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

相关文章

【Python绘画】画笑脸简笔画

本文收录于 《一起学Python趣味编程》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、代码示例三、知识点梳理四、总结 一、前言 本文介绍如何使用Python的海龟画图工具turtle&#…

fastjson 泛型转换问题(详解)

系列文章目录 附属文章一&#xff1a;fastjson TypeReference 泛型类型&#xff08;详解&#xff09; 文章目录 系列文章目录前言一、代码演示1. 不存在泛型转换2. 存在泛型转换3. 存在泛型集合转换 二、原因分析三、解决方案1. 方案1&#xff1a;重新执行泛型的 json 转换2. …

23种模式之一— — — —适配器模式的详细介绍与讲解

适配器介绍与讲解 一、概念二、适配器模式结构适配器分类核心思想核心角色模式的UML类图应用场景模式优点模式缺点 实例演示图示代码演示运行结果 一、概念 适配器模式&#xff08;别名&#xff1a;包装器&#xff09; 是一种结构型设计模式 将一个类的接口转换成客户希望的另…

每日一练:利用多态思想和ArrayList集合,编写一个模拟KTV点歌系统的程序。【多态思想和ArrayList集合的综合应用】

目录 一、设计程序使用ArrayList集合&#xff0c;编写一个模拟KTV点歌系统的程序。参考代码歌曲类歌单类KTV类测试类运行效果 总结 最后 一、设计程序 使用ArrayList集合&#xff0c;编写一个模拟KTV点歌系统的程序。 要求&#xff1a; 输入0代表添加歌曲输入1代表将所选歌曲…

STM32高级控制定时器之输入捕获模式

目录 概述 1 输入捕获模式 1.1 原理介绍 1.2 实现步骤 1.3 发生输入捕获流程 2 使用STM32Cube配置工程 2.1 软件环境 2.2 配置参数 2.3 生成项目文件 3 功能实现 3.1 PWM调制占空比函数 3.2 应用函数库 4 测试 4.1 功能框图 4.2 运行结果 源代码下载地址&#xf…

MySQL 存储过程(一)

本篇主要介绍MySQL存储过程的相关内容 目录 一、什么是存储过程&#xff1f; 二、基本语法 创建存储过程 调用存储过程 查看存储过程 删除存储过程 三、变量 系统变量 用户自定义变量 局部变量 四、存储过程的参数 in out inout 一、什么是存储过程&#xff1f…

9 个步骤内快速完成 SEO 审核

SEO审计对于提高网站在搜索引擎结果中的性能和可见性至关重要。这种系统评估涉及仔细检查各种元素&#xff0c;从关键字和页面优化到网站结构和页面速度等技术方面。在本指南中&#xff0c;我们将概述执行全面 SEO 检查器的 12 个基本步骤&#xff0c;帮助您确定优势、劣势和改…

基于小波区间相关的信号降噪方法(MATLAB 2021B)

在我们处理信号过程中最重要的任务就是找到信号隐藏的规律和信号的特征。常用的傅里叶分析法只能用于在时间域或者频率域上分析信号&#xff0c;而通常的数据会在时间域和频率域均有特征。而小波分析是继傅里叶分析之后的一大突破性创新&#xff0c;也是近年来在学术界非常热门…

小熊家务帮day5-day7 客户管理模块1 (小程序认证,手机验证码认证,账号密码认证,修改密码,找回密码等)

客户管理模块 1.认证模块1.1 认证方式介绍1.1.1 小程序认证1.1.2 手机验证码登录1.1.3 账号密码认证 1.2 小程序认证1.2.1 小程序申请1.2.2 创建客户后端工程jzo2o-customer1.2.3 开发部署前端1.2.4 小程序认证流程1.2.4.1 customer小程序认证接口设计Controller层Service层调用…

使用import语句导入模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 创建模块后&#xff0c;就可以在其他程序中使用该模块了。要使用模块需要先以模块的形式加载模块中的代码&#xff0c;这可以使用import语句实现。im…

react、vue动态form表单

需求在日常开发中反复写form 是一种低效的开发效率&#xff0c;布局而且还不同这就需要我们对其封装 为了简单明了看懂代码&#xff0c;我这里没有组件&#xff0c;都放在一起&#xff0c;简单抽离相信作为大佬的你&#xff0c;可以自己完成&#xff0c; 一、首先我们做动态f…

外包小菜鸡花了几个w报的课立志进大厂

不知不觉已经毕业了好几年&#xff0c;但是感觉还是自己的年龄增长了而已&#xff0c;对应的技术却没学到&#xff0c;最后一咬牙报了图灵的架构VIP班&#xff0c;不得不说&#xff0c;诸葛老师讲的是真的好呀&#xff0c;大家可以看看他的公开课&#xff0c;希望学完下面这些视…

JVMの内存泄漏内存溢出案例分析

1、内存溢出 内存溢出指的是程序在申请内存时&#xff0c;没有足够的内存可供分配&#xff0c;导致无法满足程序的内存需求&#xff0c;常见的内存溢出情况包括堆内存溢出&#xff08;Heap Overflow&#xff09;和栈溢出&#xff08;Stack Overflow&#xff09;&#xff1a; …

《数字图像处理-OpenCV/Python》第15章:图像分割

《数字图像处理-OpenCV/Python》第15章&#xff1a;图像分割 本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 第15章&#xff1a;图像分割 图像分割是由图像处理到图像分析的关键步骤…

spark的简单学习二

一 spark sql基础 1.1 Dataframe 1.介绍&#xff1a; DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表 格&#xff0c;除了数据以外&#xff0c;还掌握数据的结构信息&#xff0c;即schema。同时&#xff0c;与Hive类似&#xff0c;DataFrame也支 持…

STM32_HAL_I2C_串行接口

电气特性 I2C&#xff08;Inter-Integrated Circuit&#xff09;是一种由飞利浦公司&#xff08;现恩智浦半导体&#xff09;开发的串行通信协议&#xff0c;用于连接低速外围设备。I2C总线只需要两根线&#xff08;SDA&#xff1a;串行数据线&#xff0c;SCL&#xff1a;串行…

免费生物蛋白质的类chatgpt工具助手copilot:小分子、蛋白的折叠、对接等

参考: https://310.ai/copilot 可以通过自然语言对话形式实现小分子、蛋白质的相关处理:生成序列、折叠等 应该是agent技术调用不同工具实现 从UniProt数据库中搜索和加载蛋白质。使用ESM Fold方法折叠蛋白质。使用310.ai基础模型设计新蛋白质。使用TM-Align方法比较蛋白质…

【Spring Cloud】微服务链路跟踪Sleuth

目录 为什么要使用微服务链路跟踪微服务的现状多服务协同工作复杂的调用链条容易出错 微服务链路跟踪需要实现的需求实现监控决策避免技术债务快速定位故障 微服务链路跟踪的技术要求低消耗应用透明延展性可控采样率可视化 Spring Cloud Sleuth简介Spring Cloud Sleuth的4个特点…

Shell脚本快速入门

为什么要学shell&#xff1f;能做什么&#xff1f; 答&#xff1a;CI/CD 持续集成&#xff0c;自动化部署作业方式&#xff0c;需要将一系列linux命令程序化&#xff0c;shell 就能做到&#xff0c;提高运维人员的工作效率。 指定解析器&#xff1a; (1) shell解析器 #…

Linux网络-自定义协议、序列化和反序列化、网络计算服务器的实现和Windows端客户端

文章目录 前言一、自定义协议传结构体对象 序列化和反序列化什么是序列化&#xff1f;反序列化 二、计算器服务端&#xff08;线程池版本&#xff09;1.main.cc2.Socket.hpp3.protocol.hpp4.Calculator.hpp5.serverCal.hpp6.threadPool.hpp7.Task.hpp8. log.hpp 客户端Windows客…