一、函数的种类
1 .成员函数
成员函数︰函数被使用在类的内部,作为类的一份子,称为类的成员函数
2.本地函数(内嵌在函数内的函数)
本地函数:定义到函数内部的函数叫本地函数
3.函数值(匿名函数)
4.高阶函数
二、函数的声明和调用
- 1.scala通过 def 关键字来定义一个函数
- 格式: def 函数名(参数列表): 返回值类型 = { 方法体 }
- 2.scala可以自动推断出函数的返回值类型
- 3.scala使用自动推断时,函数必须有等号;否则函数返回值都是Unit空类型
- 4.声明函数时默认的访问权限时public ,此外有private protecyed
- 5.scala泛型的声明用[],不同于java的<>
- 6.scala在声明函数时,可以设置默认参数值
- 7.Scala也可以支持可变参数,变长参数本质上是一个集合类型,注意:变长参数需位置参数列表最后
- 匿名函数以及高级函数的使用
三、递归函数
1.scala的递归函数,要求必须显式的指定返回值类型,不能用自动推断,结束条件的返回值需要加return关键字
- 斐波那契数列 2 3 5 8 12 21.。。
- 写递归函数的两要素:
- 1.找函数关系
- f(n) =f(n-1)+f(n-2)
- 2.找结束条件
- f(0)==2 ; f(1)==3
小练习:
1.针对下列Java循环编写一个Scala版本:
for(int i=10;i>=0;i–)
system.out.println(i);
for(i<- 0 to 10 reverse ) println(i) //reverse 反转
for(i<- 1 to 11) println(11-i)
for(i<- 10 to 0 by -1) println(i) //10到一步长为-1
2.一个空的块表达式f的值是什么?类型是什么?
3.编写一个函数countdown(n:Int),打印从n到0的数字
def countdown(n:Int):Int={
for(i<- 0 to n)println(n-i)
}
4.编写函数计算x的n次方,其中n是整数,要考虑等n是0,正偶数,正奇数,负数这几种情况。
比如当x=2时,此函数要算出2^4, 2 ^3 ,2 ^0 , 2 ^(-1) 对应的值
mi(x:Int,n : Int ) : Double={ }
mi(2,10)=1024
def mi(x:Double, n:Int):Double={
if(n==0) return 1
else if(n>0 && n%2==0) mi(x,n/2)*mi(x,n/2)
else if(n>0 && n%2!=0) x*mi(x,n-1)
else 1/mi(x,-n)
}
5.编写一个循环,将整数数组中相邻的元素置换
Array(1,2,3,4,5,6)
得到的结果∶214365
def revert(arr:Array[Int])={
for(i<- 0 until(arr.length-1,2))
{
val t= arr(i);
arr(i)=arr(i+1);
arr(i+1)=t
}
}
6.创建一个Map,包含一些你想要的一些装备,以及他们的价格。然后通过yield构建另一个Map映射,采用同一组键,但是价格上打9折
比如定义一个Map :
var m1=Map(“book”->10,“gun”->100,“ipad”->1000)
则输出的新map(m2)为:Map(“book”->9,“gun”->90,“ipad”->900)
var var2=Map("book"->10,"gun"->100,"ipad"->1000)
var var3=for((k,v)<-var2)yeild(k,v*0.9)