タグ

ブックマーク / xerial.org (4)

  • Eitherによるエラー処理 - エラー処理による分岐を減らす | Scala Cookbook

    エラー処理によるコードの分岐を減らしたい場合、Eitherを使うとよい。 Eitherの使い方 Either[A, B] は、AまたはBを返す型である。 Eitherは通常Either[(エラー情報), (結果)]の形で使われる。例えばデータ処理が成功した場合はその結果を用いて引き続きの処理を行いたいが、エラーの場合は何もせず次のコードにエラーだけを伝えたい場合がある。 Eitherから値を取り出すには、left, rightの値に対してmap, flatMapなどを用いる。例えば、Either.right map { ... }とすると、値の内容がRight型の場合はmap内の関数を適用し、Leftの型の場合はmapの処理を無視してLeftの内容(この場合はエラー情報を)をそのまま返す。 具体例 # 文字列がIntに変換できるならIntを、失敗した場合はExceptionを返す関数 sc

  • Option Monad - nullや存在しない値の処理を隠蔽する | Scala Cookbook

    Option を使いこなすと、関数型言語やScalaらしいプログラミングができるようになります。 どんなときに使うのか? nullの代わりに使う 関数の結果が得られない場合など (例:Map[K,V]#get(key)の返り値は Option[V]) モナド(monad)として使い、コードの流れを妨げないようにする for-comprehensionと共に使う モナドと聞いて怖じ気付く必要はありません。これらの使い方についてこれから詳しく説明していきます。 パターンマッチでOptionの値を取得 Option[A]は値が存在するか、しないかを表すクラスで、Some(a)とNoneの二種類の値があります。パターンマッチでこの二種類の値を処理するのが基です。 val m = Map("A" -> "Apple", "B" -> "Banana") def lookup(symbol:Stri

  • ScalaのEnumerationは使うな - Scalaで列挙型を定義するには | Scala Cookbook

    ScalaのEnumerationは使うな Scalaで列挙型を定義するには AntiPattern Published 29 June 2012 ScalaのEnumerationは使いにくい Scalaには列挙型としてEnumerationが用意されているが、以下の理由で使いにくい。 値にメソッドを定義できない DNAというEnumerationを定義しても、個々の値は、DNA.Value型として扱わなければならないため、コードが不自然になる。 Enumerationを使ったコード例 object DNA extends Enumeration { val A, C, G, T, N = Value } val base : DNA.Value = DNA.A また、DNA.Value型を拡張することが許されていないので、ラベルとしての機能しか持たせることができない。 解決策 Sca

  • Mapを極める - key->valueの索引の使い方 | Scala Cookbook

    Mapは key -> valueの索引のためのデータ構造。keyの値には重複を許さない。 Mapの作成 scala> val m = Map(1 -> "Apple", 2 -> "Banana", 3 -> "Chocolate") m: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> Apple, 2 -> Banana, 3 -> Chocolate) 1 -> "Apple"の部分では、(1, "Apple")のTupleが生成され、最終的にMap.apply(elems:(A, B)*)が呼ばれている。 Builderを使ってMapを作成 val m = { val b = Map.newBuilder[Int, String] b += 1 -> "Apple" b += 2 -> "Banana

  • 1