■ はじめに
開発中だが、バグったので整理。
目次
【1】Option型 1)Some 2)None 【2】主なメソッド 1)getOrElse 2)isEmpty 3)isDefined 4)orNull 5)orElse 【3】サンプル 例1:主なメソッド 【4】NULLおよび混同しそうなキーワード 1)null 2)None 3)Nothing 4)Nil
【1】Option型
* 値があるかないかを表す型 * 2種類のサブクラスを持っている
1)Some
* 値があることを表す型
2)None
* 値がないことを表す型
例:コンパイルエラー
def getHello(isNone: Boolean = false): Option[String] = { // Option[String]で指定した場合、Some()で返さないとコンパイルエラー // つまり、「if isNone None else "Hello"」はできない if isNone None else Some("Hello") }
【2】主なメソッド
1)getOrElse
* value.getOrElse("【デフォルト値】") の場合 value に値がなければ、引数の【デフォルト値】を返す
2)isEmpty
* 値があるかどうかを Boolean 型で返す (true: 値なし、false: 値あり)
3)isDefined
* 定義されているかを Boolean 型で返す (true: 定義あり、false: 定義なし)
4)orNull
* Noneだったら、nullを返す * Someだったら、その中身を返す
例
object Hello { def main(args: Array[String]): Unit = { println(Option("Mike").orNull) // Mike println(None.orNull) // null } }
5)orElse
* Noneだったら、指定したデフォルトのOption型を返す * Someだったら、そのままそのSomeを返す
例
object Hello { def main(args: Array[String]): Unit = { println(Option("Mike").orElse(Option("Tom"))) // Some(Mike) println(None.orElse(Option("Tom"))) // Some(Tom) } }
【3】サンプル
例1:主なメソッド
object Hello { def main(args: Array[String]): Unit = { val value: Option[String] = None // Default println(value.getOrElse("Default")) // true println(value.isEmpty) // false println(value.isDefined) // null println(value.orNull) } }
【4】NULLおよび混同しそうなキーワード
1)null
* Java の nullと同じ
2)None
* 上述の通り「値がないことを表す型」 * null とは、別物
例:開発中にバグを出したコード
val value: Option[String] = None val result = if (value != null) value.get else "NG" // ここで「java.util.NoSuchElementException: None.get」 println(result)
3)Nothing
* クラス階層における、「一番下」に位置するクラスで全ての型のサブタイプ
4)Nil
* 「空のリスト」を表すオブジェクト => 名前が悪くない、、、empty でよかったのでは??
参考文献
https://qiita.com/f81@github/items/7bca48469d9aea65780d
http://www.mwsoft.jp/programming/scala/scala_option.html
関連記事
Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331
Scala ~ 基本編 / ジェネリック
https://dk521123.hatenablog.com/entry/2023/03/21/003817
Scala ~ 基本編 / Either型 ~
https://dk521123.hatenablog.com/entry/2023/08/02/132315
Scala ~ 基本編 / 例外処理 ~
https://dk521123.hatenablog.com/entry/2023/10/05/000135
Scala ~ asInstanceOf / isInstanceOf ~
https://dk521123.hatenablog.com/entry/2024/07/26/225713