Scala入門(1) HelloWorldとテスト
Scala?
凄いエンジニアの方と話しているときに、Scalaが良いという話を聞いた。 Scalaって名前は聞いたことあるけど、今流行りの関数型言語?とかいうやつ?IQ145の美女?くらいのイメージしか無かったので、家に帰ってから調べてみたら興味をそそられた。
Scalaは静的型付け言語で、関数型言語とオブジェクト指向言語の中間らしく、JVM上で実行されるのでJavaのクラスを使えるらしい。というかインラインでJavaが書けるらしい。面白そう。しかもコードが洗練されててカッコイイ!
Javaのクラスが使えるということは、困ったときはJavaっぽく書いたら良いし、AndroidもScalaで開発出来るらしいし、難しそうだけど関数型言語の勉強も出来て良いのでは!って思って始めてみることにした。
Scala使うための環境構築
このサイトを参考にさせてもらいながらScalaの環境を導入した。 IDEはEclipseかIntelliJの2択らしいけど、普段AndroidStudioを使ってるのでIntelliJにした。 blog.chopschips.net
HelloWorld
このサイトを参考に、とりあえずHelloWorldを作った。 thachinohe.hatenablog.com
作ったコードがそのまんまだけどこれ。
object HelloWorld { def main (args: Array[String]){ println(createGreeting(args)) } def createGreeting (args: Array[String]) = { args.headOption match { case Some(name) => "Hello" + name + "!" case None => "Hello!" } } }
色々調べながらこのコードについて理解したことをメモっておくと、
- ScalaにはObjectとClassが両方あって、ObjectはJavaでいうシングルトンクラスに相当。
- match文はJavaのswitch文を強力にした感じのやつで、型ごとに処理を分けたり、case文の中にifを入れたり出来る。かなり便利そう。
- Scalaにはプリミティブ型が存在しない。つまりint, long, double, string, byteとかは無い。オブジェクトのInt, Long, Double, String, Byteを使う。
- プリミティブ型が無いので、+-*/%とかの演算子も実はメソッドとして定義されてる。
HelloWorldのTest
ScalaのテストにはScalaTestというのを使うのが一般的らしい。
ScalaTestを使うと様々な書き方でテスト出来るらしいが、僕はxUnit系に慣れてるので何となくFlatSpecを使った。
built.sbtを見ると、
scalaVersion := "2.11.6"
って書かれてたので、ScalaTest使うために
libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test"
を追加した。
書いたテストコードがこれ。
import org.scalatest._ /** * Created by yuki on 5/16/15. */ class HelloWorldTest extends FlatSpec { "No argment" should "return Hello!" in { val greeting = HelloWorld.createGreeting(Array()) assert(greeting == "Hello!") } "With argment" should "return HelloTest!" in { val greet = HelloWorld.createGreeting(Array("Test")) assert(greet == "HelloTest!") } }
IntelliJでテスト動かすとこんな感じでテストが通った!
参考になるか分からないけど、プロジェクト一式はGithubに置いてある github.com
これだけだと全然Scalaっぽくないし、これから勉強してラムダ式とかカリー化とかクロージャとか使うようなもっとScalaらしいコードを書いていきたい。