Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scala の好きなところ 難しいところ / #scala_waiwai

Arthur
October 13, 2023
1.2k

Scala の好きなところ 難しいところ / #scala_waiwai

Arthur

October 13, 2023
Tweet

More Decks by Arthur

Transcript

  1. Go の場合 • nil チェック • err が nil ならメインの

    返り値は not-nil である べきと言う文化 ◦ これに頼って nil チェックしないと、ラ イブラリの実装ミスで panic することも item := findById(1) if item == nil { log.Fatal(“unexpected nil”) } 10 item, err := findById(1) if err != nil { log.Fatal(err) } item // これはnilじゃないという期待
  2. TypeScript の場合 • undefined との union 型を使うと null 安全に •

    if 文書かざるを得ないこと があって Option より面倒 ◦ Optional Chaining も やってきて少し楽に なった const item = “hoge” as string | undefined; item.length; // ‘item’ is possibly ‘undefined’. 11 const item = “hoge” as string | undefined; if (item === undefined) return item.length; // OK! item?.length; // ES2020~ if 不要
  3. 裏返しとして 型が合うような関数を頑張って探す 12 scala> val results = Seq(Left(1), Right(2)) val

    results: Seq[scala.util.Either[Int,Int]] = List(Left(1), Right(2)) scala> results.filter(_.isLeft) val res1: Seq[scala.util.Either[Int,Int]] = List(Left(1)) これじゃダメ
  4. Go / TypeScript の場合 Go • 割と素朴 • Go 1.21

    から slices package が登場したものの、もう一声欲 しい ◦ uniq, chunk… TypeScript • map などの高階関数はある • Go よりは充実してるものの、やはり自作することは間々ある 14
  5. 他にもいろいろ この辺りが好き: • case class ◦ immutable ◦ 比較が楽 •

    pattern match ◦ 代数的データ型では網羅チェックもしてくれる 15
  6. 他にもいろいろ • implicit parameter ◦ sbt console でコード片をコピペして実行しても まあ動かない •

    足回りが弱い気がする ◦ 特にビルドツール ◦ Go のエコシステムが便利すぎて比較するとどう しても見劣りしてしまう 23