前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Scala基础入门(七)方法、类、对象详解

Scala基础入门(七)方法、类、对象详解

作者头像
青山师
发布2023-05-04 21:32:11
发布2023-05-04 21:32:11
61000
代码可运行
举报
运行总次数:0
代码可运行

Scala 方法(函数)

方法,亦即函数。 一组行为功能的组合,方法是组织程序的最基本形式。

Scala 中, 方法(函数)的定义语法如下:

def methodName(arg1: Type1 arg2: Type2, …): returnType = {    //some code…    resultValue }

使用 def 关键字定义方法, 后面跟 方法名 和 小括号中的 参数列表 。 参数列表后面跟一个 冒号方法的返回结果类型, 返回结果类型后面是一个 等号,表示下面是方法体, 方法体用一个 花括号 包含。 这和前面的多行表达式一样, 方法体可以看作一个 表达式

Scala 中的程序执行入口 main 方法

Scala 中,程序的执行入口是 main 方法, 其接受字符串数据的参数,无返回值, 其定义如下:

def main(args: Array[String]): Unit = { }

自定义方法

遵照 Scala , 我们自定义一个 对两个整数求和的方法,并调用它输出结果:

代码语言:javascript
代码运行次数:0
运行
复制
package com.byron4j.scala.basic

object MethodDemo {
  def main(args: Array[String]): Unit = {
    println("1 + 2 = " + sum(1, 2))
  }

  def sum(arg1: Int, arg2: Int): Int = {
    return arg1 + arg2;
  }
}

输出:

1 + 2 = 3

使用断言 assert 测试方法

scala 的 Predef 提供了 断言方法可以用来简单的测试 自定义的方法执行的准确性, assert(布尔表达式, 错误提示语):

assert(1 > 2, “ERROR: 1 should be less than 2”)

程序运行,断言失败,因为 1 > 2 表达式结果为false, 所以中断程序,并且输出我们指定的错误信息: ERROR: 1 should be less than 2

代码语言:javascript
代码运行次数:0
运行
复制
Exception in thread "main" java.lang.AssertionError: assertion failed: ERROR: 1 should be less than 2
    at scala.Predef$.assert(Predef.scala:219)
    at com.byron4j.scala.basic.MethodDemo$.main(MethodDemo.scala:5)
    at com.byron4j.scala.basic.MethodDemo.main(MethodDemo.scala)

这里提示一个测试自定义方法的示例

代码语言:javascript
代码运行次数:0
运行
复制
package com.byron4j.scala.basic

/**
 * Scala 的方法,以及测试自定义方法
 */
object MethodDemo {
  def main(args: Array[String]): Unit = {
    //assert(1 > 2,  "ERROR: 1 should be less than 2")
    test(1, 2, 3);
    println("Congratulations, 测试通过!");
  }

  /**
   * return  arg1 + arg2
   */
  def sum(arg1: Int, arg2: Int): Int = {
    return arg1 + arg2;
  }

  /**
   * assert arg1 + arg2 == expectedSum
   */
  def test(arg1: Int, arg2: Int, expectedSum: Int): Unit = {
    var sumVal = sum(1, 2);
    assert(sumVal == expectedSum,
        "Expected " + expectedSum + " but got" + sumVal);
    println(arg1 + " + " + arg2 + " = " + sumVal);
  }
}

运行,测试OK :

1 + 2 = 3 Congratulations, 测试通过!

如果测试 test(1, 2, 4); 则程序中断:

Exception in thread “main” java.lang.AssertionError: assertion failed: Expected 4 but got3 at scala.Predef.assert(Predef.scala:219) at com.byron4j.scala.basic.MethodDemo>

Scala 类、对象

Scala 是面向对象、面向过程的编程语言。

对象 包含 存储数据 用 var、val(也叫成员变量、域),并且使用 方法来执行操作。

定义了域、方法,本质上就是我们定义的数据类型。

每个对象都在内存中独占一块存储。 例如Scala中的 Range(该类可以产生一个序列) 是一个类, 我们创建了2个对象(实例) :

var range1: Range = Range(0, 10); var range2: Range = Range(10, 0);

对象range1、range2 在内存中存储地址是不同的;因此我们可以说,有一个类Range,有2个对象(实例)range1、range2。

代码语言:javascript
代码运行次数:0
运行
复制
package com.byron4j.scala.basic

object ClassDemo {
  def main(args: Array[String]): Unit = {

    var range1: Range = Range(0, 12);

    var range2: Range = Range(13, 24);

    println("range1 = " + range1)

    for(ele <- range1) print(ele + "  ")
    println()
    for(ele <- range2) print(ele + "  ")
    println()

  }
}

输出结果为:

range1 = Range 0 until 12 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23

关于 Range 类的更多细节可以查看 https://www.scala-lang.org/api/current/scala/collection/immutable/Range.html

创建 Scala 类

上面使用了 Range 这样的预定义类来讲述 Scala 中类、对象的含义。 大都时候我们需要自定义类。Scala 中,使用 class 关键字来创建类。类的定义语法:

class ClassName{    // 类体 }

类名应该由多个首字母大写的英文词组合而成: 如 Range、 AlibabaTaobao…

展示一个实例,在ClassDemo.scala 中定义了 Aminal 表示动物的类, 定义了3个 Animal 的子类表示具体的动物 Giraffe 长颈鹿、 熊 Bear、 河马 Hippo; 还使用了 关键字 extends 表示继承的关系。

创建类的实例对象的2种方式: new ClassType() new ClassType ; 创建类的对象时,会执行类体。因此该应用运行时会输出 Animal、Giraffe 、 Bear 类中的 print语句:

代码语言:javascript
代码运行次数:0
运行
复制
package com.byron4j.scala.basic

object ClassDemo {
  def main(args: Array[String]): Unit = {

    var range1: Range = Range(0, 12);

    var range2: Range = Range(13, 24);

    println("range1 = " + range1)

    for(ele <- range1) print(ele + "  ")
    println()
    for(ele <- range2) print(ele + "  ")
    println()


    println("/**************************/")

    var giraffe: Giraffe = new Giraffe;

    var bear: Bear = new Bear();


  }


  class Animal{
    print("Animal --> ")
  }

  class Giraffe extends Animal{
    var name = "Giraffe_BB";
    println("This is a Giraffe.")
  }

  class Bear  extends Animal{
    println("This is a Bear.")
  }

  class Hippo  extends Animal{
    println("This is a Hippo.")
  }
}

输出:

range1 = Range 0 until 12 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 /****************/ Animal –> This is a Giraffe. Animal –> This is a Bear.

Scala 类中的方法

在类中可以定义类的方法,方法的调用使用 .符。我们看如何定义一个小狗类吠的方法:

代码语言:javascript
代码运行次数:0
运行
复制
class Dog{
    def bark(): String = {
      "yip!"
    }
  }

调用:

代码语言:javascript
代码运行次数:0
运行
复制
var dog: Dog = new Dog;
println("dog.bark()执行结果为:" +dog.bark());

输出:

dog.bark()执行结果为:yip!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Scala 方法(函数)
    • Scala 中的程序执行入口 main 方法
    • 自定义方法
    • 使用断言 assert 测试方法
  • Scala 类、对象
    • 创建 Scala 类
    • Scala 类中的方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档