Scala基础学习-方法和函数

一、 方法

1.方法格式
解释:在开发代码中,通常有大量的代码,势必出现重复代码,如果放在方法中,只需要执行一次就行。
格式:

def 方法名(参数名:参数类型,参数名:参数类型):[return type]={//方法体
}

案例:
1.定义一个getMax,用来获取两个整数数据的最大值,并返回结果
2.调用该方法获取最大值,并将结果打印到控制台上

//定义一个方法getMax
def getMax(a:Int,b:Int):Int={return if(a >= b) a else b  //"return" 用于函数或方法中,表示函数执行完成后返回给调用者一个值
}//调用上面函数
```scala
val max = (20, 30)
println("max:" + max)
结果:30

代码简化版

def getMax(a:Int,b:Int)=if(a >= b) a else b //调用,另起一个类调用上面
val max = (20, 30)
println("max:" + max)

2.返回值类型推段
解释:scala定义方法可以省略返回值数据类型,由scala自动推断返回值类型
注意:递归方法不能省略返回值
案例:
特殊情况递归方法,定义一个方法计算某个数据的阶乘

def factorial(n:Int):Int = if(n == 1) 1 else n * factorial(n - 1)
// 递归方法中factorial 方法调用用户factorial ,自己调用自己,这里 方法名后面的:Int,不能省略val num = factorial(5)
println("num")

3.惰性方法
解释:当记录方法返回值的变量被声明为lazy时,方法的执行会被推迟,直到我们首次使用该值时,方法才会执行

object test {def main(args: Array[String]): Unit = {def gitSum(a:Int,b:Int) = a + blazy val suml = gitSum(10,20) //这个时候gitSum并没有计算,只有在下面被调度的时候才会计算}
}

4.方法参数
4.1、默认参数
解释:在定义方法时可以给参数定义一个默认值
案例:

object test {def main(args: Array[String]): Unit = {def gitSum(a:Int = 10,b:Int = 20) = a + b //可以在定义式,直接给初始值val suml = gitSum()println(suml)}
}

4.2、带名参数
在调用方法时,可以指定参数的名称来进行调用

object test {def main(args: Array[String]): Unit = {def gitSum(a:Int = 10,b:Int = 20) = a + bval suml = gitSum(a = 1) //可以在调用的使用指定某个参数,给他赋值println(suml)}
}

4.3、变长参数
解释:如果方法的参数式不固定的,可以将方法的参数定义成变长参数
格式:

def 方法名(参数名:参数类型*):返回值类型 = {//方法体
}

案例:

object test {def main(args: Array[String]): Unit = {def gitSum(numbers:Int*) = numbers.sumval suml = gitSum(1,2,3,4)println(suml)}
}
结果:10

5.方法调用方法
5.1、后缀调用
案例:

object test {def main(args: Array[String]): Unit = {val a = Math.abs(-10) //求绝对值println(a )}
}

二、 函数

1.定义函数
语法:

val 函数变量名= (参数名:参数类型,参数名:参数类型...) => 函数体

案例:

val getSumn = (a:Int,b:Int) => a + b
val sum = getSumn(11,22)
println("sum:" + sum)
结果:sum:33

2.方法和函数的区别

//函数:可以用一个参数(getSum)来接受函数结构
val getSum = (a:Int,b:Int) => a + b//方法:不能用参数接收他
def add(a:Int,b:Int) = a + b

3.将方法转换为函数
格式:

val 变量名 = 方法名 _

案例:

object test {def main(args: Array[String]): Unit = {def add(a: Int, b: Int) = a + bval a = add _val sum = a(10, 20)println("sum:" + sum)}
}
结果:30

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【图解计算机网络】http1.1,http2.0,http3.0

http1.1,http2.0,http3.0 http1.1长连接管道传输缺点 http2.0头部压缩二进制格式并发传输服务端推送缺点 http3.0无队头阻塞快速建立连接连接迁移 http1.1 长连接 在http1.0的时候,一次http请求就要建立一次TCP连接,这一次的htt…

LeetCode 654.最大二叉树

LeetCode 654.最大二叉树 1、题目 题目链接:654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地…

11、关系运算符、逻辑运算符(讲解 和 的区别)、赋值表达式、三目表达式、运算符优先级(超详细版本)+结合性的分析

这里写目录标题 一、关系运算符(比较运算符)二、⭐逻辑运算符1、 && 和 &2、|| 或 |3、!4、^ 三、赋值运算符四、三目运算符(条件运算符)五、运算符优先级 在讲之前先明确几个概念: 1、单目运算…

【人工智能基础】GAN与WGAN实验

一、GAN网络概述 GAN:生成对抗网络。GAN网络中存在两个网络:G(Generator,生成网络)和D(Discriminator,判别网络)。 Generator接收一个随机的噪声z,通过这个噪声生成图片…

MySQL中的查询语法

条件查询 -- 条件查询 select 结果列 from 表名 where 条件 SELECT * FROM student WHERE height>1.80;-- and 所有条件都要满足 SELECT * FROM student WHERE height<1.80 AND gender 女;-- or 满足一个条件即可 SELECT * FROM student WHERE height1.80 OR gender女…

阿里开源编程大模型 CodeQwen1.5:64K92编程语言,Code和SQL编程,评测接近GPT-4-Turbo

前言 阿里巴巴最近发布的CodeQwen1.5模型标志着其在编程语言模型领域的一次重大突破。这款开源模型不仅支持高达92种编程语言和64K的上下文长度&#xff0c;而且在多项性能评测中显示出接近或超过当前行业领导者GPT-4-Turbo的能力。 Huggingface模型下载&#xff1a;https://h…

Boost库的使用

1 下载与安装 1.1 下载 网址&#xff1a;Boost C Libraries 进入后选择自己需要的版本安装即可 1.2 安装 1.2.1 解压 1.2.2 编译安装 双击bootstrap.bat 这一步完成后会生成一个b2.exe文件 双击b2.exe文件运行&#xff08;此步需要花费较长的时间&#xff09; 之后再stag…

双向链表(双向带头循环)的增删查改的实现(简单易懂)

一&#xff1a;双向链表的概念 每个节点除开存有数据&#xff0c;还有一个指针指向前一个节点&#xff0c;一个指针指向后一个节点&#xff0c;尾节点和哨兵位互相指向&#xff0c;从而形成一个循环。 二&#xff1a;双向链表的实现第一点&#xff1a; 本文采用三个文件进行实…

Pycharm中安装tablepyxl失败

tablepyxl是一个存在的 Python 包&#xff0c;它是一个桥接 HTML 表格和 openpyxl 的工具&#xff0c;允许你将 HTML 表格转换成 Excel 工作簿。如果你想在 conda 环境中安装 tablepyxl&#xff0c;可以按照以下步骤进行&#xff1a; &#xff08;1&#xff09;打开conda终端。…

GIS数据—1984-2020中国1km人造夜间灯光观测数据

夜间灯光观测数据&#xff08;Nighttime Light,NTL&#xff09;是评估人类活动边界的常用手段&#xff0c;目前&#xff0c;该数据已经广泛应用于城市范围、不透水面、基础设施建设等一系列过程。今天&#xff0c;小编要带来的是长时间序列中国区域边界的夜间灯光观测数据。 数…

springcloud -nacos实战

一、nacos 功能简介 1.1.什么是Nacos&#xff1f; 官方简介&#xff1a;一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。 Nacos的关键特性包括&#xff1a; 服务发现和服务健康监测动态配置服务动态DNS服务服务及其元数…

C++语法|explicit关键字

文章目录 1.C的隐式对象转换问题举例产生的问题 2.使用explicit解决上述问题总结 1.C的隐式对象转换问题 在C中&#xff0c;隐式对象转换&#xff08;Implicit Object Conversion&#xff09;指的是编译器在不需要程序员明确指示的情况下&#xff0c;自动将对象从一种类型转换…

VMware配置Kali linux + 物理机连接Xshell

VMware 配置 kali linux 首先需要先安装VMware Workstation 我是在Windows 安装的 VMware Workstation Pro 17 虚拟化&#xff0c;产品密钥。。这里不做多说了 下载kali linux 这里我下载的是kali-linux-2024.1 Note&#xff1a;这里选Virtual Machines&#xff0c;建议不要…

景源畅信:抖音小店的商品怎么同步到橱窗?

在数字营销的海洋中&#xff0c;抖音小店与橱窗的同步操作无疑是商家们关注的焦点。这不仅能增加商品的曝光度&#xff0c;还能提高交易的可能性。那么&#xff0c;如何将抖音小店的商品同步到橱窗呢? 一、核心步骤解析 要实现商品从抖音小店同步到橱窗&#xff0c;你需要确保…

【Linux 网络】网络编程套接字 -- 详解

⚪ 预备知识 1、理解源 IP 地址和目的 IP 地址 举例理解&#xff1a;&#xff08;唐僧西天取经&#xff09; 在 IP 数据包头部中 有两个 IP 地址&#xff0c; 分别叫做源 IP 地址 和目的 IP 地址。 如果我们的台式机或者笔记本没有 IP 地址就无法上网&#xff0c;而因为…

Unity引擎是什么?有哪些优点

大家好&#xff0c;我是咕噜土豆&#xff0c;很高兴又和大家见面了。今天我们一起来了解一下Unity引擎和它有哪些优点。 首先带大家了解什么是Unity引擎 Unity引擎是一款由Unity Technologies开发的跨平台游戏开发引擎&#xff0c;广泛用于创建2D和3D游戏以及其他交互式内容&…

C++动态内存区域划分、new、delete关键字

目录 一、C/C中程序的内存区域划分 为什么会存在内存区域划分&#xff1f; 二、new关键字 1、内置类型的new/delete使用方法&#xff1a; 2、new和delete的本质 一、C/C中程序的内存区域划分 为什么会存在内存区域划分&#xff1f; 因为不同数据有不同的存储需求&#xff0…

【SpringBoot记录】从基本使用案例入手了解SpringBoot-数据访问(1)

前言 在程序开发尤其是网页应用开发中&#xff0c;数据访问是必不可少的。通过前面的基本案例我们完成了一个简单的SpringBoot Web应用并对自动配置原理有了一定了解&#xff0c;本节在上述案例基础上&#xff0c;继续编写数据访问案例&#xff0c;将通过SpringBoot中数据访问…

音视频开发6 音视频录制原理和播放原理

音视频录制原理 音视频播放原理

VO、PO、DTO的区别

VO&#xff1a;值对象&#xff0c;用于视图层&#xff0c;它的作用是把某个指定页面&#xff08;或组件&#xff09;的所有数据封装起来。 PO&#xff1a;持久化对象&#xff0c;它跟持久层&#xff08;通常是关系型数据库&#xff09;的数据结构形成一一对应的映射关系&#…