Dart 知识点 - 函数

网友投稿 270 2022-08-31

Dart 知识点 - 函数

​​Dart​​​ 是一种真正面向对象的语言,所以即便函数也是对象并且类型为 ​​Function​​,这意味着函数可以被赋值给变量或者作为其它函数的参数。

推荐使用线上编辑器 ​​dartpad.cn​​ 进行学习,测试~

参数

函数有两种形式的参数:

必要参数:放在参数列表的前面可选参数:放在参数列表的后面,其又可以分为两种

命名参数:使用花括号​​{}​​ 括起来的参数位置参数:使用方括号​​[]​​ 括起来的参数

// 命名参数void main() { // sayHi(); // 报错,因为第一个参数是必要参数 sayHi(' Jimmy '); // Hello Jimmy nullnull sayHi(' Jimmy ', name2: 'and Timmy.'); // Hello Jimmy and Timmy.null}void sayHi(String name1, { String? name2, String? name3 }) { print('Hello'

注意:如果一个参数是可选的,但是不能为 ​​null​​​,你需要为它提供一个​​默认值​​。

我们更改一下上面的代码:

void main() { sayHi(' Jimmy '); // Hello Jimmy ,Timmy and Kimmy.}void sayHi(String name1, { String name2 = ',Timmy ', String name3 = 'and Kimmy.' }) { print('Hello'

上面的命名参数是使用 ​​key: value​​​ 的形式调用的,而下面要讲的位置参数,是在指定的位置,填写 ​​value​​ 值即可,改写上面的代码如下:

void main() { sayHi(' Jimmy ', ' and Kimmy.', ''); // Hello Jimmy and Kimmy.}void sayHi(String name1, [String name2 = ',Timmy ', String name3 = 'and Kimmy.']) { print('Hello'

ps:命名参数和位置参数,其调用的方式不同

main 函数

每个 ​​Dart​​​程序都必须有一个,​​main​​​ 函数程序的入口。​​Flutter​​​ 应用程序也是从 ​​main​​ 函数启动的。

void main() => runApp(MyApp());// MyApp 是一个类

函数可以作为参数传递

函数是一级对象,可以将函数作为参数传递给另一个函数。比如:

void sayHi(String name) { print(name);}var list = ['Jimmy', 'Timmy', 'Kimmy'];list.forEach(sayHi);// Jimmy// Timmy// Kimmy

匿名函数

匿名函数顾名思义,即使没有函数名称。我们可以创建一个没有名字的方法,称之为匿名函数、 Lambda 表达式 或 Closure 闭包。

完整的语法格式如下:

([[类型] 参数[, ...]]) { 函数体}

比如:

var list = ['Jimmy', 'Timmy', 'Kimmy'];list.forEach((String item) { print(item);});// Jimmy// Timmy// Kimmy

词法作用域

​​Dart​​ 是词法作用域语言,意味着变量的作用域是静态确定的。变量的作用域在写代码的时候就确定了,大括号内定义的变量只能在大括号内访问。比如:

String outMain = 'out main';void main() { String insideMain = 'inside main'; sayHi(); print(outMain); // out main print(name); // 报错}void sayHi() { String name = 'Jimmy'; print(outMain); // out main// print(insideMain); // 报错 print(name); // Jimmy}

词法闭包

闭包就是一个函数对象,即使函数对象的调用在它原始作用域之外,依然能够访问它词法作用域内的变量。比如:

// 闭包就是一个函数对象Function sayHi(String prefix) { return (String name) => prefix + name;}void main() { var sayHi1 = sayHi('Hello '); var sayHi2 = sayHi('Hi '); print(sayHi1); // Closure 'sayHi_closure' print(sayHi2); // Closure 'sayHi_closure' print(sayHi1('Jimmy.')); // Hello Jimmy. print(sayHi2('Jimmy.')); // Hi Jimmy.}

关于闭包,后面会专门出一篇文章讲解,敬请期待...

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:公关界的007:这支品牌片里,有“新发现”!
下一篇:手把手教你如何由浅入深地理解线性SVM模型
相关文章

 发表评论

暂时没有评论,来抢沙发吧~