package com.bjsxt.scala
import java.util.Date
object fun {
/**
* 方法的定义
* 定义方法用def
*/
def main (args:Array[String]): Unit={
/**
* 主函数必须用unit
* 其他的函数中,返回值类型可加也可以不用加
*/
def max(x:Int,y:Int):Int={
if(x>y){
return x
}else{
return y
}
}
println(max(100,10))
println("++++++++++++++++++++")
def max1(x:Int,y:Int):Int= if(x>y) return x else return y ;println(max1(100,10))
println("-----------------------------------")
/**
* 不加等号,返回值为空
* 加上等号,不为空
*/
def fun(a:String){
"dfsafdsf---->"+a
}
println(fun("sds"))
println("+++++++++++++++++++++++++++++++")
def fun1(b:String)={
"wangyongqiang"+b
}
println(fun1("wangyongqiang"))
println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
/**
* 递归方法的学习
*/
def fun2(s:Int):Int={
if(s==1){
1
}else{
s*fun2(s-1)
}
}
print(fun2(5))
println("_________________________________________")
def fun3(e:Int=100,f:Int=200):Int={
e+f
}
println(fun3(10))
/**
* 有参数与无参数的区别:
* 无参数的方法:方法后边,等号前边要加上方法的类型:Int,String等
* 有参数的方法:等候前边可以不用加类型
*
*/
/**
* 可变长参数的方法
*/
def fun4(ss:String*)={
ss.foreach(s=>{
println(s)
})
}
fun4("a","b","c","d")
println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
/**
* 加不加括号都一样
*/
def fun5(ss:String*)={
ss.foreach((s)=>{
println(s)
})
}
fun5("a","b","c","d")
/**
* 匿名函数
*/
println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&")
val funn=(s:String)=>{
println(s)
}
/**
* 嵌套函数
*/
def fun6(num:Int):Int={
def fun1(a:Int):Int={
if(a==1){
a
}else{
a*fun1(a-1)
}
}
fun1(num)
}
println(fun6(10))
println("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
/**
* 偏应用函数
*/
def showLog(date:Date,log:String)={
println("data is"+date+",log is "+log)
}
val date1=new Date()
showLog(date1,"a")
showLog(date1,"b")
showLog(date1,"c")
val fun7=showLog(date1:Date,_:String)
fun7("aaa")
fun7("bbb")
fun7("ccc")
/**
* 8.高阶函数
* 1)函数的参数是函数
* 2).函数的返回值是函数
* 3).函数的参数和返回值都是函数
*/
//函数的参数是函数
def fun8(f:(Int,Int)=>String,x:Int):String={
val result=f(100,200)
result+"@"+x
}
val result=fun8((a:Int,b:Int)=>{
a+"~"+b
},100)
println(result)
/**
* 函数的返回值是函数,需要显示声明方法的返回值类型是函数
*/
def fun9(a:Int,b:Int):(Int,Int)=>Int={
val result=a+b//result=3
def funy(x:Int,y:Int):Int={
x+y+result
}
funy
}
println(fun9(1,2)(100,200))
//函数的参数和返回值都是函数
def fun10(f:(Int,Int)=>Int):(String,String)=>String={
val result=f(1,2)
def fun1(s1:String,s2:String):String={
s1+"~"+s2+"@"+result
}
fun1
}
println(fun10((a:Int,b:Int)=>{a+b})("hello","world"))
/**
* 9.柯里化函数
* 高阶函数
*/
def fun11(a:Int,b:Int)(c:Int,d:Int)={
a+b+c+d
}
println(fun11(1,2)(3,4))
}
}