Scala深入学习之方法的学习

简介: 笔记

一、方法定义


方法定义的基本格式:

def 方法名(参数列表):返回值类型 = 方法体

其中如果方法体的返回值是可以推断的话,返回值类型可以省略,但是如果方法是递归方法,返回值类型就不能省略

代码示例:

package methodDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/8/19
 * @time : 3:44 下午
 */
object MethodDemo1 {
  // 定义方法,实现加的功能
  def add(x:Int,y:Int):Int = x+y     // 写法一
  // def add(x:Int,y:Int) = x+y         写法二:省略返回值类型
  // def add(x:Int)(y:Int) = x+y        写法三:写成参数列表的方式
  def main(args: Array[String]): Unit = {
    val res = add(5,3)
    // val res = add(5)(3)
    println(res)
  }
}
8


二、无参方法


代码示例:

package methodDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/8/20
 * @time : 9:20 上午
 */
object MethodDemo2 {
  // 定义无参方法
  // def name:String = System.getProperty("user.name")
  def name():String = System.getProperty("user.name")
  def main(args: Array[String]): Unit = {
    // 方法调用
    println(name)
    println(name())
  }
}


三、默认参数方法


代码示例:

package methodDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/8/20
 * @time : 9:25 上午
 */
object MethodDemo3 {
  // 定义带有默认值参数的方法
  def printMsg(string: String = "hello,world") = println(string)
  // 定义带有多个默认值参数的方法
  // def multiAdd(a:Int = 1,b:Int = 3,c:Int):Unit = println(a+b+c)
  def multiAdd(a:Int = 1,b:Int = 3,c:Int):Int = a+b+c
  def main(args: Array[String]): Unit = {
    // 注意这里是打印了两次,返回值的类型为Unit
    println(printMsg())
    // 3赋值给c
    val res1 = multiAdd(c=3)
    println(res1)
    // 2默认赋值给a,3赋值给c
    val res2 = multiAdd(2,c=3)
    println(res2)
    // 10赋值给b
    val res3 = multiAdd(b=10,c=3)
    println(res3)
    // 10赋值给a,20赋值给b,30赋值给c
    val res4 = multiAdd(10,20,30)
    println(res4)
  }
}

运行结果:

hello,world
()
7
8
14
60


四、可变参数方法


代码示例:

package methodDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/8/20
 * @time : 10:14 上午
 */
object MethodDemo4 {
  // 遍历传入的参数
  def add(a:Int*) = {
    var sum = 0
    // 相当于把参数传入到一个数组,然后遍历数组
    for(item <- a){
      sum += item
      println(item)
    }
    println("sum="+sum)
  }
  def main(args: Array[String]): Unit = {
    // 调用方法,但是要注意参数的类型一致
    add(1,2,3,4,5)
    // 定义一个数组,将数组类型传入到方法里
    val arr = Array(10,20,30,40)
    add(arr:_*)
  }
}

运行结果:

1
2
3
4
5
sum=15
10
20
30
40
sum=100


五、方法定义的注意事项


  • 如果不使用return,方法体(表达式)中的最后一条表达式的值,就是方法的返回值
  • 如果使用return返回值,一定要指定返回类型,这时候自动推断失效了,一般不推荐使用return
  • 方法可以没有返回值,Unit类型
package methodDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/8/20
 * @time : 10:30 上午
 */
object MethodDemo5 {
//  def add(x:Int,y:Int):Int = {x+y}
  // 如果不使用return,方法体(表达式)中的最后一条表达式的值,就是方法的返回值
  // 如果使用return返回值,一定要指定返回类型,这时候自动推断失效了,一般不推荐使用return
  // 方法可以没有返回值,unit类型
  def add(x:Int,y:Int):Int = { x+y}
  def main(args: Array[String]): Unit = {
    println(add(1,2))
  }
}



相关文章
|
22天前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
|
22天前
|
消息中间件 分布式计算 大数据
Scala学习--day03--函数式编程
Scala学习--day03--函数式编程
|
22天前
|
Java Scala
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
|
22天前
|
Java 编译器 API
Scala学习--day01变量与数据类型、运算符
Scala学习--day01变量与数据类型、运算符
|
存储 算法 Java
Scala学习三-面向对象
前面我们已经学习了特质类似接口,其可以被继承,同时如果需要继承多个特质的话,则需要使用extends…with…进行继承。其类似java中的接口和抽象方法的结合体,但又比java中的其要强大,因为其可以定义抽象字段和普通字段、抽象方法和普通方法。而在java中接口中可以定义常量,不能定义变量。同时特质还可以继承class类,而在java中接口通常是用来实现的。 Object继承trait
121 0
Scala学习三-面向对象
|
Java Scala
Scala学习一
Scala中的方法与函数: 方法是属于类或者对象的,在运行时,它是加载到JVM的方法区中,而函数则是加载到JVM的堆内存中,同时可以将函数对象赋值给一个变量。函数是一个对象,继承自FunctionN,函数对象有apply、curried、toSting、tupled这些方法,而方法则没有。这是scala与java不同的地方。
82 0
Scala学习一
|
分布式计算 资源调度 Hadoop
基于mac构建大数据伪分布式学习环境(七)-部署Scala及Spark学习环境
本文主要讲解如何部署Scala与单机伪分布式Spark计算引擎
94 0
|
SQL 分布式计算 Scala
Scala学习总结
Scala学习总结
112 0
|
XML 分布式计算 大数据
Scala 学习 进击大数据Spark生态圈
Scala 学习 进击大数据Spark生态圈