はじめに
「Scala(スカラ)って知ってる?」
「ああ、守備力上げる呪文でしょ?」
「( ゚Д゚)ハァ?」
ってならないように、Scalaを知らない人のために特徴をまとめました。
scalaとは
- オブジェクト指向言語と関数型言語の特徴を併せ持ったプログラミング言語。
- 名前は「scalable language」に由来する。
- Java上で動作し、既存のJavaプログラムとの連携も可能。
- ライバルはgroovy? パフォーマンスではScala圧勝・・・らしい。
特徴
- すべてがオブジェクト。プリミティブ型はない。
- 静的型付けのため、コンパイル時点でエラーが検出される。
- 強力な型推論で自動的に、型を判断。なので宣言は変数か定数かを決めるだけ。
// 変数宣言
var user = getUser()
var user: User = null nullはさすがに推論できないので型宣言が必要
// 定数宣言
val str = "TEST"
- nullは使えるけど、できるだけ使わないほうが良いという方針。(Option型を使用。SomeかNoneか)
- 純粋関数型プログラミングが可能。(val(定数)と不変コレクション(List, Set,Map)を使う)
- 手続き型プログラミングも可能。(var(変数)と可変コレクション(List, Set, Map)を使う)
- 関数もオブジェクトとして扱うことが可能。
- 既存クラスの拡張も可能。(自動型変換宣言をすることによってメソッドを追加したようにみせることができる。)
- トレイトがある。(実装やフィールドを持ったインタフェース)
- クロージャの利用が可能。
- Buildツールが用意されている。(SBT)
- Javaのクラスの利用も可能。(Javaライブラリも利用可能) ※ただしJavaとScalaのコレクションは異なるので変換する必要があり注意。けっこうめんどくさい。
- XML(HTML)を直接プログラム内部に記述可能。
var html =
<HTML>
<Body>
getcontent()
</Body>
</HTML>
convert(html)
- 複数行文字列がある。
- 頑張れば、Androidアプリの開発も可能。
デメリット
- 言語規約がとても多く、言語自体も割りと難しいので学習コストが高い。
- Webアプリ開発だと、Playフレームワーク 一択かも。(一応ほかにもある。)
- break, continueがない。(一応あるけど、try-catchで無理やり実装しているため、使いにくい。)
その他
- javaの創設者(James Gosling)や、JRubyの開発者(Charles Nutter)が 「Scalaはjavaの後継者である」と言っている。
- Groovyの創作者(James Strachan)もScalaへの賛意を表明している。
- Twitterで2009年にバックエンドをRubyからScalaに移行した。
- PlayフレームワークはScalaをサポート。
- Scalaでは物足りないという人達が作ったScalazという狂ったライブラリもある。(Scalaのライブラリを補うライブラリ)
- scalaのeclipse用プラグインやscala用eclipseもある。
最後に
上記の特徴を覚えておけば、いつか素敵な女性に「Scalaにお詳しいんですね。」
と言われるかもしれません。
ちなみに私は現場で「Scala使おうよ」と言ったら却下されました。
よってScalaの実務経験はなく、趣味でちょっと触っただけの素人ですが
いつか業務でも使ってみたいです。
でもほんとはkotlinがいいです。