Edited at

Scalaデビューしたった

More than 3 years have passed since last update.


何を書いているのか

Scalaをちょっと触り始めたので、そのレポートのようなものです。

これからScalaを始めるかもしれない人の参考になれば幸いです。

勉強始めたばかりなので間違っているところがあったらごめんなしあ。


Scalaの特徴


  • スケーラブル


    • 小さいスクリプトから大規模システムまで使える



  • オブジェクト指向の機能と関数型言語の機能を統合

  • 静的な型付け&強力な型推論

  • 高階関数


    • 関数を引数にしたり返り値にしたりする、関数



  • 不変コレクション


    • コレクションとはリストとかキューのようなデータの集まりこと

    • 基本、コレクションは一度作成すると変更できない



  • 並列処理がやりやすい(らしい)


気になったところ


  1. オブジェクト指向で書くならJavaに近いかな



  2. Javaのライブラリが使える

    たいていのJavaのライブラリは

    import org.hoge.fuga
    

    みたいにimportして使えるらしいですヽ(*´∀`)ノ



  3. コンパイルが遅いような気がする

    まあちゃんと計測とか比較とかはしていなんですけどね。。



  4. 全てのデータ型はオブジェクト、演算子はメソッド

    たとえば、

    1 + 2
    

    という式は

    1.+(2)
    

    の省略記法になっています。

    1という値のIntクラスのインスタンスの"+"という名前のメソッドを呼び出し、その引数に値が2のIntインスタンスを渡している、ちゅうわけです。



  5. staticがない!

    クラス内のフィールドやメソッドを静的にする"static"はScalaにはありません。

    そのかわりシングルトンオブジェクト(インスタンスが1個しか作られない静的クラスみたいなもん)というものを使うようにします。



  6. 何かと短く書ける

    関数宣言

    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の場合)


  1. JDKインストール


  2. http://www.scala-lang.org/download/


    • コマンドが打てればいい人 → Scalaのバイナリをダウンロード

    • IDEが欲しい人 → Scala IDEをインストール




感想

Scala以前に何の言語を経験しているかによると思いますが、そんなにとっつきが簡単な言語ではないと思います。記法にしても思想にしてもそこそこクセがあります。

でもまあ難解ということはないですし、理解するに従って上手く作られてるなあと思えてきます。

(なお、「初めてのプログラミング言語」にはあまりお勧めしません。)


参考にしたよ

スケーラブルで関数型でオブジェクト指向なScala入門

Scalaメモ(Hishidama's Scala Memo)

Java職人がScalaやって覚えた基本を書いておく - Qiita