คอลเลกชัน Scala - ตัวเลือก

Scala Option [T] คือคอนเทนเนอร์สำหรับศูนย์หรือองค์ประกอบหนึ่งของประเภทที่กำหนด ตัวเลือก [T] สามารถเป็นได้Some[T] หรือ Noneวัตถุซึ่งแสดงถึงค่าที่ขาดหายไป ตัวอย่างเช่นเมธอด get ของ Scala's Map จะสร้าง Some (value) หากพบค่าที่ตรงกับคีย์ที่กำหนดหรือNone หากไม่ได้กำหนดคีย์ที่กำหนดไว้ในแผนที่

ประเภทตัวเลือกถูกใช้บ่อยในโปรแกรม Scala และคุณสามารถเปรียบเทียบสิ่งนี้กับไฟล์ nullค่าที่มีอยู่ใน Java ซึ่งระบุว่าไม่มีค่า ตัวอย่างเช่นเมธอด get ของ java.util.HashMap จะส่งคืนค่าที่เก็บไว้ใน HashMap หรือ null หากไม่พบค่า

สมมติว่าเรามีวิธีการดึงข้อมูลจากฐานข้อมูลโดยใช้คีย์หลัก

def findPerson(key: Int): Option[Person]

เมธอดจะส่งคืนบาง [บุคคล] หากพบเรกคอร์ด แต่ไม่มีหากไม่พบเรกคอร์ด ให้เราทำตามโปรแกรมต่อไปนี้

ตัวอย่าง

object Demo {
   def main(args: Array[String]) {
      val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
      println("capitals.get( \"France\" ) : " +  capitals.get( "France" ))
      println("capitals.get( \"India\" ) : " +  capitals.get( "India" ))
   }
}

บันทึกโปรแกรมข้างต้นใน Demo.scala. คำสั่งต่อไปนี้ใช้เพื่อคอมไพล์และรันโปรแกรมนี้

คำสั่ง

\>scalac Demo.scala
\>scala Demo

เอาต์พุต

capitals.get( "France" ) : Some(Paris)
capitals.get( "India" ) : None

วิธีที่ใช้กันทั่วไปในการแยกค่าเผื่อเลือกคือการจับคู่รูปแบบ ตัวอย่างเช่นลองใช้โปรแกรมต่อไปนี้

ตัวอย่าง

object Demo {
   def main(args: Array[String]) {
      val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")
      println("show(capitals.get( \"Japan\")) : " + show(capitals.get( "Japan")) )
      println("show(capitals.get( \"India\")) : " + show(capitals.get( "India")) )
   }
   def show(x: Option[String]) = x match {
      case Some(s) => s
      case None => "?"
   }
}

บันทึกโปรแกรมข้างต้นใน Demo.scala. คำสั่งต่อไปนี้ใช้เพื่อคอมไพล์และรันโปรแกรมนี้

คำสั่ง

\>scalac Demo.scala
\>scala Demo

เอาต์พุต

show(capitals.get( "Japan")) : Tokyo
show(capitals.get( "India")) : ?

ใช้ getOrElse () วิธีการ

ต่อไปนี้เป็นโปรแกรมตัวอย่างเพื่อแสดงวิธีใช้เมธอด getOrElse () เพื่อเข้าถึงค่าหรือค่าเริ่มต้นเมื่อไม่มีค่าอยู่

ตัวอย่าง

object Demo {
   def main(args: Array[String]) {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None 
      println("a.getOrElse(0): " + a.getOrElse(0) )
      println("b.getOrElse(10): " + b.getOrElse(10) )
   }
}

บันทึกโปรแกรมข้างต้นใน Demo.scala. คำสั่งต่อไปนี้ใช้เพื่อคอมไพล์และรันโปรแกรมนี้

คำสั่ง

\>scalac Demo.scala
\>scala Demo

เอาต์พุต

a.getOrElse(0): 5
b.getOrElse(10): 10

ใช้ isEmpty () วิธีการ

ต่อไปนี้เป็นโปรแกรมตัวอย่างเพื่อแสดงวิธีการใช้ isEmpty () method เพื่อตรวจสอบว่าตัวเลือกนั้นเป็น None หรือไม่

ตัวอย่าง

object Demo {
   def main(args: Array[String]) {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None 
      println("a.isEmpty: " + a.isEmpty )
      println("b.isEmpty: " + b.isEmpty )
   }
}

บันทึกโปรแกรมข้างต้นใน Demo.scala. คำสั่งต่อไปนี้ใช้เพื่อคอมไพล์และรันโปรแกรมนี้

คำสั่ง

\>scalac Demo.scala
\>scala Demo

ตัวอย่าง

a.isEmpty: false
b.isEmpty: true