运算符
(1)三目运算符
在上面类型介绍中,我们已经介绍了一些运算符,这里我们介绍上面没有提及的运算符,以及一些要注意的事项,首先,就是Dart语言的三目运算符,这个相当的重要,经常与flutter中的state状态管理结合使用,来判断组件的状态,用法如下:
expr1 ?? expr2//如果expr1非空,则返回expr1,否则返回expr2
我们在来看一个与Java类似的用法:
int a=20; var va1=a>10 ? a : 0;
(2)~/
细心的读者,应该看到博文上面提到了一个~/运算符,这个是返回一个整数结果,取商,使用方式如下:
var va1=12~/7; print(va1);//打印出来的是1
(3)级联操作符
这个有点类似一些语言的链式调用,使用过Java和JavaScript应该见的非常多,使用方式如下:
String str=(new StringBuffer() ..write('Li ') ..write('Yuan ') ..write('Jing').toString()); print(str);//会打印除Li Yuan Jing
(4)as,is和is!
as:判断属于某种类型
is:如果对象具有指定类型,则为True
is!:如果对象具有指定类型,则为False
异常捕获
要说Dart语言有什么特殊的强大功能,我想捕获异常真的是非常的好用,比Java还要强大,我们先来看一段代码:
throw Exception('我是异常');
我们不仅仅需要抛出异常,还要捕获异常,所以在Dart语言中,捕获异常的详细代码如下:
try{ //捕获特定类型异常 }on AuthorizationException catch(e){ //捕获特定类型异常,但不要这个对象 }on Exception{ //捕获所有异常 }catch(e){ //.... }finally{ //.... }
函数Function
Dart语言是一门面向对象语言,所以函数也是对象,并且函数的类型是Function。这点和JavaScript非常相似。在JavaScript里面Function是可以作为参数传递的,在Flutter里面,也不例外,即函数可以分配给变量或作为参数传递给其他函数,定义函数的代码如下:
bool getName(name){ return name; }
main函数
没有应用程序都必须有一个顶层main函数,作为程序的入口,这一点和Java一样,它是应用程序的入口点。该函数返回void并具有List的可选参数。第二篇我们讲解过源码,入口函数就是这样:
void main()=>runApp(MyApp());
可选参数与必传递参数
定义可选参数的函数,顾名思义,就是不传这些参数也可以调用函数,例如:
void getName({String name,int age}){ }
这里可以传递一个,也可以传递二个,也可以一个都不传递。那么必传递该怎么写呢?我们直接上代码:
void getName({@required String name,@required int age}){ }
必传参数用@required修饰,在Dart语言中,使用@required有利于静态代码分析器进行检查。
可选的位置参数
一个函数里面即包含可选参数,也包含必选参数,我们需要这样写:
void getName({String name,int age,[String school]}){ if(school!=null){ print('学校是$school'); } }
默认参数
默认参数是编译时的常量,在函数的参数后面,使用“=”为参数赋值,这个有一点像JavaScript里的ES6特性,例如:
void getName({String name='李元静',int age=27}){ }
函数作为参数传递
既然我们开头提到了函数可以作为参数传递,我们不妨直接上代码理解:
void getName(String name){ print(name); } var names=['小静','小尧','小帆']; names.forEach(getName);
函数作为变量
函数也可以直接赋值给一个变量,并且把这个变量作为函数来调用,代码如下:
var printName=(name){ print(name); }; printName('Li YuanJing');