rpscala 勉強会 に出てみた。自分は監視枠(Youtube コメント枠)
質問箱に答えたあと、モブプロをしていた。
質問箱1つ目 例外、Either、その他の使い分けは?
質問箱2つ目 Javaとの優位性は? 途中で Kotlin の比較も追加された。
モブプロでは Scala 3 のマクロについて、解説ページを読んだあとに、実際に手を動かしていた。
inline
の挙動についてコンパイルできるかどうかを確認していた。
inline
関数の呼び出しに使われる変数はinline
じゃないとだめinline
の再帰関数も動く
inline def power(v: Int, p: Int): Int = { if p == 0 then v // このへんちょっと Scala 3 で書いてみた♪ コンパイル通るよ else v * power(v, p - 1) } @main def a(): Unit = { println(power(2, 32)) // 33 だとエラー }
inline
は事実上のfinal
(オーバーライド不可)になる- コンパイル後に消えてしまうので。
inline
を使えば、メソッドの引数の型を動的に変えることもできる。- Scala2 で macro でやってたことは
inline
でできる事があるので、まずはinline
で実装してみると良さそう。
型クラスの話
- 型クラスは Haskell を意識している(らしい。自分は Haskell 書いたことない...)
- inline と using Mirror を使うと、マクロを書かなくても型クラスの導出ができる...らしい...
- インデントベースはコピペが難しい
- これはIDEの支援を待つ感じなんだろうか...
感想
- 例外、Either の使い分けはコンテキストに依存しそうな気がした。
- Java/Scala のメリデメは色々あるが、個人的にはバージョン互換性大事だと思った。
- inline みたいな機能は、むしろ今まで Scala 2 ではマクロを使わないといけなかったのが大変だったんだなぁと思った
- Scala 2のマクロは使ったことない
- 型クラスはついていけなかった...
参考
inline
に関する公式ドキュメント
型クラスに関する公式ドキュメント