Flutter(三)——一篇文章掌握Dart语言的用法(一)

简介: Flutter(三)——一篇文章掌握Dart语言的用法(一)

Hello World


作为重新认识新语言的常规套路,每个程序员都不可避免的需要经历Hello World的历练,今天学习Dart语言也不例外,所以我们先来用Dart语言,输出Hello World:

void main(){
  print("Hello World")
}


比较与Java语言来说,Dart语言输出Hello World要简练许多,当然还是比Python的代码要多一点,你可以将这段程序用文本文件输入后, 将txt后缀改成dart后缀,然后在命令行中输入"dart 文件名",就可以打印出来了,如下图所示:


变量与常量


变量

Dart语言在声明变量的时候与JavaScript一致,都是通过var关键字定义,然后可以接着给这个变量设置不同的值,默认为null。


这里博主有必要强调一点,Dart语言是一门强类型语言,在第一次赋值的时候,如果已经确定了字符串类型,则不能更改为其他类型,这一点与JavaScript弱类型语言不一样,如果你是从JavaScript转过来,需要额外的注意,当然Dart第一次赋值为其他类型是可以变更的。


常量

对于已经学习过其他各种语言的小伙伴来说,这里算是非常基础的知识,一般的就不介绍了,我们直接来看代码:

//这里声明的是一个变量
var num;
num=11;
print("小明的年龄是 $num 岁");
//开始声明不是字符串,可以变更类型
num='20';
print(num);
//这里定义了一个常量,只能被赋值一次,与Java语言一致
final c=30;
print(c);
const d=50;
print(d);


在这里,我们可以看到,用了const定义了d,那么const与final有什么不同?


在Dart语言中,const变量是一个编译时常量,可以理解为const变量是一个隐式的final,但实例变量可以是final,不能是const。而且常量如果是类级别的,可以使用static const,例如:static const PI=3.1415。


内置类型

Dart语言内置了一些类型,具体如下:


(1)Number(数值型)


(2)String(字符串)


(3)Boolean(布尔型)


(4)List(列表)


(5)Map(键值对)


(6)Runes(符号字符)


(7)Symbols(标识符)


Number(数值型)

在Dart语言中,数值型分为整形int与浮点型double,可以用num,int,double声明使用。我们直接来看一段代码:

num a=10
a=10.2


可以看到,用num声明的变量也是int类型,而且可以修改为double类型,那么这里就有一个灵魂拷问了,反过来,把double类型改为int型可以吗?


答案是不可以,看一下源码我们就很好理解了,源码如下:

abstract class int extends num
abstract class double extends num


数值型运算


这里博主列举了常用的三种数值型运算操作:


(1)运算符:+,-,*,/,~/,%(加,减,乘,除,取整,取余)


(2)常用属性:isNaN,isEven,isOdd等


(3)常用方法:round(),floor(),ceil(),toInt(),toDouble(),abs()


这里需要注意的是,在Dart2.0中,如果我们声明的变量是double类型,但值是int型的,会自动转换为double类型,当然也可以通过toDouble()方法进行转换。


String(字符串)

在这篇博文开头,我们已经打印出来字符串Hello World,那么在Dart语言中,有哪几种创建的方式?


(1)直接使用单引号,双引号创建字符串


(2)使用三个引号或双引用创建多行字符串


(3)使用r创建原始raw字符串


字符串运算


(1)运算符:+,*,==,[]


(2)插值表达式:${expression}


(3)常用属性:length,isEmpty,isNotEmpty


(4)常用方法:contains(),subString(),startWith(),endsWith(),indexOf(),lastIndexOf(),toLowerCase(),toUpperCase(),trim(),trimLeft(),trimRight(),split(),replaceAll()


这里不需要死记硬背,大多数方法都是Java中都有的,而剩下的如果不会用,编译器也会提示你它的详细用法,所以这里博主就不再赘述。


特别注意:但是,这里还是与一点需要注意的,如果单引号嵌套单引号,或者双引号嵌套双引号需要加反斜杠进行转义


Boolean(布尔型)

在Dart语言中,布尔类型常用的地方也是在if条件中判断,Dart语言中布尔类型有四个特点:


(1)使用bool表示布尔类型


(2)布尔类型只有true和false二个值


(3)布尔值是编译时的常量


(4)可以在debug模式下,通过assert断言函数判断布尔值,如果不为真,会引发异常并终止程序往下运行,在开发的时候这点非常有用。


List(列表)

在Dart语言中,List表示集合,但其实与数组是同一个概念,使用的方式如下:


//创建List
var list=[1,2,3];
//通过构造方法创建
var list=new List();
//创建一个不可变的List
var list=const[1,2,3]


在实际的使用过程中,我们除了要创建List数组以外,还需要学会如何使用它,获取或者修改它的值,操作的代码如下:

list[0]=55;

在Dart语言中,List的常用的方法有这些:length(),add(),insert(),remove(),clear(),indexOf(),lastIndexOf(),sort(),sublist(),asMap(),forEach(),shuffle(),这里面有些很好理解,与Java的差不多,我们特别看看下面几个方法,使用代码如下:

var list=['one','two','three'];
print(list.indexOf('one'));//获取元素所在位置索引
print(list.sublist(2));//去除前两个元素返回新的List
print(list.shuffle());//打乱List元素的顺序


Map(键值对)

在Dart语言中,Map与Java中的Map类似,都是以键值对的形式存储数据,键和值可以是任何类型的对象,每个键只能出现一次,我们来看看它的声明代码:

//第一种声明方式
Map map={'book':'zhangyue','yellow':'blue'};
//第二种声明方式
Map map=new Map();
map['book']='zhangyue';


同样创建一个不可变的Map,只要和上面List一样加上const就行了:

Map map=const{'book':'zhangyue','yellow':'blue'};

flutter中,我们还需要使用到两个方法,代码如下:

map.remove('book');//把key为book的元素溢出掉
map.clear();//清空整个Map集合


dynamic和Object

在Dart语言中,一切皆是对象,而且这些对象的父类都是Object。当没有明确类型时,编译的时候会根据值明确类型,例如:

var name='Liyuanjing';
Object name1='Liyuanjing';
dynamic name2='Liyuanjing';


以上三种写法都没有问题,但是Dart语言不建议我们这么做。我们在实际的开发中,我们应尽量为变量确定一个类型,这样可以提高安全性,加快程序的运行速度,如果不指定类型,则在debug模式下类型会是动态的,所以博主推荐定义字符串要这样:

String name='Liyuanjing';

上面我们还使用了dynamic,这个定义是告诉编译器,代码变量不用做类型检测,并且知道写代码的人知道自己在做什么,我们先来看一段代码:

dynamic obj='李元静';
obj['name']=27;

这段代码编译时可以通过,但会抛出“NoSuchMethodError”异常,为了运行的时候对类型进行检测,我们可以使用as和is关键字,代码如下:


dynamic obj=<String,int>{};
if(obj is Map<String,int>){
  obj['name']='Liyuanjing';
}
var map=obj as Map<String,int>;


相关文章
|
11天前
|
Dart 前端开发 开发者
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析
【4月更文挑战第30天】Dart是Google为Flutter框架打造的高效编程语言,具有易学性、接口、混入、抽象类等特性。本文概述了Dart的基础语法,包括静态类型(如int、String)、控制流程(条件、循环)、函数、面向对象(类与对象)和异常处理。此外,还介绍了库导入与模块使用,帮助开发者快速入门Flutter开发。通过学习Dart,开发者能创建高性能的应用。
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析
|
12天前
|
Dart 测试技术 UED
Dart 和 Flutter 错误处理指南 | 最佳实践全解析
深入探索 Dart 和 Flutter 中的错误处理技术,从编译时错误到运行时异常,带你学习如何优雅地处理应用程序中的各种意外情况。了解最佳实践,让你的应用程序稳如磐石,用户体验持续优化!
Dart 和 Flutter 错误处理指南 | 最佳实践全解析
|
15天前
|
存储 缓存 开发框架
Flutter的网络请求:使用Dart进行HTTP请求的技术详解
【4月更文挑战第26天】了解Flutter网络请求,本文详述使用Dart进行HTTP请求
|
15天前
|
开发框架 Dart Java
Flutter的核心:Dart语言基础——语法与特性深度解析
【4月更文挑战第26天】Flutter框架背后的Dart语言,以其简洁的语法和独特特性深受开发者喜爱。本文深入解析Dart的语法与特性,如类型推导、动态静态类型系统、统一的类接口、访问权限控制以及并发编程支持。了解并掌握Dart,能助开发者更高效地利用Flutter构建高性能移动应用。
|
3月前
|
Dart JavaScript
Flutter - Dart 基础(数据类型)
【2月更文挑战第3天】
71 1
|
3月前
|
Dart JavaScript 安全
|
3月前
|
Dart Shell 开发工具
解决windows安装Flutter时出现Unknown operating system. Cannot install Dart SDK.问题
解决windows安装Flutter时出现Unknown operating system. Cannot install Dart SDK.问题
|
4月前
|
JSON Dart 算法
Dart/Flutter工具模块:the_utils
Dart/Flutter工具模块:the_utils
48 0
|
存储 Dart
[Flutter]足够入门的Dart语言系列之常见运算符或操作符
Dart中的运算符提供对数据操作和处理的能力,其中的算术运算符、逻辑运算符非常符合现实中的使用情况,其他不同的运算符则有着自己的操作逻辑...
465 0
[Flutter]足够入门的Dart语言系列之常见运算符或操作符
|
存储 缓存 Dart
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
类和成员的可见性,这在基于库或包的开发中非常重要,Dart中提供了工厂构造函数,可以方便的实现单例、缓存实例对象、返回子类等,以及常量构造函数的使用......
247 0
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解