开发者社区> ws5ztcvob2aao> 正文

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

简介: Flutter(三)——一篇文章掌握Dart语言的用法(一)
+关注继续查看
福利推荐:阿里云、腾讯云、华为云等大品牌云产品全线2折优惠活动来袭,4核8G云服务器899元/3年,新老用户共享优惠,点击这里立即抢购>>>

Hello World


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

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


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

image


变量与常量


变量

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>;


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
flutter系列之:Navigator的高级用法
上篇文章我们讲到了flutter中navigator的基本用法,我们可以使用它的push和pop方法来进行Router之间的跳转。 在flutter中一个Router就是一个widget,但是在Android中,一个Router就是Activity,在IOS中,一个Router是一个ViewController。 Router除了之前讲过的push和pop方法之外,还有一些更加高级的用法,一起来看看吧。
8590 0
flutter系列之:flutter中listview的高级用法
一般情况下,我们使用Listview的方式是构建要展示的item,然后将这些item传入ListView的构造函数即可,通常情况下这样做是够用了,但是不排除我们会有一些其他的特殊需求。 今天我们会来讲解一下ListView的一些高级用法。
21 0
Flutter(三)——一篇文章掌握Dart语言的用法(三)
Flutter(三)——一篇文章掌握Dart语言的用法(三)
82 0
Flutter(三)——一篇文章掌握Dart语言的用法(二)
Flutter(三)——一篇文章掌握Dart语言的用法(二)
88 0
[Flutter]足够入门的Dart语言系列之面向对象:类之间的6大关系
无论是面向对象编程,还是面向过程、函数式编程,代码与代码之间的组织关系都是最重要的。通过代码的编写、代码间的相互调用、不同代码的合理使用、集合不同的数据和方法,才能...
62 0
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
类和成员的可见性,这在基于库或包的开发中非常重要,Dart中提供了工厂构造函数,可以方便的实现单例、缓存实例对象、返回子类等,以及常量构造函数的使用......
47 0
[Flutter]足够入门的Dart语言系列之面向对象:类的定义详解、成员和实例使用
类表示的是分类,一类问题或事物,它是对具体或现实世界的抽象。比如动物类、犬科动物类、猫科动物类、房子类、数学类,类是具体事物的描述,它不是指具体的某个动物、某栋房子、某个数学题,而是对它们的概括...
57 0
[Flutter]足够入门的Dart语言系列之函数:匿名函数、作用域闭包、类型别名和内联函数类型
函数在Dart中是对象,因此,可以将函数作为参数传递给另一个函数、作为一个'值'赋值给一个变量。下面主要介绍匿名函数、内联函数类型的使用,以及了解下作用域和闭包...
122 0
[Flutter]足够入门的Dart语言系列之函数:函数定义、调用、5种参数类型和main函数
函数(Function)也被称为方法(Method)。其最直观的理解就是数据中的函数,比如y=f(x),在编程中,f对输入x进行处理,返回结果y,就是一个函数......
130 0
[Flutter]足够入门的Dart语言系列之常见运算符或操作符
Dart中的运算符提供对数据操作和处理的能力,其中的算术运算符、逻辑运算符非常符合现实中的使用情况,其他不同的运算符则有着自己的操作逻辑...
85 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Flutter企业级应用开发实战手册
立即下载
Flutter技术解析与实战
立即下载
Flutter in action
立即下载


http://www.vxiaotou.com