函数是 Dart程序运行的基本单元
一、main函数
main函数是应用的入口。每一个应用都必须有一个Main函数作为入口。main函数没有返回值。main函数的参数可以为空(啥都不写),也可以有一个 List类型的变量
void main()
{
print("hello world!"); // 输出: hello world!
}
void main(List<String> args)
{
print(args);
}
// 运行命令 dart test.dart hello world
// 结果: [hello, world]
二、内置函数
内置函数也就是Dart自带的api函数,如:print()
void main()
{
print("hello world!"); // 输出: hello world!
}
三、可选参数函数
1.Dart定义可选参数有两种方式一种使用{}
, 另一种使用[]
。区别就是, 如果用{}
声明,在使用时必须带着参数名,如:a:123;如果用[]
声明,在使用时需要按照顺序使用
void test(int a, {int b, String c})
{
print("a = $a, b = $b, c = $c");
}
void test2(int a, [int b, String c])
{
print("a = $a, b = $b, c = $c");
}
void main()
{
test(1); // a = 1, b = null, c = null
test(1, b:2); // a = 1, b = 2, c = null
test(1, c:"hello"); // a = 1, b = null, c = hello
test(1, b:2, c:"hello"); // a = 1, b = 2, c = hello
test2(1); // a = 1, b = null, c = null
test2(1, 2); // a = 1, b = 2, c = null
// test2(1, "hello"); // error, 参数类型一定要匹配
test2(1, 2, "hello"); // a = 1, b = 2, c = hello
}
2.Dart还提供了默认参数
使用等号指定参数默认值, 默认值只能是编译时常量
void test(int a, {int b = 2})
{
print("a = $a, b = $b");
}
void test2(int a, [int b = 2])
{
print("a = $a, b = $b");
}
void main()
{
test(1); // a = 1, b = 2
// test(1, 2); // error, {}内的变量不允许修改
test2(5); // a = 5, b = 2
test2(5, 500); // a = 5, b = 500, []内的变量可以修改
}
四、匿名函数
匿名函数的主要作用:
- 1.可赋值给变量, 通过变量调用
- 2.可在其他方法中直接调用或传递给其他方法
void main()
{
// 定义匿名函数
var f1 = (String str)
{
print("Hello $str");
};
f1("Dart"); // Hello Dart
}
void main()
{
var listVar = ["cat", 'dog'];
listVar.forEach((animal)
{
print("animal is ${animal}");
});
// 如果只有一行代码,可以使用=>
listVar.forEach((animal) => print("animal is ${animal}"));
}
五、作用域
Dart
语言的变量是有作用域的,变量的作用域是由代码布局决定的。
var str1 = "str1";
main()
{
var str2 = "str2";
// 定义一个内部函数
void testScope()
{
var str3 = "str3";
print(str1); // str1
print(str2); // str2
print(str3); // str3
}
// 运行内部函数
testScope();
}
六、闭包
闭包是一个函数对象,它可以访问其作用域中的变量,即使该函数在其原始范围之外使用也是如此。
在以下示例中,makeAdder()
捕获变量num
。无论返回的函数在哪里,它都会记住num
。
// 本实例来自于官网
Function makeAdder(num)
{
return (addNum)
{
return addNum + num;
};
}
main()
{
var add5 = makeAdder(5);
var add10 = makeAdder(10);
print(add5(1)); // 6
print(add10(1)); // 11
}
七、Lambda函数
Lambda函数是表示函数的简洁机制。这些函数也称为箭头函数。
语法:
[return_type]function_name(parameters)=>expression;
实例:
printMsg()=>print("hello");
int test()=>123;
void main()
{
printMsg(); // hello
print(test()); // 123
}