Flutter系列教程之(2)——Dart语言快速入门

目录

1.变量与类型

1.1 num类型

1.2 String类型

1.3 Object与Dynamic

1.4 类型判断/转换

1.5 变量和常量

2.方法/函数

3.类、接口、抽象类

3.1 类

3.2 接口

4.集合

4.1 List

4.2 Set

4.3 Map

5.总结


Dart语言的语法和Kotlin、Java有类似之处,这里就通过对比Java和Kotlin来快速入门Dart语言

1.变量与类型

1.1 num类型

基础常见的类型有 num (分为 int double String   bool Dart 语言中的没有 float short long 类型,注意布尔类型为 bool 不是 boolean 

与Java不同,Dart语言中的类型尽管是小写,但是其实是一个类,没有赋值的时候为null,与Java中包装类相同

int b1;
print(b1);//输出为null

Dart特有整除运算符~/,两个int相除并不是得到int类型的数值,而是double类型

print(300 / 100);//输出为3.0
print(6 ~/ 5 );//输出为1

num类型常用的方法:

main() {print(3.141592653.toStringAsFixed(3)); //3.142 保留有效数字print(6.6.floor());//6向下取整print((-6.6).ceil()); //-6 向上取整print(9.9.ceil()); //10 向上取整print(666.6.round()); //667 四舍五入print((-666.6).abs()); // 666.6 取绝对值print(666.6.toInt()); //666 转化成int,这中toInt、toDouble和Kotlin类似print(999.isEven); //false 是否是偶数print(999.isOdd); //true 是否是奇数print(666.6.toString()); //666.6 转化成字符串
}
1.2 String类型

String类型的特性和Kotlin差不多,支持单引号、双引号、三引号以及$字符串模板用法

1.3 Object与Dynamic

和Java一样,Object是所有对象的父类,而Dynamic是一种特殊的类型,主要用于不确定的类型

1.4 类型判断/转换

Dart语言与Kotlin一样,具有类型推导功能

如:

var b = true;//b变量的类型为bool

类型检查(is和is!)和强制类型转换(as)

main() {int number = 100;double distance = 200.5;num age = 18;print(number is num);//trueprint(distance is! int);//trueprint(age as int);//18
}
1.5 变量和常量

Dart中,变量可以使用var关键字,会自动的进行类型推导,如果在使用var定义了一个变量,并没有初始化赋值,这个变量的类型是会随着赋值的类型而改变(dynamic类型的特点)

void main() {var num;num = 123;print(num is int);/truenum ="xx";print(num is String);//truevar t = "xx";t = 123; //IDE会提示错误
}

const和final都是定义常量的关键字,const是编译期就能初始化(相当于Kotlin中的final val,而final是运行期初始化(相当于Kotlin中的val)

2.方法/函数

这里方法其实与Java中非常类似,这里就提及Dart中的方法比较特殊几点

Dart中的方法格式和Java中十分类似,基本格式为

返回值 方法名(参数类型 参数名...)

值得一提的是,返回值并不是必须的(JavaScript的语言特性?),你可以省略不写,但是仍可以使用return返回数值,建议实际开发中不要这样写,你懂得...

当然,如果返回值为空,你可以省事不写或者是定义返回值为void

void main{...
}
//与上面的相同
main{...
}

Dart中可以使用箭头函数,与Java和Kotlin中的lambda方式->很像

main() => print("hello world");

比较特殊的是,Dart中支持参数默认赋值以及命名参数(Kotlin中也有),然后值得一提的是,Dart中并不支持函数重载操作,包括构造函数

普通方法定义:

num sum(int a,int b){print(a+b);
}

特殊定义:

num sum({int a,int b}){print(a);print(b);
}

个人感觉好像是使用了Json对象作为了参数类型,之后调用的时候参数可选,但是得标明参数名

main{sum(a:1);sum(b:2);sum(1,2);//IDE会报错sum(a:1,b:2);
}

上面说了,{}可以看做为是一种Json类型,所以,我们可以将其和普通的类型组合起来构造参数列表

num sum(int c,{int a,int b}){print(a);print(b);
}

3.类、接口、抽象类

3.1 类

与Java和Kotlin一样,Dart也是通过class关键字来定义个类

class Person {var name;//隐藏了默认的无参构造函数Person();
}
//等价于:
class Person {var name;Person();//一般把与类名相同的函数称为主构造函数
}
//等价于
class Person {var name;Person(){}
}class Person {final String name;final int age;Person(this.name, this.age);//显式声明有参主构造函数Person();//编译异常,注意: dart不支持同时重载多个构造函数。
}

在之前提及了构造函数不能被重载的概念,但实际很多情况都是要根据不同的参数列表来实例化一个类对象,不过好在Dart有个命名构造函数的概念,我们可以利用它来实现曲线救国。

class Person {final String name;int age;Person(this.name, this.age);Person.withName(this.name);//通过类名.函数名形式来定义命名构造函数withName。只需要name参数就能创建对象,//如果没有命名构造函数,在其他语言中,我们一般使用函数重载的方式实现。
}main () {var person = Person('mikyou', 18);//通过主构造函数创建对象var personWithName = Person.withName('mikyou');//通过命名构造函数创建对象
}

重定向构造函数:

有时候我们定义了个参数列表比较全的构造方法,并且某些参数是具有默认值,使用的时候可以省略某些参数,这种情况下,我们就可以使用重定向构造函数来达到我们的效果,我们使用:来实现,如:

class Person{String name;int age;Person(this.name,this.age);Person.withName(String name):this(name,18);
}main{var person = Person.withName("小红");//默认小红为18岁
}

Dart中的继承也是使用extends关键字

class Person{String name;int age;//含有默认的构造函数
}
//继承
class Student extends Person{}
3.2 接口

需要注意的是,Dart中并没有接口对应的关键字interface,如果我们想要实现某个接口,得将某个类声明为抽象类,并定义好接口方法,之后通过implements关键字去实现该类的接口方法即可(有点类似实现抽象类的感觉)

abstract class OnClickListener{void onClick();
}class View implements OnClickListener{@overridevoid onClick() {}}

4.集合

4.1 List

Dart中的List和数组有点像,List的初始化方式如下所示:

List<String> colorList = ['red', 'yellow', 'blue', 'green'];//直接使用[]形式初始化       
var colorList = <String> ['red', 'yellow', 'blue', 'green'];  

常用的方法其实挺多的,打个.就可以看到了,这里也就不多提了

遍历方法:

main() {List<String> colorList = ['red', 'yellow', 'blue', 'green'];//for-i遍历       for(var i = 0; i < colorList.length; i++) {//可以使用var或int           print(colorList[i]);               }       //forEach遍历       colorList.forEach((color) => print(color));//forEach的参数为Function. =>使用了箭头函数       //for-in遍历       for(var color in colorList) {print(color);       }       //while+iterator迭代器遍历,类似Java中的iteator       while(colorList.iterator.moveNext()) {           print(colorList.iterator.current);       }   
}
4.2 Set

集合Set和列表List的区别在于 集合中的元素是不能重复 的。所以添加重复的元素时会返回false,表示添加不成功.

main() {       Set<String> colorSet= {'red', 'yellow', 'blue', 'green'};//直接使用{}形式初始化       var colorList = <String> {'red', 'yellow', 'blue', 'green'};   
}

Dart中可使用交、并、补集:

main() {       var colorSet1 = {'red', 'yellow', 'blue', 'green'};       var colorSet2 = {'black', 'yellow', 'blue', 'green', 'white'};     print(colorSet1.intersection(colorSet2));//交集-->输出: {'yellow', 'blue', 'green'}       print(colorSet1.union(colorSet2));//并集--->输出: {'black', 'red', 'yellow', 'blue', 'green', 'white'}       print(colorSet1.difference(colorSet2));//补集--->输出: {'red'}   
}

遍历方式与List一样,这里不多提

4.3 Map

初始化方式:

main() {       Map<String, int> colorMap = {'white': 0xffffffff, 'black':0xff000000};//使用{key:value}形式初始化    var colorMap = <String, int>{'white': 0xffffffff, 'black':0xff000000};   
}

遍历:

main() {       Map<String, int> colorMap = {'white': 0xffffffff, 'black':0xff000000};       //for-each key-value       colorMap.forEach((key, value) => print('color is $key, color value is $value'));   
}

List转为Map:4.4 集合常用操作符

main() {List<String> colorList = ['red', 'yellow', 'blue', 'green'];//forEach箭头函数遍历colorList.forEach((color) => {print(color)});colorList.forEach((color) => print(color)); //箭头函数遍历,如果箭头函数内部只有一个表达式可以省略大括号//map函数的使用,输出以,分隔的字符串print(colorList.map((color) => '$color').join(","));//every函数的使用,判断里面的元素是否都满足条件,返回值为true/falseprint(colorList.every((color) => color == 'red'));//sort函数的使用List<int> numbers = [0, 3, 1, 2, 7, 12, 2, 4];numbers.sort((num1, num2) => num1 - num2); //升序排序numbers.sort((num1, num2) => num2 - num1); //降序排序print(numbers);//where函数使用,相当于Kotlin中的filter操作符,返回符合条件元素的集合print(numbers.where((num) => num > 6));//firstWhere函数的使用,相当于Kotlin中的find操作符,返回符合条件的第一个元素,如果没找到返回nullprint(numbers.firstWhere((num) => num == 5, orElse: () => -1)); //注意: 如果没有找到,执行orElse代码块,可返回一个指定的默认值//singleWhere函数的使用,返回符合条件的第一个元素,如果没找到返回null,但是前提是集合中只有一个符合条件的元素, 否则就会抛出异常print(numbers.singleWhere((num) => num == 4, orElse: () => -1)); //注意: 如果没有找到,执行orElse代码块,可返回一个指定的默认值//take(n)、skip(n)函数的使用,take(n)表示取当前集合前n个元素, skip(n)表示跳过前n个元素,然后取剩余所有的元素print(numbers.take(5).skip(2));//List.from函数的使用,从给定集合中创建一个新的集合,相当于clone一个集合print(List.from(numbers));//expand函数的使用, 将集合一个元素扩展成多个元素或者将多个元素组成二维数组展开成平铺一个一位数组var pair = [[1, 2],[3, 4]];print('flatten list: ${pair.expand((pair) => pair)}');var inputs = [1, 2, 3];print('duplicated list: ${inputs.expand((number) =>[number,number,number])}');
}

5.总结

  1. 函数不能重载
  2. 构造函数不能重载,但可以用命名构造函数来变相实现重载的功能
  3. 方法返回值可以省略,但仍可以使用return返回数值(JS特性)
  4. 函数参数有个特殊的类型{}(Json类型?)
  5. Dart中没有接口,需要使用抽象类来实现接口

 

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

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

相关文章

conda 基本命令

1、查询当前所有的环境 conda env list 2、创建虚拟环境 conda create -n 环境名 [pythonpython版本号] 其中[pythonpython版本号]可以不写 conda create -n test python3.12 我们输入conda env list看到我们的环境创建成功了&#xff0c;但是发现他是创建在我们默认的C盘的…

PythonWeb开发框架—Django之DRF框架的使用详解

1.安装依赖包 pip install djangorestframework 2.配置应用 在settings.py中的INSTALLED_APPS中添加rest_framework应用 3.创建序列化器 序列化器是用来操作models的 第一步&#xff1a;定义models ##models.pyfrom django.db import models# Create your models here.cl…

硬件加速与技术创新双轮驱动:DeepSeek和ChatGPT性能进阶的未来蓝图

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…

让子弹飞的DeepSeek火锅诗和《软件方法》

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 我在知乎上面看到了这样的一个问题&#xff1a;DeepSeek写出过哪些惊艳的诗词&#xff1f; 有一位答主讲了他以《让子弹飞》作为素材让DeepSeek写诗的故事&#xff1a;要有风&#xf…

输入搜索、分组展示选项、下拉选取,el-select 实现:即输入关键字检索,返回分组选项,选取跳转到相应内容页 —— VUE 项目-全局模糊检索

后端数据代码写于下一篇&#xff1a;输入搜索、分组展示选项、下拉选取&#xff0c;全局跳转页&#xff0c;el-select 实现 —— 后端数据处理代码&#xff0c;抛砖引玉展思路 【效果图】&#xff1a;分组展示选项 >【提供界面操作体验】 【录制效果视频展示】&#xff1a…

【Linux】初识进程概念与 fork 函数的应用

Linux相关知识点可以通过点击以下链接进行学习一起加油&#xff01;初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建GDB调试器与Git版本控制工具Linux下进度条冯诺依曼体系与计算机系统架构 进程是操作系统中资源分配和调度的核心单位&#…

【linux】自主shell编写

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;linux笔记仓 目录 01.输出命令行02.获取用户命令字符串03.命令行字符串分割04.执行命令05.细节修改检查是否为内建命令 完整代码&#xff1a; 01.输出命令行 完成对一个shell 的编写&#xff0c;首…

小程序高度问题背景scss

不同的机型&#xff0c;他的比例啥的都会不一样&#xff0c;同样的rpx也会有不同的效果。所以这里选择了取消高度。 <view class"box-border" :style"{padding-top: ${navHeight}px,}"><!-- 已登录 --><view v-if"userStore.userInfo&…

DeepSeek 15天指导手册——从入门到精通 PDF(附下载)

DeepSeek使用教程系列--DeepSeek 15天指导手册——从入门到精通pdf下载&#xff1a; https://pan.baidu.com/s/1PrIo0Xo0h5s6Plcc_smS8w?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/2e8de75027d3 《DeepSeek 15天指导手册——从入门到精通》以系统化学习路径为核心&…

element-ui的组件使用

1. 安装 Element UI&#xff08;在文件夹最上面输入cmd进入dos窗口&#xff0c;然后输入安装指令 npm install element-ui --save&#xff09; 2.在main.js文件全局引入(main.js文件负责 全局注册 )&#xff0c;在该文件注册的所有组件在其他文件都能直接调用&#xff0c;一般…

List的模拟实现(2)

前言 上一节我们讲解了list的基本功能&#xff0c;那么本节我们就结合底层代码来分析list是怎么实现的&#xff0c;那么废话不多说&#xff0c;我们正式进入今天的学习&#xff1a;&#xff09; List的底层结构 我们先来看一下list的底层基本结构&#xff1a; 这里比较奇怪的…

RT-Thread+STM32L475VET6实现红外遥控实验

文章目录 前言一、板载资源介绍二、具体步骤1. 确定红外接收头引脚编号2. 下载infrared软件包3. 配置infrared软件包4. 打开STM32CubeMX进行相关配置4.1 使用外部高速时钟&#xff0c;并修改时钟树4.2 打开定时器16(定时器根据自己需求调整)4.3 打开串口4.4 生成工程 5. 打开HW…

速通HTML

HTML基础 1.快捷键 基于VS Code记录编写过程中常用的快捷键 功能快捷键生成HTML基本骨架!回车保存代码CtrlS在浏览器运行代码AltB注释Ctrl/缩进Tab取消缩进ShiftTab收起侧边栏CtrlB 先保存&#xff0c;再在浏览器运行才能刷新 2.标签 标签作用h1——h6双标签标题标签&#…

WebXR教学 01 基础介绍

什么是WebXR&#xff1f; 定义 XR VR AR Web上使用XR技术的API WebXR 是一组用于在 Web 浏览器中实现虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;应用的技术标准。它由 W3C 的 Immersive Web 工作组开发&#xff0c;旨在提供跨设备的沉浸式体验…

IRI 2016 模型在线版 MATLAB

IRI官网&#xff1a;International Reference Ionosphere IRI-2016在线计算&#xff1a;IRI 2016 | CCMC 官方提供的MATLAB代码需要联网读取IRI网页数据&#xff1a; 下载需要注册账号&#xff0c;没有注册账号的自行注册&#xff0c;下载好后解压是这样的&#xff1a; 下载I…

数据结构系列一:初识集合框架+复杂度

前言 数据结构——是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是计算机专业的基础课程&#xff0c;但也是一门不太容易学好的课&#xff0c;它当中有很多费脑子的东西&#xff0c;之后在学习时&#xff0c;你若碰到了困惑或不解的地方 都是很正常的反应&…

智慧物业平台(springboot小程序论文源码调试讲解)

第4章 系统设计 用户对着浏览器操作&#xff0c;肯定会出现某些不可预料的问题&#xff0c;但是不代表着系统对于用户在浏览器上的操作不进行处理&#xff0c;所以说&#xff0c;要提前考虑可能会出现的问题。 4.1 系统设计思想 系统设计&#xff0c;肯定要把设计的思想进行统…

2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”&#xff0c;又称“盘龙”&#xff0c;是浙闽地区的传统地方民俗文化活动。人们将少则几十条&#xff0c;多则上百条的板凳首尾相连&#xff0c;形成蜿蜒曲折的板凳龙。盘龙时&#xff0c;龙头在前领头&#x…

在PyCharm中集成AI编程助手并嵌入本地部署的DeepSeek-R1模型:打造智能开发新体验

打造智能开发新体验&#xff1a;DeepSeekPycharmollamaCodeGPT 目录 打造智能开发新体验&#xff1a;DeepSeekPycharmollamaCodeGPT前言一、什么是ollama&#xff1f;二、如何使用1.进入ollama官方网站:2.点击下载ollama安装包3.根据默认选项进行安装4.安装成功5.打开命令提示符…

软件测试的基础入门(一)

文章目录 一、什么是软件测试&#xff1f;&#xff08;1&#xff09;生活中的测试案例&#xff08;2&#xff09;代码中的测试示例&#xff08;3&#xff09;软件测试的定义 二、软件测试的重要性三、测试工程师&#xff08;1&#xff09;定义&#xff08;2&#xff09;分类&am…