/**
* 函数式编程进阶
* 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量;
* 2,函数更长用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,但是如果你要使用的话,一般会把这个
* 匿名函数赋值给一个变量(其实是val常量)
* 3,函数可以作为参数传递给函数,这极大简化了编程方法,
* 第一,以前java是new出一个接口实例,并且在接口实例的回调方法callback中来实现业务逻辑,现在是把回调方法callback传递给我的
* 函数,且在函数体中直接使用,提高了开发效率
* 第二,这种方式非常方便编写负责的业务逻辑和控制逻辑,对于图计算、机器学习、深度学习等而言至关重要
*
* 函数作为函数的参数传递的编程方式称之为高阶函数的编程方式,Spark源码和应用程序开发中至少60%都是这种代码,必须务必一定要掌握
*
*/
object HelloFunctionalProgramming2 {
def main(args: Array[String]): Unit = {
/**
* 函数式编程进阶
* 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量;
*
*/
val hiData = hiBigData _
hiData("Spark")
/**
* 函数式编程进阶
* 2,函数更长用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,但是如果你要使用的话,一般会把这个
* 匿名函数赋值给一个变量(其实是val常量)
*
*/
val f = (name : String ) => {
println("Hi jianxie 111, "+name)
println("Hi jianxie 222, "+name)
}
f("Kafka")
/**
* 函数式编程进阶
* 3,函数可以作为参数传递给函数,这极大简化了编程方法,
* 第一,以前java是new出一个接口实例,并且在接口实例的回调方法callback中来实现业务逻辑,现在是把回调方法callback传递给我的
* 函数,且在函数体中直接使用,提高了开发效率
* 第二,这种方式非常方便编写负责的业务逻辑和控制逻辑,对于图计算、机器学习、深度学习等而言至关重要
*
*/
def getName(func : (String) => Unit ,name:String){
func(name)
}
getName(f,"Docker")
Array(1 to 10: _* ).map{ (item: Int) =>2 * item }.foreach{ x => println(x) }
/**
* Currying 函数写法,必须掌握这种写法,只要是复杂的Scala函数式编程代码就一定会使用这种写法
*
*/
def funcResult(message :String) = (name:String) => println(message + ":" + name)
funcResult("Hello")("Java")
val result = funcResult("Hello")
result("Ruby")
}
def hiBigData(name:String){
println("Hi "+ name)
}
}
* 函数式编程进阶
* 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量;
* 2,函数更长用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,但是如果你要使用的话,一般会把这个
* 匿名函数赋值给一个变量(其实是val常量)
* 3,函数可以作为参数传递给函数,这极大简化了编程方法,
* 第一,以前java是new出一个接口实例,并且在接口实例的回调方法callback中来实现业务逻辑,现在是把回调方法callback传递给我的
* 函数,且在函数体中直接使用,提高了开发效率
* 第二,这种方式非常方便编写负责的业务逻辑和控制逻辑,对于图计算、机器学习、深度学习等而言至关重要
*
* 函数作为函数的参数传递的编程方式称之为高阶函数的编程方式,Spark源码和应用程序开发中至少60%都是这种代码,必须务必一定要掌握
*
*/
object HelloFunctionalProgramming2 {
def main(args: Array[String]): Unit = {
/**
* 函数式编程进阶
* 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量;
*
*/
val hiData = hiBigData _
hiData("Spark")
/**
* 函数式编程进阶
* 2,函数更长用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,但是如果你要使用的话,一般会把这个
* 匿名函数赋值给一个变量(其实是val常量)
*
*/
val f = (name : String ) => {
println("Hi jianxie 111, "+name)
println("Hi jianxie 222, "+name)
}
f("Kafka")
/**
* 函数式编程进阶
* 3,函数可以作为参数传递给函数,这极大简化了编程方法,
* 第一,以前java是new出一个接口实例,并且在接口实例的回调方法callback中来实现业务逻辑,现在是把回调方法callback传递给我的
* 函数,且在函数体中直接使用,提高了开发效率
* 第二,这种方式非常方便编写负责的业务逻辑和控制逻辑,对于图计算、机器学习、深度学习等而言至关重要
*
*/
def getName(func : (String) => Unit ,name:String){
func(name)
}
getName(f,"Docker")
Array(1 to 10: _* ).map{ (item: Int) =>2 * item }.foreach{ x => println(x) }
/**
* Currying 函数写法,必须掌握这种写法,只要是复杂的Scala函数式编程代码就一定会使用这种写法
*
*/
def funcResult(message :String) = (name:String) => println(message + ":" + name)
funcResult("Hello")("Java")
val result = funcResult("Hello")
result("Ruby")
}
def hiBigData(name:String){
println("Hi "+ name)
}
}