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方法到此结束

相关推荐
Natural_yz3 小时前
大数据学习17之Spark-Core
大数据·学习·spark
莫叫石榴姐4 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
魔珐科技5 小时前
以3D数字人AI产品赋能教育培训人才发展,魔珐科技亮相AI+教育创新与人才发展大会
大数据·人工智能
上优6 小时前
uniapp 选择 省市区 省市 以及 回显
大数据·elasticsearch·uni-app
samLi06207 小时前
【更新】中国省级产业集聚测算数据及协调集聚指数数据(2000-2022年)
大数据
Mephisto.java7 小时前
【大数据学习 | Spark-Core】Spark提交及运行流程
大数据·学习·spark
EasyCVR8 小时前
私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
大数据·网络·音视频·h.265
hummhumm8 小时前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
科技象限9 小时前
电脑禁用U盘的四种简单方法(电脑怎么阻止u盘使用)
大数据·网络·电脑
天冬忘忧10 小时前
Kafka 生产者全面解析:从基础原理到高级实践
大数据·分布式·kafka