scala基础:scala函数式编程基础概念定义调用机制

qiu-hua qiu-hua     2022-12-05     803

关键词:

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基础语法介绍

...la的一些语法。当然,这里是假设你有一些java或者python的基础,毕竟大部分人不会将scala当作第一门学习编程的语言。不过这些语法知识记不住也没关系,本身语法这种东西就应该在使用中被记住。这里写这篇的目的也只是梳理... 查看详情

scala学习(函数式编程面向对象编程)(代码片段)

文章目录函数式编程基础函数编程函数定义函数参数函数至简原则高阶函数编程面向对象编程基础面向对象编程高阶面向对象编程函数式编程基础函数编程函数定义packagelearn03objectdemo01defmain(args:Array[String]):Unit=//无参、无返回... 查看详情

scala学习(函数式编程面向对象编程)(代码片段)

文章目录函数式编程基础函数编程函数定义函数参数函数至简原则高阶函数编程面向对象编程基础面向对象编程高阶面向对象编程函数式编程基础函数编程函数定义packagelearn03objectdemo01defmain(args:Array[String]):Unit=//无参、无返回... 查看详情

scala基础篇-函数式编程的重要特性

 1.纯函数表示函数无副作用(状态变化)。2.引用透明性表示对相同输入,总是得到相同输出。3.函数是一等公民函数与变量、对象、类是同一等级。表示可以把函数当做参数传入另一个函数,或者作为函数的返回值,甚至可... 查看详情

scala学习——基础语法

Scala语言是一种面向对象语言,结合了命令式(imperative)和函数式(functional)编程风格,其设计理念是创造一种更好地支持组件的语言。 特性多范式(Multi-Paradigm)编程语言,类似Java、C#;继承面向对象编程和函数式编程的... 查看详情

scala

scala一:scala基础1概念Scala就是一门语言,是spark的框架语言.继承了面向对象编程和函数式编程.Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼... 查看详情

scala基础(代码片段)

Scala基础Scala是一门类似Java的多范式语言,集合了面向对象编程和函数式编程的特性。使用Scala语言编写Spark应用程序的考虑:1)Scala具有强大的并发性,支持函数式编程,可以更好的支持分布式系统。在大数... 查看详情

scala编程基础

Scala与Java的关系...1安装Scala.1Scala解释器的使用...2声明变量...2数据类型与操作符...2函数调用与apply()函数...3if表达式...3语句终结符、块表达式...4输入和输出...4循环...4高级for循环...5函数的定义与调用...5在代码块中定义包含多行... 查看详情

未完成scala基础(代码片段)

 0.说明    1.基本概念  1.0Scala是什么  Scala 是一门多范式的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。   1.1变量&常量  在Scala中,使用关键词"var"声明变量,使用... 查看详情

spark基础-scala学习(代码片段)

函数式编程将函数赋值给变量匿名函数高阶函数高级函数的类型推断scala的常用高阶函数闭包sam转换currying函数return将函数赋值给变量scala中的函数是一等公民,可以独立定义,独立存在,而且可以直接将函数作为值赋值给变量sca... 查看详情

scala的基础概念

scala方法的定义:defmethed(参数:类型..):返回类型={}:非递归返回类型可以省略返回类型;返回类型是Unit时,可以省略=;函数的定义:valf:类型=>类型={参数=>返回};valf=(参数列表)=>{实现}:函数可以作为方法的参数;方... 查看详情

scala基础(代码片段)

scala是一门多范式的编程语言,一种类似java的编程语言,以JVM为目标环境,将面向对象和函数式编程有机的结合在一起应用:spark大数据开发 1、声明值和变量关键字val和varval定义的值是常量,不可改变;var定义的是变量,可... 查看详情

scala基础:类和对象访问修饰符和构造器(代码片段)

...是一种编程思想,它是基于面向过程的,强调的是以对象为基础完成各种操作.面向 查看详情

scala学习笔记编程基础

强烈推荐参考该课程:http://www.runoob.com/scala/scala-tutorial.html1.  Scala概述1.1. 什么是ScalaScala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并... 查看详情

spark基础学习笔记13:scala函数(代码片段)

文章目录零、本讲学习目标一、声明函数(一)显式声明函数1、声明格式2、注意事项3、案例演示(二)隐式声明函数1、声明格式2、注意事项3、案例演示二、Scala函数种类(一)成员方法1、基本概念2、... 查看详情

spark基础-scala学习(集合)(代码片段)

集合scala的集合体系结构ListLinkedListSet集合的函数式编程函数式编程综合案例:统计多个文本内的单词总数scala的集合体系结构scala中的集合体系主要包括:Iterable、Seq、Set、Map。其中Iterable是所有集合trait的根trait。这个结构与java... 查看详情

scala的安装,入门,学习,基础

1:Scala的官方网址:http://www.scala-lang.org/推荐学习教程:http://www.runoob.com/scala/scala-tutorial.html  Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),... 查看详情

spark基础学习笔记08:scala简介与安装(代码片段)

文章目录零、本讲学习目标一、Scala简介(一)Scala概述(二)函数式编程(三)Scala特性1、一切都是对象2、一切都是函数3、一切都是表达式(四)在线运行Scala二、Windows上安装Scala(一)... 查看详情