วันศุกร์ที่ 8 พฤษภาคม พ.ศ. 2558

Scala Trait

ใน Scala เราใช้ Trait มาแทน Interface ใน java/c#  ข้อแตกต่างก้อคือ Trait มี method หรือ property ที่มีโค๊ดได้ ไม่จำเป็นที่ต้องรอ subclass มาทำให้ เราลองมาดูตัวอย่างกัน

trait DataSource {
  var src : String
  
  def read() : Boolean
  def getString() : String
  def printAll() {
    while(this.read()) {
      println(getString())
    }
  }
}

เราประกาศ trait DataSource ที่มี src เป็น string และยังไม่ได้กำหนดค่า  และมี read() และ getString() เป็น abstract method  ทั้งหมดนี้ subclass จะต้อง override ไม่เช่นนั้นจะ compile ไม่ผ่าน เราลองมาดู subclass กัน

class FileDataSource extends DataSource {
   var src : String = "file"
   val max = 5
   var count : Int = 0
   
   def read() :Boolean = {
     count = count + 1
     return count < max
   }
   
   def getString():String = { return src }
}

จะเห็นได้ว่า FileDataSource  ได้ extends DataSource และ override read() กับ getString() รวมถึง กำหนดค่าให้กับ src และ max  นอกจากนี้ยังเพิ่ม count เป็น data member ใหม่อีกด้วย ลองมาดูการทำงานกัน

object Hello {
  def main(args: Array[String]) {
    var a =new FileDataSource()    
    a.printAll()
  }
}

โค๊ดข้างบนจะ พิมพ์

file
file
file
file

สำหรับบทความต่อไปเราจะมาดูวิธีการใช้ trait กันต่อ ในหัวข้อเรื่อง Mixin

ไม่มีความคิดเห็น: