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 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
一隅论数智3 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
尧炎科技3 天前
防潮抗变形,就选纯品梅花全桉多层板
大数据
程序员大阳3 天前
副队长大数据教程(5)--集群情况下虚拟机网络配置
大数据·集群·nat·网路
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
嘉立创FPC苗工3 天前
FPC与机器人的双向赋能,解锁智能装备进化新势能
大数据·人工智能·制造·fpc·电路板
AI职业加油站3 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
龙亘川3 天前
一网统管AI平台民生业务实践:基于城市数字底座赋能公积金业务服务升级
大数据·安全·智慧城市·开源软件·数据可视化·政务
码流子3 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构