欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scala学习系列(七)函数式编程(未完待更)

程序员文章站 2024-03-14 19:54:23
...

说明:本文将知识点全部写在代码中,后续再拿出来总结吧

一.函数式编程

代码:

package com.zpark.bigdata.scala.chapter05

object Scala01_Function {
  def main(args: Array[String]): Unit = {
    //TODO 函数式编程

    //编程的范式(规范形式)
    //面向对象:解决问题时将问题分解成一个一个小问题(形成了对象),分别解决
    //        对象关系:继承,实现,多态,重写       TODO 主要关心他们之间的关系

    //函数式编程关心的是问题解决的方案(封装功能):重点在于函数(功能)函数入参,出参
    //      关心三个点:函数,函数入口参数,函数返回结果    TODO 主要关心解决方案

    //函数式编程重要的是函数

    //TODO Java中的方法和Scala中的函数都可以进行功能的封装,但是方法必须和类型绑定,但是函数不需要

    //声明函数
    // Java方法声明
    //public static void test (String s){ 方法体}
    //Scala函数声明
    //TODO Scala语法很灵活,在任意语法中可以声明其他语法规则
    def test(s: String):Unit={
      //函数体
      println(s)
    }

    //调用函数
    test("zhangsan")

  }
}

二.函数:入参(方法参数),出参(返回值)

代码:

package com.zpark.bigdata.scala.chapter05

object Scala02_Function01 {
  def main(args: Array[String]): Unit = {
    //函数:入参(方法参数),出参(返回值)
    //无参,无返回值
    def test():Unit={
      println("Test")
    }
    test()

    //有参,无返回值
    //TODO 函数没有重载的概念
    //TODO 如果在同一作用域中,函数不能重名
    def test1(s:String):Unit = {
      println(s)
    }
    test1("zhangsan")

    //有参,有返回值
    def test2(s:String):String = {
       return  s + "........"
    }
    val rtnVal: String = test2("lisi")
    println(rtnVal)

    //无参,有返回值
    def test3(): String ={
      return "Hello World"
    }
    println(test3())

    //Scala中没有throws关键字,所以函数中如果有异常发生,也不需要在函数声明时抛出异常

  }
}

三.函数简化过程

package com.zpark.bigdata.scala.chapter05

object Scala03_Function02 {
  def main(args: Array[String]): Unit = {
    //TODO Scala中可以采用自动推断功能来简化函数的声明
    //1.如果函数声明中,明确无返回值Unit,那么即使函数中有return也不起作用
    /*
    def test(): Unit ={
      //println("Hello World")
      return "zhangsan"
    }
    */

    //2.如果将函数体最后一行代码进行返回,那么return关键字可以省略
    /*
     def test(): String ={
       //return"zhangsan"
      "zhangsan"
    }
     */

    //3.如果可以根据函数的最后一行代码推断类型,那么函数返回值类型可以省略
    /*
    def test()={
      "zhangsan"
    }
    */

    //4.如果函数体重只有一行代码,大括号可以省略
    //def test()="zhangsan"

    //5.TODO 如果函数声明中没有参数列表,小括号可以省略
    //TODO 如果函数小括号省略,那么访问时不能加小括号
    //TODO 声明函数必须加def  def:声明函数      val:变量
    def test="zhangsan"
   // val test1="lisi"
    println(test)

    //如果明确函数没有返回值,那么等号可以省略,省略后,编译器不会将函数体最后一行代码作为返回值
    //如果函数没有参数列表,可以省略小括号,调用时一定不能使用小括号
    //如果函数没有参数列表,但是没有省略小括号,调用时可加可不加

    //扩展:匿名函数
    ()->{println("vvvvvvvvvvv")}
  }
}

四.函数式编程:扩展

1.可变参数
2.默认参数
3.带名参数

package com.zpark.bigdata.scala.chapter05

object Scala04_FunctionHard {
  def main(args: Array[String]): Unit = {
    //函数式编程:扩展
    //TODO 可变参数
    def test(name:String*): Unit ={
      println(name)
    }
    //调用函数时,可传多个参数,也可以不传参数
    //test("zhangsan","lisi","wangwu")
    //运行后结果WrappedArray(zhangsan, lisi, wangwu)

    //test()
    //运行后结果List()

    //TODO 默认参数
    //如果希望函数中的某一个参数使用默认值,那么可以在声明时直接赋初始值
    def test1(name: String,age:Int = 20): Unit ={
      println(s"${name} - ${age}")
    }

    def test2(name2:String = "lisi",name1:String): Unit ={
      println(s"${name1} - ${name2}")
    }

    test1("zhangsan",22)
    //调用函数时,参数匹配规则为从前到后,从左到右
    //test2("zhangsan","wangwu")

    //TODO 带名参数
    test2(name1="zhangsan")
  }
}

 

附加.工程图示

Scala学习系列(七)函数式编程(未完待更)​​​​​​​

 

相关标签: scala函数式编程

上一篇: RSA 加密解密

下一篇: Java基本概念