scala面向函数编程1
scala面向函数编程
package scala
object Demo13Fun2 {
def main(args: Array[String]): Unit = {
/**
*
* 面向对象编程:将一个对象传来传去,
* 1、将一个对象作为参数
* 2、将一个对象作为返回值
*
* 需要明确对象的类型,以及参数的类型,返回值的类型
*
*
* 面向函数编程(高阶函数),将一个函数传来传去
* 1、将一个函数作为参数 -- 重点
* 2、将一个函数作为返回值 -- 忽略
*
* 所以需要明确函数的类型
*
* 函数的类型和返回值,参数有关,和函数名,函数体无关
*
*
*
* def stringToInt(str: String): Int = str.toInt
* 这是一个参数为String 返回值为Int 类型的函数
*
*
*/
def stringToInt(str: String): Int = str.toInt
/**
* 1、以函数作为参数
*
*
* String => Int
* 前面代表的是参数的类型
* 后面代表的是返回值的类型
*
*/
//fun的参数是一个函数,是一个参数为String返回值为Int类型的函数
def fun(f: String => Int): Unit = {
//f 相当于函数的引用
val i: Int = f("1000")
println("fun:" + i)
}
//定义一个参数为String 返回值为Int类型的函数
def sToi(s: String): Int = {
s.toInt
}
//调用 fun, 需要一个参数为String 返回值为Int 类型的函数
fun(sToi)
def sToi2(s: String): Int = {
s.toInt + 100
}
//可以多次调用传入不同的函数
fun(sToi2)
}
}
以函数作为参数的应用
package scala
object Demo15Fun4 {
def main(args: Array[String]): Unit = {
/**
* 以函数作为参数的应用
*
*/
val array = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
//将数组中的元素都乘以2
var i = 0
while (i < array.length) {
array(i) = array(i) * 2
i += 1
}
//mkString 将数组或者集合按照一个分隔符拼接成一个字符串
println(array.mkString("\t"))
println("=" * 100)
//使用后scala 高阶函数实现
val array1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
/**
* map函数: 一个一个处理数组中的元素
*
* 循环数组中的元素,一个一个传给后面的函数,
* 最终返回一个新的数组
*
*/
//将数组中的元素都乘以2
val array3: Array[Int] = array1.map((i: Int) => i * 2)
println(array3.mkString(","))
val strs = Array("1.1", "2.3", "1.4", "1.2")
//将数组中元素的类型转换成Double 类型
val doubles: Array[Double] = strs.map((s: String) => s.toDouble)
println(doubles.mkString(","))
/**
* 将数组中的元素奇数乘以2,偶数加一
*
*/
val array4 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
val array5: Array[Int] = array4.map((i: Int) => {
if (i % 2 == 1) {
i * 2
} else {
i + 1
}
})
println(array5.mkString(","))
/**
* 练习
* 1、对数组中的元素乘以2 加上100 乘以5
*
*/
}
}
以函数作为返回值的示例
package scala
object Demo16Fun5 {
def main(args: Array[String]): Unit = {
/**
* 以函数作为返回值
*
*/
def fun(s: String): String => Int = {
def f(s1: String): Int = {
(s + s1).toInt
}
//返回一个函数
f
}
//调用函数返回一个函数
val stringToInt: String => Int = fun("100")
//调用返回的函数
val i: Int = stringToInt("1")
println(i)
}
}