函数的介绍

 

  1. 函数和方法的区别:

    1. 在oop中,方法必须在类中,不能脱离class独立存在 
    2. FP中,函数可以独立存在的,不需要依赖于class类

    3. 对于类似Scala语言(或者Python语言)既是OOP又是FP编程

  2. 函数的定义:
    1. 函数就是讲代码块封装起来的可以实现某种功能并且可以重复使用
  3. 函数的语法:def max(x: Int, y: Int): Int = {}
    1. def 声明max为一个函数
    2. max :表示的函数名称
    3. (x: Int, y: Int) :表示函数的参数(两个参数,参数的类型都为Int类型)
    4. int :表示的是函数的返回值类型,在Scala中没有void数据类型,Unit表示的就是没有返回值
    5. 注意:在对函数进行定义时,可以指定函数的参数的默认值,如果不对参数进行重新赋值,就使用默认值,默认值一般都放在参数列表的最后:def sayHello(name: String, say: String = "hello"): Unit = {
  4. 函数的调用
    1. 无默认值:从前到后依次赋值
    2. 有默认值:在调用的时候指定变量 的名称进行赋值,不需要按照顺序;从前到后依次赋值,不需要指定名称(有默认值的也会被赋值)
        def pri(x :Int,y :Int =4,z:Int)=print(s"$x,$y,$z")
        pri(x =4,z =6)
  5. 函数类型:
    1.   name :String :name表示是变量的名称,String 表示字符串数据类型
    2.   f:(T1,T2)=>R 或  f:T =>R        
      1. f:表示的是函数的名称,(T1,T2)=>R 和T =>R 表示函数类型
      2. T、T1、T2 :表示的函数的参数的数据类型,此次表示的是泛型
      3. R表示的是函数的返回值的数据类型,此处也是泛型
  6. 匿名函数:
    1. 匿名函数的基本格式:(变量名:参数类型...,变量名:参数类型) =>{函数体}
    2. 函数体如果是多行代码的话,使用{},如果是单行代码,通常省略{}
    3. 将一个匿名函数赋值给一个变量 val addValue = (x: Int, y: Int) => x + y
    4. 匿名函数不需要指定函数体的返回值,将会通过函数体进行推断
  7. 高阶函数
    1. 定义:如果函数f的参数中有参数为函数g,则f称为高阶函数
    2. 高阶函数传递函数参数的方式

      1. 直接使用匿名函数

      2. 传递满足要去的函数 
  8. 函数的简写:
    1. scala中通用的简写:
      1. 当{}里面的代码块就只有一行代码时候,{}可以省略不写
      2. 当数据的类型可以由代码块推断出时候,可以省略写返回值类型
    2. scala中函数的简写:
      1. 函数的返回值类型可以由函数体推断,可以省略
      2. 如果函数体就只有一行代码,可以省略{}
      3. 如果函数没有返回值,则可以省略Unit和=
      4. 如果函数没有参数,则可以省略()
    3. 匿名函数的简化形式
      1. 匿名函数的参数的类型可以推断获取,则可以省略不写
      2. 匿名函数只有一个参数可以省略()
      3. 如果匿名函数的参数在函数体中有且仅使用一次,而且独立使用,参数可以用_代替
      4. 由于高阶函数调用匿名函数的时候,匿名函数的参数的数据类型是可以推断出的,所以不需要写明参数的类型
  9. 一些常用的函数
    1. contains:判断是否包含
    2. isEmpty:判断是否为空
    3. max:求最大值
    4. min:求最小值
    5. sum:求和
    6. list1.zip(list2):将两个list合并成一个map
    7. zipList.unzip:将一个map分解两个list
    8. list.zipWithIndex:将一个list和其下标合成一个map
    9. mkString:将数组转换为一个字符串,指定各个元素之间的分隔符:array.mkString(", ")和array.mkString("< ", ", ", " >")(前后加上<和>)
    10. take:获取前几个
    11. takeRight:从右边开始获取前几个
    12. takeLeft:从左边开始获取前几个
    13. reverse:反转
    14. swap:二元组的key和value互换位置

 

 

 



原文地址:https://www.cnblogs.com/WeiKing/p/11535256.html