Scala语法(二) 函数与方法

版权声明:欢迎转载,转载请说明出处. 大数据Github项目地址https://github.com/SeanYanxml/bigdata。 https://blog.csdn.net/u010416101/article/details/89638423

前言

在前面的章节内我们简单的介绍了Scala的基本语法中, 常量&变量、if判断、循环以及基本的集合:数组、元组、Set、List和Map数据类型的基本操作.

本章, 我们将介绍Scala中的函数与方法.


正文

经常听别人这样介绍Scala, Scala是面向函数式的编程语言. 那么, 函数与方法到底有什么区别呢? 请听我慢慢介绍.(Java中, 只有方法的概念, 没有函数的概念.)

方法的定义
# Java
public static void main(){
}
# Scala
  // 定义的方法
  // <def 方法名<参数:参数类型...> : 返回值 = <方法体> >
  def methodA(x:Int, y:Int) : Int = x+y
  def methodA_1(x:Int, y:Int) : Int = {x+y}
  
  // 有时可以不写返回值类型
  // 但是递归的时候需要加返回值类型.
  def methodB(x:Int,y:Int) = x+y
  
  def methodC(x:Int) = x+10
函数
 // 函数
  // 匿名方法 (可以通过res26进行访问)
  (x:Int, y:Int) => {x+y}

 // 有名函数
  val functionA = (x:Int, y:Int) => {x+y} 
  
  // 函数与方法最大的区别在于.
  // 函数可以当作参数传入方法内.
  
//  val functionA = ( (x:Int, y:Int) : Int) =>
  
  val functionB = (x:Int, y:Int) => {x+y}
  
  // 函数方法结合demo
  val functionD = (x:Int) => {x*10}
  def methodD(f: Int => Int, num: Int): Int = {
    // 方法体内调用函数
    f(num)
  }
  
  // 函数定义的另一种方式
  // val 函数名: 参数 => 返回值类型 = {函数体 (x局部变量 => 局部变量的运行操作)}
  val functionE : Int => String = { x => x.toString()}

有时, 可以通过<方法名> _的方式将方法转换为函数, 传递至方法内.

Others

def main(args: Array[String]): Unit = {
    // 使用方法
    val result = methodA(1,2)
    
    val array = Array(1,2,3,4,5)
    // 方法C 当成参数传入
    array.map(methodC)
    println(array.toBuffer)
    
    // _ 此处相当于一个匿名函数
    // 1. 函数可以当作参数传入方法.
    // 2. 匿名函数可以作为参数传入函数.
    array.map(_*100)
    
    val arrayResult = array.map((x:Int) => x*100)
    array.map(x=>x*100)
    println(arrayResult)
    
    
    println(methodD(functionD,2))
    
    val arrayMulti = array.map(x => x*5)
    println(arrayMulti.toBuffer)
    val arrayDivision = array.map( x=> x/2)
    println(arrayDivision.toBuffer)
  }

Conclusion

由于这部分的内容非常容易混淆, 我们最后总结一下.
Scala中有方法和函数两种.

方法的定义为:

  • def <方法名> (<变量类型>: 变量名):返回值类型 = {方法体}
    def hello(Int : a):Int = {a*10}
  • 有时, 返回值的类型可以简化不写. (递归调用时一定要写)
    def hello(Int a) = {a*10}

函数的定义为:

  • val <函数名>((<变量类型>:变量名): 返回值类型) => {函数体}
    val helloFunc ((x:Int, y:Int) : Int) => {x+y}
  • 有时, 返回值类型也可以省略. 对于匿名函数来说, 函数名也可以省略.
    val hellFunc2(x:int) => {x*10}
  • 其次, 函数可以作为参数传入方法内. 有名参数传递和匿名参数传递两种方式.
    def helloFunc3(f: Int => Int) / helloArray.map((x:Int) => {x*10}) / 简化 helloArray.map(x=> x*10)
展开阅读全文

没有更多推荐了,返回首页