接着学习dart的函数。windows
一、函数Function函数
dart是一种真正的面向对象的语言,一般一个函数也是Function类型的对象,这也就是说能够把函数赋值给一个变量,或者做为另外一个函数的入参进行传递。学习
咱们直接来看一个简单的函数例子吧:spa
//定义一个函数,名字叫testFunc,,参数有两个int,返回值也是int int testFunc(int a, int b) { return a+b; } main() { var c=testFunc(2,4); //调用刚才定义的函数 print('Function test = $c'); //打印函数的返回值,注意:这里不一样于C语言的d%用法 }
函数的运行信息以下图:3d
附:即使定义的函数没有显式声明函数的返回类型,编译器也能认,可是不建议你们那样作。code
若是函数体只有一句表达式,那么还能够这样简介地定义函数:对象
int testFunc(int a, int b) => a+b;
=> expr; 语法就是 {return expr; } 的简短写法,一样,这种写法我的也不太推荐,咱们仍是要注意函数定义的易读性。blog
函数的入参能够是必须的,也能够是可选择的,相似于带有默认值的参数,可选择的参数必须放在必须的参数以后。element
<一> 可选参数cmd
可选参数能够是位置参数或者命名参数。当定义函数的时候,可使用 {param1, param2, …} 这种形式去指定命名参数,其实就是下边这种形式:
调用的时候能够这样调用:
main() { var c=testFunc(a: 2, b:4); print('Function test = $c'); }
位置参数看如下例子(有点相似于windows cmd 命令里的可选参数):
String say(String from, String msg, [String device]) { var result = '$from says $msg'; if (device != null) { result = '$result with a $device'; } return result; }
以上say函数的前两个参数是必须的,从第三个开始是可选择的参数,这些可选择的参数都被包括在[]符号内。
这样调用:
main() { var c=say('Jack','Hello world'); print(c); }
运行结果为:
若是咱们这样调用: var c=say('Jack','Hello world','windows'); ,那么,运行结果将变为:
<二>默认参数
默认参数相似于C/C++语言的默认参数,dart的默认参数也使用=进行赋值(推荐使用=)。命名参数或位置参数均可以有默认值,如上例能够这样修改:
int testFunc({int a=7, int b}) { return a+b; } main() { var c=testFunc(b:2); print('Function test = $c'); }
程序的运行结果为:
这里要特别指出一点:普通C/C++的默认赋值参数只能排在形参的最后,也就是说上例若是在C语言中testFunc函数只能是b有默认值,而a不能有默认值。可是因为咱们使用了dart语言的命名参数特性,因此对有默认值形参的位置就没有这些限制了。怎么样,dart仍是有本身独特的强大之处吧。
位置参数的带有默认值的形式就再也不赘述了,下边直接贴一段例子你们理解消化一下就行:
// demo1
String say(String from, String msg, [String device = 'carrier pigeon', String mood]) { var result = '$from says $msg'; if (device != null) { result = '$result with a $device'; } if (mood != null) { result = '$result (in a $mood mood)'; } return result; } assert(say('Bob', 'Howdy') == 'Bob says Howdy with a carrier pigeon'); //demo2 void doStuff( {List<int> list = const [1, 2, 3], Map<String, String> gifts = const { 'first': 'paper', 'second': 'cotton', 'third': 'leather' }}) { print('list: $list'); print('gifts: $gifts'); }
<三>main函数
main函数是dart语言编写的程序的顶层入口函数,返回值为void,而且有一个可选择的list参数。再也不细述。
<四>将函数做为入参传递或赋值
直接看例子吧:
void printElement(int element) { print(element); } main() { var list = [1, 2, 3]; // Pass printElement as a parameter. list.forEach(printElement); }
再看一个将函数做为变量进行赋值的:
int main() { var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!'; //复合语句,稍微有点复杂,你们结合前边对 => 的介绍进行理解 print(loudify('hello')); }
全部的函数都是有返回值的,若是程序里没有明确指明返回值,如 foo() {} ,则默认返回 null;