赞
踩
函数式编程是对功能进行封装,最终是需要等号 def test() = {} //于python略有不同
// 1.定义函数
def test(): Unit = {
}
牛逼之处就是可以在main中声明函数,且scala中函数可以在任意位置封装
函数可以在任意位置声明,方法只能声明在类中
关于调用,默认情况下调用函数,如果没有函数调用方法
–上述调用并非就近原则;
–scala中采取 亲函数原则,函数没有调用方法;
–若使用this,调用的必定是方法;类的五大成分
注意:
scala源码中函数的本质就是方法;
函数 没有重写重载的概念
Java中没有函数的概念
scala源码中,方法就是函数,编译后的字节码文件中,函数就是方法
函数编译程方法时,增加了修饰符private static final
函数编译成方法时,函数名会自动发生变化,为了避免和方法名冲突
定义一个函数,功能是传入的字符串的末尾字符改编为大写
def testUP(s : String): String = {
return s.substring(0,s.length-1)+s.substring(s.length-1).toUpperCase()
}
test()
this.test()
println(testUP("zhangsan")) //zhangsaN
底层实现使用WrappedArray集合实现;
// 2.关于可变参树 加上*就表示可变参数
def fun2(name: String*): Unit = {
println(name)
}
fun2()
fun2("zhangsan")
与python同,可变参数只能放到参数列表最后一项
def fun3(name: String,password:String="000000"): Unit = {
println(s"注册用户${name},密码是${password}")
}
fun3("lisi") //注册用户lisi,密码是000000
默认参数的定义方式和python略有不同,在类型定义之后使用=来定义
和python语法一样,默认参数只能放到末尾;
假设如果默认参数放到前面;解决方法,实参赋值的时候,指定参数进行传参;
这种写法及其不负责任,不建议这么写;
// -- 1.scala中如果有返回值,return可省 def fun4(name: String, password: String = "000000"): String = { s"注册用户${name},密码是${password}" } // -- 2.如果函数的逻辑代码只有一行,那么可以将大括号省略; --甚至可以写成一行 def fun5(name: String, password: String = "000000"): String = s"注册用户${name},密码是${password}" // -- 3.如果通过返回值可以推断出返回值类型,可以省略返回值 def fun6(name: String, password: String = "000000") = s"注册用户${name},密码是${password}" // -- 4.如果函数的参数列表中没有声明参数,可以省略小括号;如果省略小括号,那么调用时候也不能加小括号 def fun7 = "zhalngsan" // println(fun7) //zhangsan // -- 5.如果逻辑代码Unit函数,内部有return返回值,此时return不起作用 def fun8:Unit = return "zhangsan" def fun9:Unit = "zhangsan" //return可省 println(fun8) // -- 6.Unit可省,如果确定函数没有返回值,可以将Unit和 = 同时省略; def fun10{ "zhangsan" //省略形参,跟着变,省略Unit = ,省略 return } println(fun10) // -- 7.def和函数名都可以省略;称之为匿名函数; //猜测写道某一个东西的内部 /** * def和函数名要省略 * 返回值类型也需要省略,由逻辑代码自动推断 * 等号需要增加大于号表示关联; */ ()=>{ 123 }
// 小结:因为省略了很多内容,所以变量声明和函数声明很相似
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。