7.scala方法初探

概述

scala 中,方法定义在内中,这点类似于 java ,此文说明如何定义方法,及方法一些 用法

相关链接

阅读之前,可以先行浏览一下

官方文档
scala相关文章

定义一个参数的方法

这个例子定义了一个名为 double 方法,只有一个 Int 类型入参 ,名称叫 a ,返回类型也是 Int

scala 复制代码
def double(a: Int) = a * 2

Scala中定义函数需要使用 def 关键字,函数包括函数名、参数、函数体
Scala要求必须给出函数所有参数的类型,但是函数返回值的类型不是必须的,因为Scala可以自己根据函数体中的表达式推断出返回值类型。

函数中最后一行代码的返回值就是整个函数的返回值,不需要使用return,这一点与Java不同,java中函数的返回值是必须要使用return

显性声明返回类型

scala 复制代码
// 显示的声明函数返回类型
def double(a: Int): Int = a * 2

多参方法

多参类似于 java,下面例子中没显性声明返回类型,scala 会自行推断

scala 复制代码
def add(a: Int, b: Int) = a + b

执行

scala 复制代码
scala> def add(a: Int, b: Int) = a + b
add: (a: Int, b: Int)Int

scala> add(1,2)
res1: Int = 3

多行函数

前面的例子中,全是单行函数

scala 复制代码
def addThenDouble(a: Int, b: Int): Int = {
    val sum = a + b
    val doubled = sum * 2
    doubled
}
bash 复制代码
scala> def addThenDouble(a: Int, b: Int): Int = {
     |     val sum = a + b
     |     val doubled = sum * 2
     |     doubled
     | }
addThenDouble: (a: Int, b: Int)Int

scala> addThenDouble(1,2)
res2: Int = 6

函数的参数

前面在构造函数中说过命名参数(链接)的应用;

默认参数

Scala中,有时候我们调用某些函数时,不希望给出参数的具体值,而是希望使用参数自身默认的值,此时就需要在定义函数时使用默认参数。

如果给出的参数不够,则会从左往右依次应用参数

scala 复制代码
def sayHello(fName: String, mName: String = "mid", lName: String = "last") = fName + " " + mName + " " + lName
bash 复制代码
scala> def sayHello(fName: String, mName: String = "mid", lName: String = "last") = fName + " " + mName + " " + lName
sayHello: (fName: String, mName: String, lName: String)String

scala> sayHello("zhang","san")
res3: String = zhang san last

对比java中实现默认参数的写法

java 复制代码
public void sayHello(String name, int age) {
  if(name == null) {
    name = "defaultName"
  }
  if(age == 0) {
    age = 18
  }
  System.out.println("Hello, " + name + ", your age is " + age)
}

带名参数

在调用函数时,也可以不按照函数定义的参数顺序来传递参数,而是使用带名参数的方式来传递。

bash 复制代码
scala> sayHello(fName = "Mick", lName = "Tom", mName = "Jack")
res4: String = Mick Jack Tom

可变参数

Scala中,有时我们需要将函数定义为参数个数可变的形式,则此时可以使用变长参数来定义函数

scala 复制代码
def sum(nums: Int*) = {
  var res = 0
  for (num <- nums) res += num
  res
}
bash 复制代码
scala> def sum(nums: Int*) = {
     |   var res = 0
     |   for (num <- nums) res += num
     |   res
     | }
sum: (nums: Int*)Int

scala> sum(1,2,3,4,5)
res5: Int = 15

特殊的函数-过程

Scala中,定义函数时,如果函数体直接在花括号里面而没有使用=连接,则函数的返回值类型就是Unit,这样的函数称之为过程

过程通常用于不需要返回值的函数,过程还有一种写法,就是将函数的返回值类型显式定义为Unit

scala 复制代码
def sayHello(name: String) = "Hello, " + name
def sayHello(name: String): String = "Hello, " + name
def sayHello(name: String) {  "Hello, " + name }
def sayHello(name: String): Unit = "Hello, " + name

def sayHello(name: String) = "Hello, " + name

bash 复制代码
scala> def sayHello(name: String) = "Hello, " + name
sayHello: (name: String)String

scala> sayHello("xx")
res6: String = Hello, xx

def sayHello(name: String): String = "Hello, " + name

bash 复制代码
scala> def sayHello(name: String): String = "Hello, " + name
sayHello: (name: String)String

scala> sayHello("xx")
res7: String = Hello, xx

def sayHello(name: String) { "Hello, " + name }

def sayHello(name: String): Unit = "Hello, " + name

scala 复制代码
scala> def sayHello(name: String): Unit = "Hello, " + name
sayHello: (name: String)Unit

scala> sayHello("xx")

scala> 

#结束

scala方法到此结束

相关推荐
小飞象—木兮29 分钟前
【产品运营必备】数据分析实战宝典:从入门到精通,驱动业务增长(附相关材料下载)
大数据·数据挖掘·数据分析·产品运营
哥谭居民00011 小时前
需求分析,领域划分到选择套用业务模式到转化落地,两个基本案例
java·大数据·需求分析
wang_yb1 小时前
用样本猜总体的秘密武器,4大抽样分布总结
大数据·databook
EveryPossible1 小时前
弹窗高度设置
大数据
小坏讲微服务2 小时前
SpringBoot4.0整合Scala完整使用
java·开发语言·spring boot·后端·scala·mybatis
Elastic 中国社区官方博客2 小时前
Elasticsearch 中的文档级基于属性的访问控制 - ABAC
大数据·数据库·elasticsearch·搜索引擎·全文检索
YangYang9YangYan2 小时前
2026年中专计算机专业证书报考指南:高性价比认证与职业路径规划
大数据·人工智能·学习·计算机视觉
InfiSight智睿视界2 小时前
即时零售仓网管理的AI 智能化演进
大数据·人工智能·零售
汽车仪器仪表相关领域2 小时前
MTX-AL:传统指针美学与现代数字科技的完美融合 - 模拟宽带空燃比计
大数据·人工智能·科技·单元测试·汽车·压力测试·可用性测试
WHFENGHE2 小时前
金具线夹测温在线监测装置:电力设备安全运行的核心技术支撑
大数据·人工智能·安全