Dart中的函数

2019-09-11 18:00发布

函数是 Dart程序运行的基本单元
  • main函数
  • 内置函数
  • 可选参数函数
  • 匿名函数
  • 作用域
  • 闭包
  • Lambda函数
一、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
}  
标签: