Category 奇遇任务簿

一 函数

方法和函数的作用几乎是一样的 ,但是函数在使用的过程中更加灵活和多样化scala 中函数是头等公民 ,可以作为方法的返回值和参数使用scala 是一个集面向对象和面向函数于一身的多范式编程语言 ,灵活的函数是函数式编程的一种体现函数的使用使代码更加的简洁和优雅1 函数是什么

是scala中的一种函数式编程语言 ,函数是 scala 中的头等公民 ,建议优先使用函数 .函数实现的功能和方法一样,但是我们可以把函数理解成一种特殊的业务逻辑对象 ,所有行数可以作为方法的返回值和参数...函数也是用来处理数据的代码封装

2 函数的定义

2.1 方式一(在实参这里指定参数数据类型,不需要指定返回值类型 ,scala编译器自动推导)

val| var 函数名称=(函数的参数列表) => 函数体

val parseStr = (str: String) => {

str.toUpperCase()

}

函数体中的内容只有一行代码可以省略大括号

var product = (x:Double) => x*x

注意 : 函数可以作为最终表达式存在 ,返回的内容就是函数的签名 ( 签名 : 函数的名称 ,函数的参数, 函数的返回值类型 ), 这种定义方式不需要指定返回值类型 ,编译器会自动推导

2.2 方式二 (函数名后面指定参数类型和返回值类型 ,在实际参数那里就不需要指定了)

val | var 函数名称:(输入参数类型)=> 返回值类型 = (参数的引用)=> 函数体

val add2:(Int,Int)=>Int=(x,y)=>{

x+y

}

add2 函数名

(Int ,Int) 要处理的参数类型列表

=>Int 函数处理完数据的返回值类型

=(x,y) 传入实际参数的接收变量名

{x+y} 函数体 运算求和

注意: 代码块的最后一行是函数的返回值 ,需要和=>(Int)类型保持一致

注意 : 代码块的最后一行是返回值

2.2.1 代码块是可以有返回值的 ,最后一行就是返回值 ,如果最后一行是 printlin () 打印代码 ,则返回 () .

2.2.2 流程分支中接收结果的是多个分支返回值的父类型 (AnyVal)

2.2.3 在函数表达式中 ,代码块的最后一行是函数的返回值 ,需要和 =>(数据类型) 类型保持一致

2.3 特殊的没有参数的函数

函数方式一 :没有参数的函数表达式

val show2=()=>{

println("show2......")

}

函数方式二 :没有参数的函数表达式

val show:()=>Unit=()=>{

println("show.....")

}

val get:()=>String=()=>{

"给你们"

}

没有参数的函数, scala编译器会自动推断类型

val get2=()=>{

""

}

代码块的最后一行是返回值

3 函数总结

函数中的参数列表可以有多个 ,也可以没有 ,没有参数的函数调用的时候不用写 ()函数的参数和返回值类型可以是值类型 ,也可以是引用类型方法的参数和返回值有一个是函数的方法就是高阶函数(方法)函数的最后一行为推断函数返回值的重要依据 ,可以省略 return函数中可以再声明函数代码块的最后一行是函数的返回值 ,需要和 =>(数据类型) 类型保持一致二 方法

是逻辑片段的封装 ,可以处理一个或多个数据 ,可以有返回值也可以没有 ,提高了代码的复用性

1 方法的定义

def functionName ([参数列表]) : [return type] = {

function body()

return [expr]

}

没有等号和方法体的方法称为抽象方法,抽象方法定义在抽象类和特质中

注意 : 代码块的最后一行是返回值

方法的定义 : def 方法名(参数名1:参数类型1,参数名2:参数类型2....):返回值类型={(return)方法体}

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

x + y

}

def add2(x:Int , y:Int ,z:Int): Int = {

return x+y+z

}

def show(x:String ,y:String): String={

return x+y

}

这里的 Unit 相当于 java 的 void

def show:Unit ={

println("show 身材")

}

def show1() :Unit={

println("show 孩子")

}

2 方法的调用

2.1 本类中 方法名(实参)

方法的定义 : def 方法名(参数名1:参数类型1,参数名2:参数类型2....):返回值类型={(return)方法体}

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

x + y

}

调用 add()方法

val sum1: Int = add(2,3)

println(sum1) // 5

方法的定义(参数是字符类型)

def show(x:String ,y:String): String={

return x+y

}

调用 show() 方法

val str: String = show("woaiqq","aibaobei")

println(str) // woaiqqaibaobei

这里的 Unit 相当于 java 的 void

def show:Unit ={

println("show 身材")

}

def show1() :Unit={

println("show 孩子")

}

调用 show 方法

show // show 身材

调用 show1() 方法 : 带括号的方法空参时 ,调用该方法的时候可以带括号也可以不带括号

show1() // show 孩子

show1 // show 孩子

2.2 调用object中的方法 类名.方法(实参)

object MyUtils {

def test1() :Unit={

println("这里调用的方法是在类之外的 object类中的方法........")

}

}

object MethodLearning01 {

def main(args: Array[String]): Unit = {

调用 object 类中的方法 ==> 类名.方法名()

MyUtils.test1() // 这里调用的方法是在类外的 object类中的方法........

}

}

2.3 调用 class 类中的方法 new 类() .方法名(参数)

class MyUtils{

def test2() :Unit={

println("这里调用的是类外的class类的方法..........")

}

}

object Method01 {

def main(args: Array[String]): Unit = {

调用 class 类中的方法 ==> new 类().方法名()

val ob = new MyUtils()

ob.test2() // 这里调用的是类外的 class类中的方法...........

new MyUtils().test2() // 这里调用的是类外的 class类中的方法..........

}

}

2.4 import 类(object)._ 调用方法 直接方法名

2.5 注意 :

没有参数的方法建议写上括号 ,如果不写,调用的时候也不要写 ;方法的返回值 ,一般建议使用 return3 函数和方法的互相转换和区别

3.1 互相转换

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

x + y

}

将方法转换成函数

val f = add _

当我们将方法作为参数传递的时候,其实底层就是将方法自动转换成函数

3.2 区别和联系

在函数式编程语言中 ,函数是"头等公民" ,它可以像任何其他数据类型一样被传递

函数可以当成值来进行传递 ,方法的参数和返回值都可以是函数

函数和变量 / 类 /对象 ,是一个级别的

1) 方法用 "def" 关键字定义 ,函数的标识是 "=>"

2) 方法不能作为最终的表达式存在 ,但是函数可以 ,返回函数的签名信息

3) 方法和函数调用的时候都需要显示的传入参数

4) 函数可以作为方法的参数 ,和返回值类型

Copyright © 2088 天地武侠修行录 - 国风网游活动秘境 All Rights Reserved.
友情链接