Scala基础—函数式编程示例

来源:互联网 发布:北师大网络教育学费 编辑:程序博客网 时间:2024/05/20 00:39
package com.spark.scala.basics/**  * 1.scala中,函数式一等公民,可以像变量一样被传递,被赋值,同时函数可以赋值给变量,变量也可以赋值给函数;  * 原因在于:函数背后是类和对象,在运行的时候,函数其实是一个变量,这背后的类是scala自动生成,且可以天然地被序列化和反序列化。  * 意义:  * 1)序列化和反序列化,函数可以在分布式系统上传递;  * 2)可以和普通的变量一样完全,用在普通变量可以用在的地方,比如:参数,返回值等  *  * 2.def关键字来定义函数  * 3.函数会自动类型推断来确定函数返回值的类型,*****注意:函数名称和函数体之间没有等于号的话,则类型推断失效,此时函数的类型是Unit  * 4.函数的的参数可以是函数  * 5.如果函数体中无法推导出函数的类型,则必须声明具体的类型  * 6.可以指定函数的参数名,如 hello(age = 25, name="Scala"),原因在于函数背后其实是类,其参数就是类的成员,所以顺序啥的无所谓!  * 7.函数可变参数,如sum()函数,传参时语法是:_*  * 8.可变参数中的数据其实会被收集成为Array数据,我们在入口方法main中其实就是可变参数,是以Array[String]的方式呈现的  */object HelloFunctionProgramming {  def main(args:Array[String]): Unit = {    hello("Scala", 25)    println(hello("Scala", 25)) //函数作为参数    hello(age = 25, name="Scala")    println("sum = " + sum(1,2,3,4,5,6))    println("sum = " + sum(1 to 6: _*)) //调用可变参数  }  def hello(name: String, age: Int = 25): Int = { // 默认参数    println("Hello, My name is " + name + "! My age is " + age + "!")    age  }  def sum(numbers: Int*) = { // 函数可变参数   var result = 0    for (number <- numbers) result += number    result  }}
/**  * Functional style:  *  * 1.函数和变量一样,函数可以直接赋值给变量  * 2.匿名函数  * 3.函数作为参数,传递给函数,称为高阶函数  * 4.函数的返回值是函数,此时,实现了闭包的功能(closure  *   closure的原理;参数都是对象的成员,所以可以一直访问  */object FunctionalProgramming {  def main(args: Array[String]): Unit = {    val hiData = bigData _//    hiData("Scala")    val f = (name: String) => println("Hi, " + name)//    f("Kafka")    def getName(func: String => Unit, name: String): Unit = {      func(name)    }//    getName(f, "Scala")//    Array(1 to 10: _*).map{ (item: Int) => 2 * item}.foreach(println(_))    def funcResult(message: String) = (name: String) => println(message + name)    //def funcResult(message: String, name: String) {println(message + " : " + name)}    funcResult("Hello ")("Java")//currying函数的写法    val result = funcResult("Hello ")    result("Java")  }  def bigData(name: String): Unit = {    println("Helllo " + name)  }}

原创粉丝点击