《越空Dart教程》:第六节 函数
自我介绍
大家好,我是越空,一位货真价实的16岁开发者。由于最近我在学习Dart这门语言,所以我就想总结我所学到的知识,分享给大家,让大家和我一起学习这门语言,争取做到可以让大家真的也学习到东西,并且少走一些弯路,感谢大家的支持。
这是我发表的第一套教程,多多少少会有不足的地方,还请大家多多见谅,有什么问题或者建议,也可以发表评论和私信我,希望可以得到大家的支持,我会再接再厉的!
那么接下来,我们正式开始今天的学习吧!
这是一套系列课程,新来的读者请从第一节开始学习
在上一节我们已经学完了Dart中的循环语句。
本节课我们将学习Dart中的函数,有函数、参数、匿名函数、递归、闭包五部分。
第一部分:函数
函数的定义
在Dart中我们常用的print()就是一个函数,或者叫做方法,是系统内置的方法。(编程)语言是非常灵活的,我们可以自己去写一个方法,定义方法的基本格式是这样的:
返回值类型 方法名称(参数,1参数2,…){
方法体
return 返回值;
}
方法命名的规则与变量命名的规则相同。返回值类型那里可以为空,就像是我们定义变量是可以用var一样,它可以自动判断类型,返回值类型可以是任何类型,num、String、List、Map等等。如果什么东西都不返回,也就是没有 (return 返回值;)语句,那返回值就是void 空返回值。接下来我们演示一下,
函数的调用
我们一共定义了三个函数,接下来我们像调用print函数一样去使用它们
箭头函数
函数中只有一行代码的时候 为了简化 可以使用箭头函数
函数作用域
函数中也可以嵌套函数,这就涉及到了作用域的问题
第二部分:参数
传参
参数可以让函数变得更加灵活,可以去对它进行一个控制
例子1:计算x的y次方z
例子2:打印一个学生信息
函数之间互相调用
例子:实现给list进行去重
可选参数
默认参数
命名参数
函数做参数
第三部分: 匿名函数
匿名函数
除此之外 在调用将函数作为参数的函数的时候 用于传参的也可以是匿名方法,就像是在第三节我们讲数据类型时 讲到的forEach、map等函数。
自执行函数
自执行方法也属于是匿名方法,与普通方法的区别是,它是自己传参自己调用。格式是(匿名函数)(传参)
第四部分:函数递归
递归的意思就是说在一个函数中调用了它自己,比如函数a中调用了函数a。
例子1:使用递归来计算a的阶乘
首先我们要了解什么是阶乘,阶乘是数学术语,它的定义是:一个正整数的阶乘是所有小于及等于该数的正整数的积。
例子2:使用递归来计算a-b的和
第五部分:闭包
最后一部分,讲一下闭包的概念。先说一下全局变量和局部变量,
全局变量
局部变量
全局变量和局部变量的区别:
全局变量:全局变量常驻内存、全局变量污染全局
局部变量:不常驻内存会被垃圾机制回收、不会污染全局
全局变量虽然可以全局使用,但是会污染全局。局部变量虽然不会污染全局,但是不可以全局使用 会被垃圾机制回收。可不可以有一种方式既能常驻内存,又不污染全局呢,有,这里就产生了闭包,闭包可以解决这个问题。
闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
闭包的写法:函数嵌套函数,并return 里面的函数,这样就形成了闭包。
结束
好了,这节讲了函数、参数、匿名函数、递归、闭包五大部分,希望对你有帮助。
下节预告
讲解Dart中的类。
好了,这节就分享这么多了,我们下节再见,祝大家编程愉快!!