rpscala 勉強会 に出てみた。自分は監視枠(Youtube コメント枠)

質問箱に答えたあと、モブプロをしていた。

質問箱1つ目 例外、Either、その他の使い分けは?

peing.net

質問箱2つ目 Javaとの優位性は? 途中で Kotlin の比較も追加された。

peing.net

モブプロでは Scala 3 のマクロについて、解説ページを読んだあとに、実際に手を動かしていた。

softwaremill.com

inline の挙動についてコンパイルできるかどうかを確認していた。

  • inline 関数の呼び出しに使われる変数は inline じゃないとだめ
  • inline再帰関数も動く
    • 停止しないような再帰関数(32回よりも多く展開するような関数)を書くと、コンパイルエラーになる。
    • 32 はオプションで変更可能
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ベースだと Either がしっくりきそう
  • Java/Scala のメリデメは色々あるが、個人的にはバージョン互換性大事だと思った。
    • オープニングでも Scala 2.11 -> 2.12 に難儀している話があった。
    • 自分も Scala と Kotlin のバージョンアップをやったことがあるが、圧倒的に Kotlin の方が楽だった。
  • inline みたいな機能は、むしろ今まで Scala 2 ではマクロを使わないといけなかったのが大変だったんだなぁと思った
    • Scala 2のマクロは使ったことない
  • 型クラスはついていけなかった...

参考

inline に関する公式ドキュメント

docs.scala-lang.org

型クラスに関する公式ドキュメント

dotty.epfl.ch

記事入力画面を等幅フォントにする

はてなブログを開設して記事を書いてみたところ、記事入力画面がプロポーショナルフォントソースコードが書きづらかったので、記事入力画面を等幅フォント(Courier New)にするブックマークレットを作りました。

はてなブログの記事編集ページのフォントを Courier New (等幅フォント)にする

(iframeって表示されるのかな...?)

作り方

まずは Developer ツールでセレクタとプロパティを調べつつ、動くコードを書きます。

f:id:kijuky:20210608185109p:plain

document.getElementById("body").style.fontFamily="Courier New"

https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Properties_Reference

等幅フォント一覧はこちらとかを参照しました。

https://www.bugbugnow.net/2020/02/font-family-mono.html#toc-12

うん、良さそう。

次に Bookmarklet に仕立て上げます。 javascript:(function(){})() で囲んであげます。

https://qiita.com/xtetsuji/items/e8b61bb39c41b7a9345e

色々とぐぐってみたらはてなレットというサイトを発見。せっかくなので登録してみました(上のリンク)。

作成する際にはてラボ人間性センターというスパムチェッカーがありまして、こちらキン肉マンやら落語やらの知識がなかったので10回くらい失敗しました...今回ので一番時間かかったかも。