Flutter 三: Dart

1 数据类型

  • 数字(number) int double

    • 字符串转换成 num int.parse(“1”) double.parse(“1”);
    • double 四舍五入保留两位小数 toStringAsFixed(2) 返回值为string
    • double 直接舍弃小数点后几位的数据 可使用字符串截取的方式
  • 字符串(string)

    • 单引号 双引号 三引号
    • 三引号 可以输出文本格式 比如换行
  • 布尔值(boolean)

  • 列表(list)

    • 一旦定义了 内容的类型 就不可变
    • list内容是常量 添加const
      在这里插入图片描述
  • 集合(set)

在这里插入图片描述

  • 映射(map)
  • 符文(rune)
  • 符号(Symbol)
- 数字(number)  int double-  字符串转换成 num   int.parse("1") double.parse("1");-  double 四舍五入保留两位小数 toStringAsFixed(2) 返回值为string-  double 直接舍弃小数点后几位的数据  可使用字符串截取的方式
//字符串转换成 num  var a = int.parse("1");var b = double.parse("1");print(a);print(b);
//结果
//1
//1.0- 字符串(string)- 单引号 双引号   三引号- 三引号 可以输出文本格式 比如换行 
var a = "aaa""bbb";print(a);a = 'aaa''bbb';print(a);a = '''aaa bbb''';print(a);  
结果
aaabbb
aaabbb
aaa bbb- 列表(list)- 一旦定义了 内容的类型 就不可变-  - list内容是常量  添加const
void main(){var list = [1,2,3];// list = ["1","2","3"]; // Error: A value of type 'String' can't be assigned to a variable of type 'int'.var cars = [ Car("TSLT"),Car("XRB")];print(cars);print(cars[0].name);print(cars[0].drive());var names = const ["TSLT","XRBS"];  //内容不可改变print(names);names[1] = "TSLC"; // Cannot modify an unmodifiable listprint(names);
}
class Car{var name;Car(this.name);bool drive(){print("${name}我着了...");return true;}
}结果[Instance of 'Car', Instance of 'Car']
TSLT
TSLT我着了...
true
[TSLT, XRBS]void main(){var a = {1,"2",3.4,Car(5),true};print(a);a.add("aaa");print(a);var b = Set();b.add(1);b.add("2");b.add(3.4);b.add(Car(5));b.add(true);print(b);// var c = const {1,"2",3.4,Car(5),true}; //  Error:  The element '3.4' does not have a primitive equality.var c = const {1,"你好",true}; //  Error:  The element '3.4' does not have a primitive equality.print(c);
}
结果
{1, 2, 3.4, Instance of 'Car', true}
{1, 2, 3.4, Instance of 'Car', true, aaa}
{1, 2, 3.4, Instance of 'Car', true}
{1, 你好, true}

2 var 关键字

  • var 关键字一旦赋值类型即确定
void main(){var a = 1;var b = "hello";var c = Car();c.drive();print(a.runtimeType);print(b.runtimeType);print(c.runtimeType);
} class Car{void drive(){print("我跑了");}
}

结果

我跑了
int
String
Car

3 dynamic 和 Object

  • Object是Dart所有对象的父类
  • Object和dynamic声明变量 可改变类型
  • dynamic 可使用对象类型的属性和方法 Object声明的对象只能用Object的属性和方法
void main(){Object a;a = "hello";print("a 的类型是 ${a.runtimeType}");a = 1;print("a 的变化后类型是 ${a.runtimeType}");dynamic b;b = 1;print("b 的类型是 ${b.runtimeType}");b = 1.1;print("b 的变化后类型是 ${b.runtimeType}");a = "hello";b = "world";print(b.length);// print(a.length); //报错 The getter 'length' isn't defined for the class 'Object'.
}

结果

a 的类型是 String
a 的变化后类型是 int
b 的类型是 int
b 的变化后类型是 double
5

4 final 和 const

  • const 编译时赋值
  • final 运行时 第一次使用时 赋值
void main(){final a;a = 1;print(a);// const b; // 报错 Error: The const variable 'b' must be initializedconst b = 2;print(b);
}

结果

1
2

5 空安全

void main(){Car? car;print(car?.drive());car = Car();print(car?.drive());
}
class Car{bool drive(){print("我着了...");return true;}
}

运行结果

lib/demo.dart:8:9: Warning: Operand of null-aware operation '?.' has type 'Car' which excludes null.- 'Car' is from 'package:demo/demo.dart' ('lib/demo.dart').print(car?.drive());^
null
我着了...
true

函数 (方法)

  • 不声明返回值的 默认是dynamic
run(){print("我跑了");
}eat(){return "吃撑了";
}void main(){print(run());print(eat());
}

结果

我跑了
null
吃撑了
  • 函数可以作为变量
var run = (){print("我跑了");
};var eat = (){return "吃撑了";
};void main(){print(run());print(eat());
}

结果

我跑了
null
吃撑了
  • 函数可以作为参数
run(String name){print("${name}跑了");
}eat(String name){return "${name}吃撑了";
}see(var seeWho){seeWho("老六");
}void main(){var car  = Car("安妮");car.who(run);see((var name)=>print(name));
}
class Car{var name;Car(this.name);who(var run){run(name);}
}运行结果:
安妮跑了
老六
  • 可变函数
eat(String name,{String? food,int? num}){return "${name}吃${food}撑了${num}份";
}speak(String name,[String? and,String? chat]){return "${name}吃${and}${chat}";
}void main(){print(eat("张三"));print(eat("张三",food: "麻辣烫",num: 10));print(speak("张三"));print(speak("张三","李四"));print(speak("张三","李四","聊天"));
}运行结果:
张三吃null撑了null份
张三吃麻辣烫撑了10份
张三吃nullnull
张三吃李四null
张三吃李四聊天
  • 扩展函数
    • 常用类型转换 / 时间处理 / 或者Widget的扩展(例如padding)
    • 多个扩展函数若已定义 不可重复定义 即函数名不可重复
    • dynamic 不可使用扩展函数
/*** 扩展函数* 格式:* extension 函数名 on 类**/
extension toNum on String{int toInt(){return int.parse(this);}double toDouble(){return double.parse(this);}
}void main(){var a = "12".toInt();print(a);print(a.runtimeType);dynamic b = "12";
}结果:
12
int

在这里插入图片描述

    • 默认构造函数
    • 命名构造函数 Student2.fromJson()

import 'dart:convert';void main(){var student = Student("张三", "三年二班", 18, "2005-12-12 12:12:12");print("student>>${student}");var student1 = Student1("张三", "三年二班", 18, "2005-12-12 12:12:12");print("student1>>${student1}");var student11 = Student1.name("李四");  //命名构造函数print("student11>>${student11}");String jsonString = '{"name": "John","classGrade": "三年二班","birthday": "2005-12-12 12:12:12", "age": 30}';var student2 = Student2.fromJson(jsonString);print(student2.toString());
}class Student{//不添加构造函数  这些属性 会报错  或者可以加上?String name,classGrade;int age;String birthday;Student(this.name, this.classGrade, this.age, this.birthday);Map<String,dynamic> toJson(){return {'name':name,'classGrade':classGrade,'age':age,'birthday':birthday};}@overrideString toString() {return 'Student{name: $name, classGrade: $classGrade, age: $age, birthday: $birthday}';}
}class Student1{//不添加构造函数  这些属性 会报错  或者可以加上?String? name,classGrade;int? age;String? birthday;Student1(this.name, this.classGrade, this.age, this.birthday);Student1.name(this.name);@overrideString toString() {return 'Student1{name: $name, classGrade: $classGrade, age: $age, birthday: $birthday}';}
}class Student2{String name = "",classGrade = "";int age = 0;String birthday = "";//命名构造函数Student2.fromJson(String jsonStr){var json = jsonDecode(jsonStr);print(jsonStr);this.name = json['name'];this.classGrade = json['classGrade'];this.age = json['age'];this.birthday = json['birthday'];}@overrideString toString() {return 'Student2{name: $name, classGrade: $classGrade, age: $age, birthday: $birthday}';}
}运行结果:
student>>Student{name: 张三, classGrade: 三年二班, age: 18, birthday: 2005-12-12 12:12:12}
student1>>Student1{name: 张三, classGrade: 三年二班, age: 18, birthday: 2005-12-12 12:12:12}
student11>>Student1{name: 李四, classGrade: null, age: null, birthday: null}
{"name": "John","classGrade": "三年二班","birthday": "2005-12-12 12:12:12", "age": 30}
Student2{name: John, classGrade: 三年二班, age: 30, birthday: 2005-12-12 12:12:12}

在这里插入图片描述
在这里插入图片描述

  • 常量构造函数
    • 常量构造函数 const修饰构造函数
    • 常量构造函数用const 修饰时 属性值一样 则对象相等
import 'dart:convert';class Student{String name;int age;Student(this.name, this.age);
}class Student1{final String name;final int age;const Student1(this.name, this.age);
}void main(){var student = Student("张三",18);var student0 = Student("张三",18);print(student.hashCode);print(student0.hashCode);print(student == student0);print("\n");var student1 = const Student1("张三",18);var student11 = const Student1("张三",18);var student12 = const Student1("张三",19);print(student1.hashCode);print(student11.hashCode);print(student12.hashCode);print(student1 == student11);  //trueprint(student12 == student11); //false}结果:
333142976
1033297191
false87118132
87118132
590927718
true
false
  • 工厂构造函数

import 'dart:convert';class Student{String? name;int? age;Student.init({String name ="",int age = 0}){this.name = name;this.age = age;}static Student instance = Student.init();factory Student(){return instance;}}void main(){var student = Student.instance;var student1 = Student.instance;print(student.hashCode);print(student1.hashCode);
}结果:
11925193
11925193
    • 默认属性方法修饰符是public
    • _下划线表示私有
    • 单继承 多实现
      在这里插入图片描述
class A{void printA(){print("A");}
}class B{void printA(){print("B");}
}abstract class M{void printM(){print("M");}
}abstract class N{void printN(){print("N");}
}interface class X{void printX(){print("X");}
}interface class Y{void printY(){print("Y");}
}
//单继承 多实现
class C extends A implements M,N,X,Y{@overridevoid printM() {// TODO: implement printM}@overridevoid printN() {// TODO: implement printN}@overridevoid printX() {// TODO: implement printX}@overridevoid printY() {// TODO: implement printY}}
  • 类的混入
mixin class P{void printP(){print("P");}
}mixin class Q{void printQ(){print("Q");}
}class D with P,Q{void printD(){print("D");}
}void main(){var d = D();d.printD();d.printP();d.printQ();
}结果:
D
P
Q

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

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

相关文章

云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目录 前言&#xff1a;一、云计算1.1 云计算的基本思想1.2 云计算概述——什么是云计算&#xff1f;1.3 云计算的基本特征1.4 云计算的部署模式1.5 云服务1.6 云计算的关键技术——虚拟化技术1.6.1 虚拟化的好处1.6.2 虚拟化技术的应用——12306使用阿里云避免了高峰期的崩…

Unity 人物方向旋转详细讲解

Unity 人物方向旋转详细讲解 人物的旋转有很多种一、在介绍之前我们需要理解Unity的向量也就是Vector3二、下面我们创建两个小球f1,f2左边的为f2 右边的为f1 三、我们将小球坐标用白色直线画出来&#xff0c;两个小球之间用黑色线画出来&#xff0c;两个小球的向量用黄线表示接…

关于JVM的垃圾回收GC的一些记录

目录 一、JVM内存区域划分 二、从一个基本问题开始引入垃圾回收 三、GC作用的区域 三、如何确定一个对象是否可以被当成垃圾进行回收 &#xff08;1&#xff09;引用计数法 &#xff08;2&#xff09;可达性分析算法 &#xff08;3&#xff09;引用的类型 &#xff08;3…

(Matlab)基于CNN-LSTM的多维时序回归预测(卷积神经网络-长短期记忆网络)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、代码实际运行结果展示&#xff1a; 三、部分代码展示&#xff1a; 四、本文完整代码数据下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码…

【Kubernetes】控制器Statefulset

Statefulset控制器 一、概念二、Statefulset资源清单文件编写技巧2.1、查看定义Statefulset资源需要的字段2.2、查看statefulset.spec字段如何定义2.3、查看statefulset的spec.template字段如何定义 三、Statefulset使用案例&#xff1a;部署web站点3.1、编写一个Statefulset资…

【四】记一次关于架构设计从0到1的讨论

记一次关于架构设计从0到1的讨论 简介&#xff1a; 在一次面试中和面试官讨论起来架构设计这个话题&#xff0c;一聊就不知不觉一个小时了&#xff0c;感觉意犹未尽。现在回想起来感觉挺有意思的&#xff0c;古人说独学而无友则孤陋而寡闻&#xff0c;的确是这样的&#xff0c…

【并发编程篇】读锁readLock()和写锁writeLock()

文章目录 &#x1f6f8;情景引入⭐解决问题 readLock()和writeLock()都是ReadWriteLock接口中定义的方法&#xff0c;用于获取读锁和写锁。 readLock()方法返回一个读锁&#xff0c;允许多个线程同时获取该锁&#xff0c;以进行并发读取操作。如果当前已有一个写锁或其他线程正…

HDFS NFS Gateway(环境配置,超级详细!!)

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f618;《CTF专栏》超级详细的解析&#xff0c;宝宝级教学让你从蹒跚学步到健步如飞&#x1f648; &#x1f60e;《大数据专栏》大数据从0到秃头&#x1f47d;&…

云原生之深入解析基于FunctionGraph在Serverless领域的FinOps的探索和实践

一、背景 Serverless 精确到毫秒级的按用付费模式使得用户不再需要为资源的空闲时间付费。然而&#xff0c;对于给定的某个应用函数&#xff0c;由于影响其计费成本的因素并不唯一&#xff0c;使得用户对函数运行期间的总计费进行精确的事先估计变成了一项困难的工作。以传统云…

免费福利马上截止!深圳的户外小伙伴别错过!COSP2024体育展来了

COSP2024户外博览会 展会时间&#xff1a;2024年3月14-16日 展会地址&#xff1a;深圳福田会展中心 户外运动爱好者不可错过&#xff01; COSP2024户外博览会不仅可以逛展 看各种露营装备、户外器材 还有各种沙龙、峰会活动 就在明年开年&#xff0c;阳春三月天&#xf…

解决 MATLAB 遗传算法中 exitflg=4 的问题

一、优化问题简介 以求解下述优化问题为例&#xff1a; P 1 : min ⁡ p ∑ k 1 K p k s . t . { ∑ k 1 K R k r e q l o g ( 1 α k ∗ p k ) ≤ B b s , ∀ k ∈ K p k ≥ 0 , ∀ k ∈ K \begin{align} {P_1:}&\mathop{\min}_{\bm{p}}{ \sum\limits_{k1}^K p_k } \no…

微信小程序开发学习(上强度):从0开始写项目

前置知识 1、配置插件 微信小程序 基础模板引入sass的两种方法_微信小程序使用sass-CSDN博客 之后在对应页面里新建一个scss文件&#xff0c;写css 2、注册小程序&#xff0c;有个自己的appid&#xff0c;不用测试号了 5.1.注册小程序账号获取appid及个人和企业版差异_哔哩…

MATLAB学习笔记(一)求解三阶微分方程

一、求解三阶微分方程 对于多变量三阶微分方程求解问题&#xff0c;这里介绍一种求解方法。 例题如下&#xff1a; 对于以上方程&#xff0c;给定边界条件&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;。求解和的表达式。 二、解题步骤 &#xff08;1&…

【扩散模型】7、GLIDE | 文本指引的图像生成和编辑

论文&#xff1a;GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models 代码&#xff1a;https://link.zhihu.com/?targethttps%3A//github.com/openai/glide-text2im 出处&#xff1a;OpenAI 一、背景 在扩散模型经过了一系列…

【论文解读】CNN-Based Fast HEVC Quantization Parameter Mode Decision

时间&#xff1a;2019 年 级别&#xff1a;SCI 机构&#xff1a;南京信息工程大学 摘要 随着多媒体呈现技术、图像采集技术和互联网行业的发展&#xff0c;远程通信的方式已经从以前的书信、音频转变为现在的音频/视频。和 视频在工作、学习和娱乐中的比例不断提高&#xff0…

微服务-springcloud(eureka实践, nacos实践)

Spring 体系图 版本关系 eureka 实践 1 父工程依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.14</version> </parent> <dependencyManage…

SD卡写保护怎么解除?这3个方法很实用!

“我的sd卡用了很久了&#xff0c;一直都可以正常使用的&#xff0c;但是最近不知道为什么&#xff0c;突然就显示sd卡写保护了。我无法存入任何数据&#xff0c;请问有什么方法可以解决该问题吗&#xff1f;” SD卡是一种常见的存储设备&#xff0c;被广泛应用于手机、相机、平…

为什么react call api in cDidMount

为什么react call api in cDM 首先&#xff0c;放到constructor或者cWillMount不是语法错误 参考1 参考2 根据上2个参考&#xff0c;总结为&#xff1a; 1、官网就是这么建议的&#xff1a; 2、17版本后的react 由于fiber的出现导致 cWM 会调用多次&#xff01; cWM 方法已…

05-垃圾收集器ParNewCMS与底层三色标记算法详解

文章目录 垃圾收集算法分代收集理论标记-复制算法标记-清除算法标记-整理算法 垃圾收集器Serial收集器Parallel Scavenge收集器ParNew收集器CMS收集器 CMS的相关核心参数亿级流量电商系统如何优化JVM参数设置(ParNewCMS) 垃圾收集底层算法实现三色标记多标-浮动垃圾漏标-读写屏…

模式识别与机器学习(八):决策树

1.原理 决策树&#xff08;Decision Tree&#xff09;&#xff0c;它是一种以树形数据结构来展示决策规则和分类结果的模型&#xff0c;作为一种归纳学习算法&#xff0c;其重点是将看似无序、杂乱的已知数据&#xff0c;通过某种技术手段将它们转化成可以预测未知数据的树状模…