Scala基础—函数式编程示例

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)
  }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值