Scala 基础(九):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 函数式编程(一)基础(一)概念、定义、调用机制的更多相关文章
- 5. Scala函数式编程的基础
5.1 函数式编程内容及介绍顺序说明 5.1.1 函数式编程内容 -函数式编程基础 函数定义/声明 函数运行机制 递归(难点,[最短路径,邮差问题,迷宫问题,回溯]) 过程 惰性函数和异常 -函数式编 ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- Scala - 快速学习09 - 函数式编程:一些操作
1- 集合类(collection) 系统地区分了可变的和不可变的集合. scala.collection包中所有的集合类 可变集合(Mutable) 顾名思义,意味着可以修改,移除或者添加一个元素. ...
- Scala - 快速学习08 - 函数式编程:高阶函数
函数式编程的崛起 函数式编程中的“值不可变性”避免了对公共的可变状态进行同步访问控制的复杂问题,能够较好满足分布式并行编程的需求,适应大数据时代的到来. 函数是第一等公民 可以作为实参传递给另外一个函 ...
- 2015/9/18 Python基础(14):函数式编程
这篇写了忘发.现在补上. Python不是也不大可能成为一种函数式的编程语言,但是它支持许多有价值的函数式编程语言构建.也有些表现的像函数式编程机制但是从传统上也不能认为是函数式编程语言的构建.Pyt ...
- Python基础:09函数式编程
Python支持一些函数式编程的特性.比如lambda. map().reduce().filter()函数. 一:匿名函数与lambda Python可以用lambda 关键字创造匿名函数.匿名函数 ...
- Scala实战高手****第14课:Scala集合上的函数式编程实战及Spark源码鉴赏
package com.dt.spark.scala.bascis object Functional_Itearal { def main(args: Array[String]): Unit ...
- python基础语法_9-2函数式编程
https://www.imooc.com/learn/317 大纲 1-函数式编程简介 2-高阶函数 3-把函数作为参数 4-map()函数 5-reduce()函数 6-filter()函数 7- ...
- Python基础笔记:函数式编程:高阶函数、返回函数、匿名函数
高阶函数 高阶函数:一个函数可以接收另一个函数作为参数 或 一个函数可以返回一个函数作为返回值,这种函数称之为高阶函数. #函数 add 接收 f 函数作为参数 >>> def ad ...
- scala函数式编程(二) scala基础语法介绍
上次我们介绍了函数式编程的好处,并使用scala写了一个小小的例子帮助大家理解,从这里开始我将真正开始介绍scala编程的一些内容. 这里会先重点介绍scala的一些语法.当然,这里是假设你有一些ja ...
随机推荐
- 【Jmeter】分布式压测环境配置
注意:以下四点都必须一致 1.jmeter版本 2.内置插件 3.jdk版本1.8以上 4.同属一个局域网 助攻机设置 本机助攻机Linux系统,首先需要安装JDK并配置环境 JDk基本安装及配置环境 ...
- grafana repeat 特性
1.设置变量 成功后会自动复制变量值个数的的画图板 类似下图 设置后是不能与预览结果的,需要保存后 切换到其他dashboard 再切换回来就可以看见了 官方文档repeat说明
- TensorFlow笔记——关于MNIST数据的一个简单的例子
这个程序参考自极客学院. from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf # MN ...
- python常用模块-os
得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文件:os.remove() 删除多个目录 ...
- Android学习笔记上下文菜单
布局文件main_activity.xml <?xml version="1.0" encoding="utf-8"?> <RelativeL ...
- Appium查看应用包名
方式一没有apk 如果应用已经安装在手机上了(例如应用商城下载).可以直接打开手机上该应用, 进入到要操作的界面然后执行: adb shell dumpsys activity recents | f ...
- .NET Core Hangfire周期性作业调度问题
前言 四月中旬Hangfire团队发布了1.7.11版本,在使用周期性作业调度过程中发现一个问题,这个问题应该一直未解决,故做此记录,希望遇到的童鞋根据项目业务而避开这个问题. 周期性作业调度 我们依 ...
- django OperationalError: unable to open database file 创建数据库
- SSM-框架搭建-tank后台学习系统
一.前言 最近收到很多网友给我私信,学习软件开发有点吃力,不知道从何处开始学习,会点基础但是做不出来什么项目, 都想放弃了.我就回复道:当下互联网飞速发展,软件开发行业非常吃香而且前景相当不错.希望能 ...
- FIS3安装与编译
安装 FIS3 npm install -g fis3 -g 安装到全局目录,必须使用全局安装,当全局安装后才能在命令行(cmd或者终端)找到 fis3 命令 安装过程中遇到问题具体请参考 fis#5 ...