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

相关推荐
武子康3 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
6.944 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
lucky_syq4 小时前
Flume和Kafka的区别?
大数据·kafka·flume
AI_NEW_COME5 小时前
构建全方位大健康零售帮助中心:提升服务与体验
大数据·人工智能
it噩梦5 小时前
es 中 terms set 使用
大数据·elasticsearch
中科岩创5 小时前
中科岩创边坡自动化监测解决方案
大数据·网络·物联网
DolphinScheduler社区6 小时前
作业帮基于 Apache DolphinScheduler 3_0_0 的缺陷修复与优化
大数据
SeaTunnel6 小时前
京东科技基于 Apache SeaTunnel 复杂场景适配 #数据集成
大数据
小_太_阳7 小时前
Scala_【2】变量和数据类型
开发语言·后端·scala·intellij-idea
直裾7 小时前
scala借阅图书保存记录(三)
开发语言·后端·scala