前説
ご覧頂きありがとうございます。
これをご覧になっているアナタ様はきっと
【Scala Scallar Scalest】になりたいんですよね。
分かりますよ。。。こいつ、何を言ってんだと。。
でも、、、
- 「Scala書けます」って言ってみたい
- 「やっぱ時代はオブジェクト指向&関数型言語だよね」って言ってみたい
- 「10ステップ書いてるけどそれ1ステップでいけるよ」って言ってみたい
- 「Scalaの事は俺に任せろ」って言ってみたい
そうです、やっぱかっこEよね。Scala。
動機が不純?いやいや。
何事もかっこ良くないと。
心も体も脳ミソもイケメソでいきましょう。
挫折しそうになったらもう1度、上記「言ってみたい」気持ちを復唱しましょう。
前置きが長くなりましたが、一緒に最上級のScalestになりましょう。
私もScala初心者なので、「猿でも分かるScala」を目指して執筆して行きたいと思います。
それでは、宜しくお願いします!!
本編
環境構築
Scalaをwindows7にインストール!
ScalaをMACにインストール!
- まずJavaをインストールしてね!
- Scalaをインストール
-
http://www.scala-lang.org/download/
- scala-2.10.4(2014/03/31時点)
- ダウンロードしたらおそらく、下記ディレクトリにあるよね?
- /Users/XXX/Downloads/scala-2.10.4.tgz
- 解凍!!
- Finderでダブルクリックしちゃうか、コマンド(tar zxvf scala-2.10.4.tgz)で。
- 確認!
-
http://www.scala-lang.org/download/
export SCALA_HOME=/Users/XXX/Downloads/scala-2.10.4
export PATH=$PATH:$SCALA_HOME/bin
scala
scala>
必殺「Hello World」の術
まずはやっぱり、「Hello World」でしょ。
って方は下記を見てくれれば、理解出来るよ!
Scalaの良い所
互換性
- ScalaをコンパイルするとJVMマシンバイトコードになる、つまりJVM上で動作する
- って事は既存のJavaプログラムと容易に連携が可能となる
- Javaプログラムから、scalaプログラムをコールする事も出来る
簡潔性
- ScalestからするとJavaと比べて半分のステップ数で済む
class MyClass {
private int age;
private String name;
public MyClass(int _age, String _name) {
this.age = _age;
this.name = _name;
}
}
class MyClass(var age: Int, var name: String) {}
高水準
高水準・・・・ちょっとすぐに理解出来ない言葉が出ました。詳しく書きますね。
これを見ているアナタ様はきっと、人のソース(Java前提)を読んで改修した経験があると思います。
クラス名、メソッド名、変数名から、何を書いてるのか理解出来るプログラムであればまだ良いですが
Java覚えたての人のソースを見ると、恐ろしい変数名、メソッド名があると思います。
(筆者は「sasaki」というクラスを見た事があります。もちろんauthorはsasakiさんでしたw)
何が言いたいかというと、1からプログラムを組む事よりも、他人が書いたソースコードを読み
理解し、改修し、機能追加し・・・という機会が多いと思います。
そこでコードが複雑すぎて理解が浅い、という事になると・・恐ろしい失敗、バグが待っていますよね。
しかも複雑なソースコードこそ、ミスが許されない重要な機能、ソフトウェアだったりしますよね。
しかーし!!!!
Scalaは、設計・利用するインターフェイスの抽象レベルを上げる事が可能なのです。
これが「高水準」という意味です。
具体例は下記に。
例えば特定の文字列(hoge)に数値が含んでいるか知りたいプログラムを参考にします
下記の例だと、「abcde3fg」の中に数字の3が含んでるのでtrueになりますね。
boolean hogeHasNum = false;
String hoge = "abcde3fg";
for (int i = 0; i < hoge.length(); i++) {
if (Character.isDigit(hoge.charAt(i))) {
hogeHasNum = true;
break;
}
}
これをScalaで書くと(もっと完結に書けるかも)
var hoge = "abcde3fg"
val hogeHasNum = hoge.exists(_.isDigit)
まず簡潔、そして見慣れればJavaコードより理解しやすくなると思いませんか?
Scalaコードであれば全体として複雑さが緩和されミスをする危険を減らせます。
Javaコードではループで1文字ずつ処理して文字列を扱っていますが
Scalaコードのこの例ではexistsでfor文の役割を果たし、
_(アンダースコア)でhogeにある文字列の1文字ずつ取り出し、isDigitで判断しています
ScalaではJavaにない、かゆい所に手が届く関数が数多く用意されてます。
型推論
これは時と場合によるので絶対良いというわけではありませんが
いちいち型書かなくても分かるわい!って短気で損気な型には使えるかな。
- 型書かないやーつ
val message = "Hello"
- 型書くやーつ
val message:String = "Hello"
んー・・・・何かあんまり良さが伝わらないのでもう一個!!
- 型書くやーつ2
val x: HashMap[Int, String] = new HashMap[Int, String]()
- 型書かないやーつ2
val x = new HashMap[Int, String]()
おーー何となく短くなったし、見苦しさも無くなったかな。
まとめ
何となく、Scala良いかも!って思ってもらえましたかね?
今回は筆者の心の言葉ばっかりやん!っていう雰囲気もありますが
こんな感じで楽しく、一歩ずつ、進んで参りたいと思います。
さぁーって、次回の投稿は?
- 実際にコマンドラインでScala叩いてみよう!
- var、valの違いって何だろ?
- Scalaの演算子
の三本です!
次回投稿もまた見てくださいね!
じゃんけん、ぽん!
うふふふふふふ