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)


  }

}
posted @ 2021-07-15 21:12  xiaolee_bigdata  阅读(47)  评论(0编辑  收藏  举报