何を書いているのか
Scalaをちょっと触り始めたので、そのレポートのようなものです。
これからScalaを始めるかもしれない人の参考になれば幸いです。
勉強始めたばかりなので間違っているところがあったらごめんなしあ。
Scalaの特徴
- スケーラブル
- 小さいスクリプトから大規模システムまで使える
- オブジェクト指向の機能と関数型言語の機能を統合
- 静的な型付け&強力な型推論
- 高階関数
- 関数を引数にしたり返り値にしたりする、関数
- 不変コレクション
- コレクションとはリストとかキューのようなデータの集まりこと
- 基本、コレクションは一度作成すると変更できない
- 並列処理がやりやすい(らしい)
気になったところ
オブジェクト指向で書くならJavaに近いかな
-
Javaのライブラリが使える
たいていのJavaのライブラリはimport org.hoge.fuga
みたいにimportして使えるらしいですヽ(*´∀`)ノ
コンパイルが遅いような気がする
まあちゃんと計測とか比較とかはしていなんですけどね。。-
全てのデータ型はオブジェクト、演算子はメソッド
たとえば、1 + 2
という式は
1.+(2)
の省略記法になっています。
1という値のIntクラスのインスタンスの"+"という名前のメソッドを呼び出し、その引数に値が2のIntインスタンスを渡している、ちゅうわけです。 staticがない!
クラス内のフィールドやメソッドを静的にする"static"はScalaにはありません。
そのかわりシングルトンオブジェクト(インスタンスが1個しか作られない静的クラスみたいなもん)というものを使うようにします。-
何かと短く書ける
関数宣言def foo(x:Int, y:Int): Int = { return x + y } def foo(x:Int, y:Int) = x + y
関数リテラル
val someFunc = (hoge:Int) => { hoge + 3 }: Int val someFunc:(Int)=>Int = _ + 3 val someFunc = (_:Int) + 3
リストの要素に関数を適用
someList.foreach((str:String) => {println(str)}) someList.foreach(str => println(str)) someList.foreach(println)
2つか3つ並べて書いているのが、同じ処理になります。
特にチーム開発の際は読みやすさや記述の一貫性の確保に気を使いそう。。
開発するには(Windowsの場合)
- JDKインストール
-
http://www.scala-lang.org/download/
- コマンドが打てればいい人 → Scalaのバイナリをダウンロード
- IDEが欲しい人 → Scala IDEをインストール
感想
Scala以前に何の言語を経験しているかによると思いますが、そんなにとっつきが簡単な言語ではないと思います。記法にしても思想にしてもそこそこクセがあります。
でもまあ難解ということはないですし、理解するに従って上手く作られてるなあと思えてきます。
(なお、「初めてのプログラミング言語」にはあまりお勧めしません。)
参考にしたよ
スケーラブルで関数型でオブジェクト指向なScala入門
Scalaメモ(Hishidama's Scala Memo)
Java職人がScalaやって覚えた基本を書いておく - Qiita