Scalaの例外の基本
基本的なことですが、例外が発生した場合、後続の処理がどうなるのか
きちんと見ていきます。
3つのメソッドtestA, testB, testCを作成して
それぞれ下記のメソッドを呼び出します。
そしてtestCでは例外を発生されます。
testA -> testB -> testC(例外発生!)
実際のコードはこんな感じです。
import scala.util.{Failure, Success, Try} // testAメソッドを呼ぶ val result = Try { testA println("ここは呼ばれません!!") } // 例外があった場合はエラーメッセージを表示 result match { case Success(e) => println("Success!!") case Failure(e) => println(e) } // testBメソッドを呼ぶ def testA: Unit = { println("Here is testA method") testB println("ここは呼ばれません!!") } // testCメソッドを呼ぶ def testB: Unit ={ println("Here is testB method") testC println("ここは呼ばれません!!") } // 例外発生! def testC: Unit = { println("Here is testC method") throw new Exception ("Exception") println("ここは呼ばれません!!") }
結果はこんな感じになります。
Here is testA method Here is testB method Here is testC method result: scala.util.Try[Unit] = Failure(java.lang.Exception: Exception) java.lang.Exception: Exception
ここで注目して欲しいのは、testCメソッドで例外発生後は
ここは呼ばれません!!
が結果に表示されていませんね。
例外がスローされると後続の処理は実行されないんですね。
「あれー、でも例外発生時も後続処理したいんだけどなぁー」
って時どうするか!
そこでtry,catchの登場です!
続く。
Scalaの例外処理についてのメモ!
ScalaのstartsWithを覚えた!!
与えられた文字列がURLなのかどうか簡単にチェックしたい!
http:// か https://で始まればURLと判断しちゃおう、というコードを書く場合
大人しく正規表現を使う手もありますが、
今回は先頭の文字列比較startsWithを使ってみます。
Scalaではこんな感じで書けます。
def isUrl(url:String): Boolean = { url.startsWith("http://") || url.startsWith("https://") } val urlString1 = "http://www.google.co.jp/" val urlString2 = "https://www.google.co.jp/" val urlString3 = "ttps://www.google.co.jp/" // trueを返す isUrl(urlString1) // trueを返す isUrl(urlString2) // falseを返す isUrl(urlString3)
やったぜ。
Scalaのcontainsとexistsの違いを覚えた!!
ScalaでListの要素にある値が存在するかチェックをしたいときありますよね。
そんな時、直感でexistsを使おうとして、「あれ、なんか構文エラー出るぞ?」みたいなことがあるのでメモ。
Scalaで単純に要素の存在チェックをするときはcontainsを使います。
こんな感じ。
scala> List(1,2,3,4,5).contains(1) // result true
そして問題のexistsですが、これは「ある条件を満たす要素が存在するか」をチェックするコレクションメソッドです。
例えば、奇数は存在するかチェックしたい場合はこんな感じです。
// 奇数が存在 scala> List(1,2,3,4,5).exists(n => n % 2 != 0) // result true // 奇数が存在しない! scala> List(1,2,3,4,5).exists(n => n % 2 != 0) // result false
実践ドメイン駆動設計を買って読みきるぞという決意表明
買いました。
なんと全583ページ!!すごいボリュームです!!
積んでしまわないようにちょっとずつ読んでいこうと思っとります。
まずは目次の写経から(笑)
第1章 DDDへの誘い
第3章 コンテキストマップ
第4章 アーキテクチャ
第5章 エンティティ
第6章 値オブジェクト
第7章 サービス
第8章 ドメインオブジェクト
第9章 モジュール
第10章 集約
第11章 ファクトリ
第12章 リポジトリ
第13章 境界づけられたコンテキストの統合
第14章 アプリケーション
付録A 集約とイベントソオーシング:A+ES
付録B 参考文献
ふむふむ、各用語については 「聞いたことはあるけど説明しろって言われても難しい」 って感じです。
まずは「第1章 DDDへの誘い」で華麗に誘っていただきましょう! (続く)
Scalaのcollectを覚えた!!
collectというコレクションメソッドを覚えた!!
リストから欲しい値のみ抽出して、その値を変換して取得したいケースに使えますな。
scala> List(1,2,3,4,5).collect{ case 1 => "One" case 3 => "Three" } // result List[String] = List(One, Three)
collect使わないとfilterしてからmapする感じですかね。
scala> List(1,2,3,4,5).filter{n => (n ==1 || n == 3)}.map { case 1 => "One" case 3 => "Three" } // result List[String] = List(One, Three)