码迷,mamicode.com
首页 > 其他好文 > 详细

Scala 基础(九):Scala 函数式编程(一)基础(一)概念、定义、调用机制

时间:2020-07-07 13:35:12      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:参数   推导   影响   函数   直接   调用   返回   顺序   scala语法   

1 概念的说明

1)在scala中,方法和函数几乎可以等同(比如他们的定义、使用、运行机制都一样的),只是函数的使用方式更加的灵活多样。

2)函数式编程是从编程方式(范式)的角度来谈的,可以这样理解:函数式编程把函数当做一等公民,充分利用函数、 支持的函数的多种使用方式。

3)面向对象编程是以对象为基础的编程方式。

4)在scala中函数式编程和面向对象编程融合在一起了 。

方法、函数、函数式编程和面向对象编程关系分析图

技术图片

 

2. 函数的定义

定义:

 为完成某一功能的程序指令(语句)的集合,称为函数。

基本语法:

def 函数名 ([参数名: 参数类型], ...)[[: 返回值类型] =] {

语句... return 返回值

}

1)函数声明关键字为def (definition)

2)[参数名: 参数类型], ...:表示函数的输入(就是参数列表), 可以没有。 如果有,多个参数使用逗号间隔

3)函数中的语句:表示为了实现某一功能代码块

4)函数可以有返回值,也可以没有

5)返回值形式1:    : 返回值类型  =   

6)返回值形式2: = 表示返回值类型不确定,使用类型推导完成

7)返回值形式3: 表示没有返回值,return 不生效

8)如果没有return ,默认以执行到最后一行的结果作为返回值

3 函数-调用机制

函数-调用过程

技术图片

 

 技术图片

 

 

函数-递归调用

一个函数在函数体内又调用了本身,我们称为递归调用

递归调用快速入门

技术图片    技术图片

函数递归需要遵守的重要原则(总结):

1)程序执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)

2)函数的局部变量是独立的,不会相互影响

3)递归必须向退出递归的条件逼近,否则就是无限递归,死归了:)

4)当一个函数执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁。

4 函数注意事项和细节讨论

1)函数的形参列表可以是多个, 如果函数没有形参,调用时 可以不带()

技术图片

 

 2)形参列表和返回值列表的数据类型可以是值类型和引用类型。

3)Scala中的函数可以根据函数体最后一行代码自行推断函数返回值类型。那么在这种情况下,return关键字可以省略

技术图片  技术图片

 

 4)因为Scala可以自行推断,所以在省略return关键字的场合,返回值类型也可以省略

5)如果函数明确使用return关键字,那么函数返回就不能使用自行推断了,这时要明确写成 : 返回类型 = ,当然如果你什么都不写,即使有return 返回值为()

 技术图片

 

 6)如果函数明确声明无返回值(声明Unit),那么函数体中即使使用return关键字也不会有返回值

7)如果明确函数无返回值或不确定返回值类型,那么返回值类 型可以省略(或声明为Any)

技术图片 技术图片

 

 8)Scala语法中任何的语法结构都可以嵌套其他语法结构(灵活),即:函数中可以再声明/定义函数,类中可以再声明类 ,方法中可以再声明/定义方法

 9)Scala函数的形参,在声明参数时,直接赋初始值(默认值),这时调用函数时,如果没有指定实参,则会使用默认值。如果指定了实参,则实参会覆盖默认值

技术图片

 

 10)如果函数存在多个参数,每一个参数都可以设定默认值,那么这个时候,传递的参数到底是覆盖默认值,还是赋值给没有默认值的参数,

就不确定了(默认按照声明顺序[从左到右])。在这种情况下,可以采用带名参数  

技术图片 技术图片

 

 11) scala 函数的形参默认是val的,因此不能在函数中进行修改.

 12)递归函数未执行之前是无法推断出来结果类型,在使用时必须有明确的返回值类型    

13)Scala函数支持可变参数

技术图片

1)args 是集合, 通过 for循环 可以访问到各个值。

 

2)案例演示: 编写一个函数sum ,可以求出 1到多个int的和

3) 可变参数需要写在形参列表的最后。

 

Scala 基础(九):Scala 函数式编程(一)基础(一)概念、定义、调用机制

标签:参数   推导   影响   函数   直接   调用   返回   顺序   scala语法   

原文地址:https://www.cnblogs.com/qiu-hua/p/13260069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!