名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。

Scalaスケーラブルプログラミング第3版「第07章 組み込みの制御構造」

雑な作業メモです。

やったこととか、学んだこととか

  • if式であるため、結果を返すことができる
  • whileはループであり、式ではない
    • Unitを返す。voidとは違う概念
    • 関数型では用意されていない概念らしいので、可能なら関数型的には再帰関数とかで解決すべし
  • for式である
    • filter が書ける
    • なんか2重ループ書かなくても、まとめて書く方法がある(こんなのできるのか…)
    • 式なのでArrayも作れる
      • 競プロ (ry
  • 例外のパターンマッチは catch 文の中で case で分岐する感じ
  • try-finally の動きが少し変わっている
    • finally の中で return すると結果が上書きされる
    • ファイルクローズなどに限定すべし
  • match式がある
  • breakとcontinueがない

for文のfilter

scala> for(i <- 1 to 10) println(i)
1
2
3
4
5
6
7
8
9
10

scala> for(i <- 1 to 10 if i % 2 == 0) println(i)
2
4
6
8
10

scala> for(i <- 1 to 10 if i % 2 == 0 && i % 3 == 0) println(i)
6

scala> for(i <- 1 to 10 if i % 2 == 0; j <- 1 to i if j % 3 == 0) println(s"${j}:" + "*" * j)
3:***
3:***
6:******
3:***
6:******
3:***
6:******
9:*********

感想

for周りのfilterとScalaやるなら再帰関数はちゃんと理解しましょうって気分になりました。

競プロでたまに Scala 書いてますが、生かしていきたい知識が多かったように思えます。for文の柔軟性や機能は大事…。

あとは match 式の話も出てきたのでわくわくです。これは楽しいため。

まとめの章に書いてあったコードは正しく設計分離すればそうなるよなーと思いつつ、雑に書くと副作用だらけのコードを生み出してしまいそうなので、テスタビリティとか意識的に書いていきたいですね。