てすと

たかろぐ

自分のログを刻みます。

Scalaの特徴を自分なりにまとめてみた

最近、Scalaでサーバサイド開発したいと思っているので、今日はScalaの特徴について軽くまとめます。 と言っても、公式ドキュメントの内容を自分なりに解釈したものです。

特徴

  • Javaとの互換性
    • ScalaJVM上で動く
    • Javaで実装されたクラスは、Scala上でも流用可能(逆も然り)
  • 型推論
    • コンパイラ型推論してくれるので、静的型付け言語だけど型の指定をしなくても動かせる
    • REPLがデフォルトで用意されている
    • 因みに、Javaにも型推論機能はある
  • トレイト
    • クラスからコンストラクタを引いて、多重継承できるようにしたイメージ
    • 多重継承できる所と、インスタンスが作れない所だけ見ると、インターフェースと似ていて混同されがち
    • トレイトは定義する時に動作も埋め込めて、その点でインターフェースとは異なる
    • 因みに、トレイトをクラスに適用することは、ミックスインと呼ぶ
  • 関数型プログラミングの思想
    • コレクションクラスの中に不変コレクションがある
    • 高階関数がサポートされている(関数は第一級要素として扱われる)
    • 勿論、Javaが元になっているので、オブジェクト指向でも書ける
  • 並列・分散プログラミング、非同期プログラミングの実装がし易い
    • 言っていることは分かるけど、あまりこの辺コード組んでこなかったのでピンと来ない
  • パターンマッチング
    • 完全に未知数、どういう場面で使うのか分からない

最後に

個人的な感想としては、

  • Javaとの互換性に加え、最近熱い関数型パライダム、その他の便利な機能が備わっているのは良さげだと感じた
  • コンパイラ言語なのにREPLがあるのは、正直ビックリ
  • トレイトは上手く使えば記述量減らせそうで便利だと感じたけど、何故Javaには無いんだろう
  • コンパイルが遅いらしいけど、サーバサイドの実装に使った場合レスポンスが遅くなるとかあるんだろうか

今回、特徴を列挙しましたが、正直まだまだ全然理解が浅い(特に最後の2つ)ので、実際にコードを組んでいく中でこれらを実感できればイイなーと思います。 次は、Scalaフレームワーク(Play Frameworkとか?)辺りの勉強をしつつ、コード書いてみたいと思います。