iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
自我挑戰組

連續30天 初學者介紹Scala語言系列 第 10

[Day 10]Scala 類別與物件 Part 3

  • 分享至 

  • xImage
  •  
  • require
  • private field
  • define operator

今天繼續來聊Scala類別

require

前面提到了Scala的建構式,當我們要對主建構式裡的參數定義一些規定時,我們可以使用require
假設一個情況:
有一個Rational類別,需要兩個整數參數分別為分子m和分母n,輸出m/n。
因為分母不能為0

class Rational(m: Int, n: Int){
    require(n != 0)    
    override def toString = m + "/" + n
}

require(n != 0)是在判斷輸入的分母為不為0
require會接收一個Boolean參數,如果傳入的值為truerequire會正常回傳。
如果值為false,require會丟出IllegalArgumentException來阻止物件繼續被建構。

private

一般類別裡定義的成員都是公有的(public),如果想要讓成員不能在類別外不能被訪問就要設為private
private只能從類別定義內訪問,類別外訪問不到。

class Person:
    private val age = 20
    private val x = 0 

Define operators

假設我們要定義一個有理數類別
裡面有個有理數相加的方法,定義為:+
另外有個有理數相乘的方法,定義為:*
那我們可以把這個有理數類別寫成這樣

class Rational(m: Int, n: Int){
    require(n != 0)
    val numer: Int = m
    val denom: Int = n
    
    def this(n: Int) = this(m, 1)
    def +(that: Rational): Rational = 
        new Rational(numer * that.denom + that.numer * denom, denom * that.denom)
    
    def *(that: Rational): Rational = 
        new Rational(numer * that.numer, denom * that.denom)
    
    override def toString = numer + "/" + denom
}

定義好後我們就可以寫成這樣

val x = new Rational(2, 3)
val y = new Rational(4, 5)
println(x + y)    // output: 22/15

今天就講到這邊 明天來介紹Scala其他功能
/images/emoticon/emoticon06.gif


上一篇
[Day 09]Scala 類別與物件 Part 2
下一篇
[Day 11]Scala 函式與閉包
系列文
連續30天 初學者介紹Scala語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言