Scala函数式编程

Scala中的函数是Java中完全没有的概念,因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因此Java中的一等公民是类和对象,而且只有方法的概念,即寄存和依赖于类和对象中的方法。Java中的方法绝不可能脱离类和对象独立存在。
 
 而Scala是一门即面向对象,又面向过程的语言。因此在Scala中有非常好的面向对象的特性,可以使用Scala来基于面向对象的思想开发大型复杂的系统和工程。而且Scala也是面向过程,因此Scala中有函数的概念。在Scala中,函数和类,对象一样,都是一等公民。Scala中的函数可以独立存在,不需要依赖类和对象。
 

  而Scala的函数式编程,就是Scala面向过程的最好的佐证。也正是因为函数式编程,才让Scala具备了Java不具备的更强大的功能和特性。

 下面介绍怎么使用:

-- 1. 将函数赋值给变量

 //Scala中的函数时一等公民,可以独立定义,独立存在,而且直接将函数作为值赋值给变量

    // Scala的语法规定,将函数赋值给变量时,必须在函数后面加上空格和下划线。 
   def sayHello(name:String){println("Hello, " + name)}             
    val sayHelloFunc=sayHello _ 
    sayHelloFunc("leo")

-- 2. 匿名函数 

 //Scala中,函数也可以不需要命名,此时函数称为匿名函数。
   //可以直接定义函数之后,将函数赋值给某个变量,也可以将直接定义的匿名函数传入其他函数中。

   //语法规则:    (参数名 :参数类型) => 函数体
   val SayHelloFunc=(name:String ) =>println("Hello ,"+ name)

-- 3. 高阶函数

 //Scala中,函数是一等公民,因此可以直接将某个函数传入其他函数,作为参数。 该功能非常强大,也是Java俗不具备的。
  //接收其他函数作为参数的函数,也被称为高阶函数 (higher -order function)
  val sayHelloFunc=(name:String) =>println("Hello ," +name)
  def greeting(func:(String)=>Unit,name:String ){func(name)}
  greeting(sayHelloFunc,"leo")

使用如下:


// 高阶函数的另一个功能是将函数作为返回值、

 def getGreetingFunc(msg :String) =(name:String )=>println(msg+" , "+name)
  val greetingFunc=getGreetingFunc("hello")

  greetingFunc("leo")

首先先定义了一个返回值为 函数的函数getGreetingFunc,然后我们就将其函数的返回值 (返回值为函数)赋值给了变量greetingFunc,这样就得到了一个名为 greetingFunc的函数,然后我们调用greetingFunc函数得到打印结果。

-- 4. 高阶函数的类型推断

// 高阶函数可以自动推断出参数类型,而不需要写明类型;而且对于只有一个参数的函数,可以省去其小括号
   // 如果仅有的一个参数在右侧的函数体内只是用一次,则还可以将接受参数省略,并且将参数用_来代替。

   def greeting(func:(String) => Unit,name :String){func(name)}
   
   greeting( (name:String) => println("Hello, " +name),"leo")
   greeting( (name) => println("Hello, " +name),"leo") //自动推断类型
   greeting( name => println("Hello, " + name),"leo")   // 省略小括号

  def triple( func:(Int) => Int)={func(3)}
  triple(3* _)


猜你喜欢

转载自blog.csdn.net/m0_37564404/article/details/80748163