zoukankan      html  css  js  c++  java
  • 寒假学习记录第四天

    Scala方法与函数

    1. Scala方法的定义
    • 有参方法
    • 无参方法

     

    def fun (a: Int , b: Int ) : Unit = {

       println(a+b)

     }

    fun(1,1)

        

    def fun1 (a : Int , b : Int)= a+b

        println(fun1(1,2))  

    注意点:

    方法定义语法 def来定义

    l 可以定义传入的参数,要指定传入参数的类型

    l 方法可以写返回值的类型也可以不写,会自动推断,有时候不能省略,必须写,比如在递归方法中或者方法的返回值是函数类型的时候。

    l scala中方法有返回值时,可以写return,也可以不写return,会把方法中最后一行当做结果返回。当写return时,必须要写方法的返回值。

    如果返回值可以一行搞定,可以将{}省略不写

    传递给方法的参数可以在方法中使用,并且scala规定方法的传过来的参数为val的,不是var的。

    如果去掉方法体前面的等号,那么这个方法返回类型必定是Unit的。这种说法无论方法体里面什么逻辑都成立,scala可以把任意类型转换为Unit.假设,里面的逻辑最后返回了一个string,那么这个返回值会被转换成Unit,并且值会被丢弃。

    1. 递归方法

      /**

         * 递归方法

         * 5的阶乘

         */

        def fun2(num :Int) :Int= {

          if(num ==1)

            num

          else 

            num * fun2(num-1)

        }

        print(fun2(5))

    1. 参数有默认值的方法

    默认值的函数中,如果传入的参数个数与函数定义相同,则传入的数值会覆盖默认值

    如果不想覆盖默认值,传入的参数个数小于定义的函数的参数,则需要指定参数名称

       /**

         * 包含默认参数值的函数

         * 注意:

         * 1.默认值的函数中,如果传入的参数个数与函数定义相同,则传入的数值会覆盖默认值

         * 2.如果不想覆盖默认值,传入的参数个数小于定义的函数的参数,则需要指定参数名称

         */

        def fun3(a :Int = 10,b:Int) = {

          println(a+b)

        }

        fun3(b=2)

    1. 可变参数的方法

    l 多个参数用逗号分开

        /**

         * 可变参数个数的函数

         * 注意:多个参数逗号分开

         */

        def fun4(elements :Int*)={

          var sum = 0;

          for(elem <- elements){

            sum += elem

          }

          sum

        }

        println(fun4(1,2,3,4))

    1. 匿名函数
      1. 有参匿名函数
      2. 无参匿名函数
      3. 有返回值的匿名函数

    可以将匿名函数返回给val定义的值

    l 匿名函数不能显式声明函数的返回类型

        /**

         * 匿名函数

         * 1.有参数匿名函数

         * 2.无参数匿名函数

         * 3.有返回值的匿名函数

         * 注意:

         * 可以将匿名函数返回给定义的一个变量

         */

        //有参数匿名函数

        val value1 = (a : Int) => {

          println(a)

        }

        value1(1)

        //无参数匿名函数

        val value2 = ()=>{

          println("我爱尚学堂")

        }

        value2()

        //有返回值的匿名函数

        val value3 = (a:Int,b:Int) =>{

          a+b

        }

        println(value3(4,4)) 

    1. 嵌套方法

        /**

         * 嵌套方法

         * 例如:嵌套方法求5的阶乘

         */

        def fun5(num:Int)={

          def fun6(a:Int,b:Int):Int={

            if(a == 1){

              b

            }else{

              fun6(a-1,a*b)

            }

          }

          fun6(num,1)

        }

        println(fun5(5))

     

    1. 偏应用函数

    偏应用函数是一种表达式,不需要提供函数需要的所有参数,只需要提供部分,或不提供所需参数。

        /**

         * 偏应用函数

         */

        def log(date :Date, s :String)= {

          println("date is "+ date +",log is "+ s)

        }

        

        val date = new Date()

        log(date ,"log1")

        log(date ,"log2")

        log(date ,"log3")

        

        //想要调用log,以上变化的是第二个参数,可以用偏应用函数处理

        val logWithDate = log(date,_:String)

        logWithDate("log11")

        logWithDate("log22")

        logWithDate("log33")

    1. 高阶函数

    函数的参数是函数,或者函数的返回类型是函数,或者函数的参数和函数的返回类型是函数的函数。

    l 函数的参数是函数

    l 函数的返回是函数

    l 函数的参数和函数的返回是函数

        /**

         * 高阶函数

         * 函数的参数是函数 或者函数的返回是函数 或者函数的参数和返回都是函数

         */

        

        //函数的参数是函数

        def hightFun(f : (Int,Int) =>Int, a:Int ) : Int = {

          f(a,100)

        }

        def f(v1 :Int,v2: Int):Int  = {

          v1+v2

        }

        

        println(hightFun(f, 1))

        

        //函数的返回是函数

        //12,3,4相加

        def hightFun2(a : Int,b:Int) : (Int,Int)=>Int = {

          def f2 (v1: Int,v2:Int) :Int = {

            v1+v2+a+b

          }

          f2

        }

        println(hightFun2(1,2)(3,4))

        

        //函数的参数是函数,函数的返回是函数

        def hightFun3(f : (Int ,Int) => Int) : (Int,Int) => Int = {

          f

        }

        println(hightFun3(f)(100,200))

        println(hightFun3((a,b) =>{a+b})(200,200))

        //以上这句话还可以写成这样

        //如果函数的参数在方法体中只使用了一次 那么可以写成_表示

        println(hightFun3(_+_)(200,200))

    1. 柯里化函数

    l 高阶函数的简化

       /**

         * 柯里化函数

         */

        def fun7(a :Int,b:Int)(c:Int,d:Int) = {

          a+b+c+d

        }

        println(fun7(1,2)(3,4))

  • 相关阅读:
    Java发生的重大事件
    Java的特点
    JVM的整体结构
    JVM生态圈
    简历不造假,根本就找不到工作?如果你这样想就OUT了
    C语言必背18个经典程序,你记住了吗
    黑客入侵的常用手段,你真的要做好防护了
    从零开始自学Linux,一篇文章带你快速找准学习方向
    还在担心学Linux懵圈吗?掌握这份Linux思维导图,你就能成为高手
    为何计算机专业大一期间先选择学习C语言,而不是其他语言呢?
  • 原文地址:https://www.cnblogs.com/xuange1/p/12257456.html
Copyright © 2011-2022 走看看