函数
函数声明
- 指定返回值,函数名
void test1() {
print('aaa');
}
- 不指定返回值 参数
test2(num a) {
print('bb $a');
}
- 不指定返回值
test3(String c) {
print(c + c);
}
- 如果函数体只有一个表达式,可以用箭头函数形式
test4(int d) => print(d);
- 箭头函数返回一个值
test5(int e) => e + 5;
- 参数
参数分为必要参数和可选参数,可选参数必须在参数列表最后。
可选参数
可选参数分为可选位置参数和可选 命名参数
二者都可以定义默认值,但是默认值必须编译时是常量
可选命名参数
void test6() {
test7(a: true, b: 3); //指定可选参数名字进行传智,可以不全传值 c 是常量 这里输出为 3 ccc
}
- 可选参数声明
使用{}包含参数
使用冒号来设置默认值
不设置默认值又不传值,则值为null 如果c 没有设置默认值,则c默认为null
void test7({bool a, int b, String c: 'ccc'}) {
if (a) {
print(b);
print(c);
} else {
print(b * b);
}
}
- 可选位置参数声明
- 使用[] 包含参数,放在参数列表最后
- 可放多个参数
- 可设置默认值
String test8(String from, String msg, [String device, bool sex = true]) {
var result = '$from says $msg';
if (device != null) {
result = '$result with a $device $sex';
;
}
return result;
}
void test9() {
//调用时, 可选参数的位置和类型要与申明时一致
String result = test8('aa', 'bb');
print(result); //aa says bb
String result1 = test8('cc', 'dd','iPhone');
print(result1); //cc says dd with a iPhone true
}
- 把函数当参数传递
void test10(){
//将函数传递进去
test11(test12, 3);
}
// 参数中有个类型为函数的参数
void test11(Function f,int p){
f(p);
}
//定义一个函数
void test12( int a){
print(a);
}
- 把函数赋值给变量
void test13(){
var result = test14; //将函数赋值给变量
result(5);
}
void test14( int a){
print(a * a); //25
}
- 所有函数都有返回值,如果没有显示返回,则默认返回null
void test15(){
var result = test16('test16');
print(result);
}
test16(String a){
print(a); //null
}
- typedef
- 在Dart中一切皆对象,那么函数也是对象,既然是对象,那么必然有其类。所有的类继承Object,而函数的类是Function,但是Function并不能描述一个具体的函数信息:比如返回值,参数个数和参数类型
- typdef 就是为一个具体的函数信息声明其类型 ,如一个方法
int sum(int a, int b){
return a + b ;
}
- 返回值为int ,两个参数a、b ,参数类型 int. 那么所有符合该特点的函数,都是该类型的对象,都可以在将函数当做参数时使用该类型
typedef int FunctionType(int a, int b);
int compute(FunctionType fun, a,b){
return fun(a, b);
}
int sub(int a, int b){
return a-b;
}
//特殊函数,是程序的入口
void main(List<String> args) {
test1(); //aaa
test2(2); //bb 2
test3('cc'); //cccc
test4(4); //4
print(test5(5));
test6();
test9();
test10();
test13();
int sumNum = compute(sum,3,4);
int subNum = compute(sub,10, 2);
print(sumNum); //7
print(subNum); //8
}
网友评论