zoukankan      html  css  js  c++  java
  • Scala(三)【函数式编程】

    一.方法和函数

    1.方法

    1)基本语法

    def 方法名(参数名:参数类型,...):返回值类型 = {方法体}

    示例

      def add(x: Int, y: Int): Int = {
        x + y
      }
    
    2)简化原则

    1、方法体中只有一行语句的时候,{ }可以省略

    示例

      def add(x: Int, y: Int): Int = x + y
    

    2、如果将方法体中最后一行表达式作为方法的返回值,返回值类型可以省略

    示例

      def add(x: Int, y: Int) = {
        x + y
      }
    

    注意

    ​ 方法体中有return,必须定义方法的返回值类型
    ​ 递归方法必须定义返回值类型

    3、如果方法不需要返回值, =可以省略

    示例

      def func(x: Int) {
        print(x)
      }
    

    4、如果方法不需要参数,()可以省略

    示例

      def func1 = {
        print("hello world")
      }
    

    注意

    ​ 如果定义方法的时候,没有(),在调用的时候也不能带上()

    ​ 如果定义方法的时候有(),调用方法的时候()可有可无

    ​ =、()、{}不能够同时省略

    3)方法参数

    1.默认参数

    在定义方法的时候,可以给参数一个默认值,后续在调用方法的时候,有默认值的参数就可以不用传参

    示例

      def add(y: Int,x: Int = 2, y: Int = 3) = {
        x + y + z
      }
    	//不赋值使用默认值
    	add(3)
    

    2.带名参数

    指定将值传递给哪个参数

       add(x=3,y=4)
    

    3.可变参数

    定义func,address参数可变

      def func(name:String,address:String*) ={
        print(s"name:${name},address:${address}")
      }
    

    调用可以函数,不能直接传递数组,要通过 数组名:_* 的形式传递

      val arr = List("北京市","丰台区","槐房村")
      func("zhangsan",arr:_*)
      add(x=3,y=4)
    

    注意

    可变参数必须放在参数列表的最后

    可变参数不能与默认值、带名参数一起使用

    2.函数

    语法: val 函数名 = (参数名:参数类型,..) => {函数体}

    简化: 函数体中只有一行语句的时候,{}可以省略

    示例

    val func = (x:Int,y:Int) => x+y
    

    3.方法和函数的区别

    1)方法可以重写,函数不可用重写

    2)方法是存在于方法区,函数存在堆中

    3)方法可以转成函数,函数不能转成方法。

    ​ 方法转函数: 方法名 _

     // add方法
     def add(x: Int = 2, y: Int = 3) = {
        x + y
      }
      //将add方法转fun函数
      val fun = add _ 
    

    但是在Scala中,函数和方法没有明确的界定:方法就是函数,函数也是对象

    二.高阶函数

    定义:方法/函数参数/返回值 是一个函数

    示例

      def fun1(x:Int,y:Int,fun2:(Int,Int)=>Int) ={
        fun2(x,y)
      }
      // 定义函数
      val add = (x:Int,y:Int) => x+y
      // 调用高阶函数fun1
      println(fun1(1, 2, add))
    

    三.匿名函数

    定义:没有名字的函数,一般作为值进行传递

    示例

      def fun1(x:Int,y:Int,fun2:(Int,Int)=>Int) ={
        fun2(x,y)
      }
      //_+_: 简写(x:Int,y:Int)=>(x=y)
      fun1(1,2,_+_)
    

    四.柯里化

    定义: 有多组参数列表的方法称之为柯里化方法

    示例

    def m1(x:Int)(y:Int,z:Int) = x+y+z
    

    演变过程

      def fun1(x:Int):(Int,Int) => Int ={
        (y:Int,z:Int) => x +y+z
      }
      
      fun1(1)(2,3)
    

    五.闭包

    定义: 函数体中使用不属于函数本身的变量,这样的函数称之为闭包

    示例

    val x = 10
    val func = (y:Int) => x+y
    
  • 相关阅读:
    个人技术总结--MUI框架的h5+前端开发
    无废话MVC入门教程四[视图中的Layout使用]
    VMware Workstation 12 安装大于4GB的GHOST 64位win7系统
    转:VMware Workstation 14虚拟机安装Win7系统图文教程(详细)
    VMware Workstation Pro v15.5.6 官方版+激活密钥
    Idea 全局替换指定字符
    Springboot 使用PageHelper分页插件实现分页
    使用redis做分布式锁
    浅说缓存穿透、缓存击穿、缓存雪崩
    linux下安装mysql5.6
  • 原文地址:https://www.cnblogs.com/wh984763176/p/13361127.html
Copyright © 2011-2022 走看看