1 前言
前一篇文章我们已经简单介绍了Dart变量的声明以及基本的数据类型。今天我们来进一步学习一下Dart的运算符和函数。
2 主题
Dart中的算术运算符,关系运算符和逻辑运算符与其他语言一样,并没有什么特殊的地方,这里也就不过多的阐述了,我们今天主要看一看Dart中比较有特色的类型判断运算符,条件表达式和级联运算符。
类型判断运算符
类型判断运算符 | 描述 |
---|---|
as | 通常用于子类型向父类型转换 |
is | 判断是否是某个类型,如果是返回true |
is! | 判断是否不是某个类型,如果不是返回true |
int i = 1;
print(i is int); \\返回true
print(i is! int); \\返回false
条件表达式
condition? expr1 : expr2;
如果condition为true返回expr1,否则返回expr2。
var a = 3 - 1 > 0 ? 3 : 1;
print(a); \\ 3
expr1 ?? expr2
如果expr1不为null则返回expr1,否则则返回expr2。
var isNull = null;
var a = isNull ?? 2;
print(a); \\ 2
级联操作符
级联运算符 (…) 可以实现对同一个对像进行一系列的操作。 除了调用函数, 还可以访问同一对象上的字段属性。 这通常可以节省创建临时变量的步骤, 同时编写出更流畅的代码。
class Person{
String name;
String sex;
}
Person person = new Person();
person..name = "Joe"
..sex = "male";
需要注意的是如果返回的是void则不能使用级联操作符
var sb = StringBuffer();
sb.write('foo')
..write('bar'); // Error: 'void' 没哟定义 'write' 函数。
函数
函数的声明
Dart中函数的声明不用很严格,函数的参数类型和返回值类型可以省略。
main() {
sayHello(); //hello
}
sayHello() {
print("hello");
}
可选参数
Dart中函数可以存在可选参数,可选参数就是在函数调用的时候可以传入也可以不传入的参数。可选参数要用[]包含,而且只能放在最后。
main() {
sayHello();
sayHello("world");
}
sayHello([name]) {
if(name != null) {
print("hello $name");
} else {
print("hello");
}
}
默认参数
默认参数就是在函数声明时就已经确定的参数,它是一个编译期常量。通过 = 声明默认参数。而且要用{}。
main() {
function1("John");
}
function1(name, {sex = "man"}) {
print("$name is a $sex");
}
匿名函数
匿名函数顾名思义就是没有函数名的函数,在flutter中匿名函数很常见。形如(){}。()中时函数要传入的参数,{}中是函数体。使用起来很方便,不用先声明然后才能调用。
void main() {
var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
print('${list.indexOf(item)}: $item');
});
箭头函数
如果只有一条语句,可以使用箭头函数更加简洁和方便。
void main() {
var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) => print('${list.indexOf(item)}: $item');
);
函数也是对象
在Dart中函数享有很高的地位,函数也是对象,函数可以作为参数传递。
main() {
function1("John");
}
function1(name, {function = sayHi}) {
function(name);
}
sayHi(name) {
print("Hi, $name");
}
闭包
- 闭包是一个方法
- 闭包定义在方法内部
- 闭包能够访问外部方法的对象且能够持有其状态。
main() {
var func = function1();
func(); // 1
func(); // 2
}
function1() {
int a = 1;
return () => print(a++);
}
最后
如果觉得作者写的还行,点赞就是最大的支持。如果有什么问题,有问必回。更多资料和文章可以关注微信公众号QStack,追寻最纯粹的技术,享受编程的快乐。