ざっきーの雑記ー

プログラミングとかデバイス自慢とか

scalaはじめてみた

私について

 なんとなく作りたいコードをネットで調べてはコピペして遊んでいたが(言語無差別),Play Framework2やらいろいろとできるJavaの勉強を主にしていた.
 小手先の技術でオブジェクト指向(風味)なコーディングをし, 小手先の技術で遊べるレベルになった僕は ひょんなことからscala勉強会に参加し無事撃沈. -> scalaに興味が湧く
 Javascalaに書き直していたら素晴らしさに気づいたので記事にしました.

scalaの気に入ったところ

mySort st = new mySort();  

となるのですが,前後にクラス名を書くのは面倒.
scala型推論を利用すると,

val st = new mySort();  

で終わります. 配列の宣言も同じ.
もちろん,以下のように明示的に型を指定することも可能.

val st: mySort = new mySort();  
  • 型のいざこざが少ない
     また型の話になってしまいますが,Javaではプリミティブな型(double, int, char...)とオブジェクトな型(Double, Integer, Char...)がありました.
     ○○○.parse○○○() を使うようなコード内ではややこしくなったり...
     scalaは関数言語なのでオブジェクト型しかないです. (なんとなくシンプル...?)

  • 動くものを作っていればなんとなくセキュアなものが作れる(1)
     scalaで変数宣言をする際,valとvarを用いる.valは値を上書きしない変数に,varは値を変更する変数を宣言するときに行頭に付ける.(valで宣言した変数が変更された時点でエラーを吐く)
     これにより予期しない値の変更を防ぐことができる.

  • 動くものを作っていればなんとなくセキュアなものが作れる(2)
     Javaを使っていたとき, 「○○クラスの××メソッドだけ使いたいから,とりあえずインスタンス作っておこう」という小手先の技術に身を委ねていた.
           "nullインスタンス量産マン" である.
     しかしscalaでは基本的に行ごとに式が成り立っていなければならない.
     よってどの変数にも値が存在する(?)ため,NullPointerExceptionが起こりにくい.(voidを示すUnit型が存在する)
     式が成り立つようにコーディングしていると,自然と綺麗にコードがまとまっていくので一石二鳥である.

  • Javaからの移行がしやすい
    scalaコンパイルするとJavaのクラスファイルが作られることから分かるように,Javaのライブラリを使うことができる. 

  • 勉強しやすい
     scalaにはREPLという対話型インタプリタが用意されており,関数の動作チェックのようなことがターミナル上で簡単に行える.
     scalaで学んだことをoutputしたい時,気楽に遊ぶことができる.

zacky@zacky-pc MINGW64 ~  
$ scala  
Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_6
6).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val a: Int = 5
a: Int = 5

scala> def myAdd(num:Int) = num+1
myAdd: (num: Int)Int

scala> myAdd(a)
res1: Int = 6

scala> :q  

 こんな感じです.
 たぶんまだまだscalaの魅力はあるのですが,僕が感動したのはこんなところ.
 『式でなければならない』という縛りから生まれる美しいソースコードは見ていて気持ちの良いものです. 今回は記述できませんでしたが,ループ文の記法も無駄のない美しいデザインなのでぜひチェックしてみてください.
http://bach.istc.kobe-u.ac.jp/lect/ProLang/org/scala-list.html
 新参者なので記事内の間違い等ご指摘いただけるとありがたいです.(お手柔らかに...笑)
 ありがとうございました.