编程语言虽然千差万别,但归根结底,设计思想无非是表示信息与处理信息
在Flutter系列之Dart语言概述中已经介绍了Dart如何表示信息,本篇将介绍Dart是如何处理信息的
作为一门真正面向对象的编程语言,Dart将处理信息的过程抽象为了对象,而函数、类与运算符则是抽象中最重要的手段
函数
函数是一段用来独立完成某个功能的代码片段,而Dart中所有类型都是对象类型,函数也不例外,即函数也是对象,它的类型为Function。
void main() {
Function check = isEmptyStr;
printStr('',check);
printStr('Hello World!',check);
}
bool isEmptyStr(String str){//判断字符串是否为null
return str.isEmpty;
}
void printStr(String str,Function check){//用check函数来判断String是否为null
if (check(str)) {
print('$str is null');
}else {
print('$str is not null');
}
}
结果如下
is null
Hello World! is not null
上面代码中,首先定义了一个判断字符串是否为null的函数isEmptyStr,并把它传给了另一个打印输出的函数printStr,即函数也可以被定义为变量,甚至可以作为参数传递给其他函数
日常开发中,经常会遇到一个函数中需要传递多个参数的情况,这种情况下Dart与其他语言如c、c++、java等的做法是不同的
c、c++、java等的做法是提供函数的重载,即函数同名但参数不同,而Dart认为重载会导致混乱,因此不支持重载,而是提供了可选参数和可选命名参数
具体方式为,在申明函数时:
·给参数添加{},以paramName:value的方式指定调用参数,即可选命名参数
·给参数加[],则意味着这些参数可以忽略,即可选参数
不仅如此,在使用这两种方式定义函数时,还可以给参数设置默认值
注意:可选参数和可选命名参数不可一起使用,可选参数和可选命名参数在申明时需放在其他参数后面,且可选命名参数调用时与申明的顺序无关,但可选参数调用时与申明的顺序有关
void main() {
_ptionalNamedParameter('Tom',2,sex:'男');
_ptionalNamedParameter('Tom',2,sex:'男',age:5);
_ptionalNamedParameter('Tom',2);
_ptionalNamedParameter('Tom',2,age:25);
_ptionalNamedParameter('Tom',2,age:18,sex:'女');
_ptionalParameter('Tom',2,'男');
_ptionalParameter('Tom',2,'男',5);
_ptionalParameter('Tom',2);
//_ptionalParameter('Tom',2,25);//错误
//_ptionalParameter('Tom',2,18,'女');//错误
}
bool isNotEmptyStr(String str) {
return str.isNotEmpty;
}
void printStr(String str,Function check){//用check函数来判断String是否为null
if (