LotosLabo

プログラミング技術とか気になった情報を載せていきます

Scalaについて1

f:id:lo25131:20140327030550p:plain


Scala とは Javaプラットフォーム上で動作可能の
オブジェクト指向型+関数型言語プログラミング言語です。
有名どころですと、Twitterなどがこの言語を採用しています。
ScalaとはScalableという意味で、拡散可能な言語を意味しています。

そしてなぜ、Javaと変わらないのに注目されるかといいますと、Java言語より、少ない量でプログラムを書けるというの一つの利点でもあります。


開発環境

Scalaのダウンロードはこちらから行えます。

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

ダウンロードしたら、環境変数のパスを通してください。

バーションの調べ方

scala -version


f:id:lo25131:20140327032124j:plain



Eclipse環境での始め方


JavaVMでも起動が可能なので、EclipseでもScalaをやることが出来ます。

ScalaEclipseでの構築の仕方は

新規ソフトウェアをインストールより

http://download.scala-ide.org/sdk/helium/e38/scala210/stable/site

こちらをアドレスを入力して手順にそってインストールしていきます。

ScalaEclipseのバージョン等はこちらから確認することが出来ますので、

最新のバージョンを使うことをおすすめします

http://scala-ide.org/download/current.html


例:
package com.lotoslabo.scalatest

object helloworld {
def main(args : Array[String]) : Unit = {
println("Hello World");
}
}

こんなかんじで Hello Worldと出力することが出来ます。


コマンド・ラインでのScala


基本的にこっちのほうで今回はやっていきます。

コマンド・ラインで、 Scala と入力すると、始められます。

f:id:lo25131:20140327033911j:plain

終了は exit で出来ます


Hello world

scala> println("Hello,world")

f:id:lo25131:20140327034136j:plain


コンパイル

object Hello {
def main(args: Array[String]) {
println("Hello World")
}
}

コンパイルするScalaファイルはクラス名とmainが含まれていないとコンパイルエラーになります。

コンパイルには scalac HelloWorld.scala と入力するとコンパイル出来ます。
(scalac ファイル名.scala)

何もエラーがなければ、

「HelloWorld.class」
「HelloWorld$.class」

の二つがカレントディレクトリに作成されます。

そして、プログラムを実行するには

scala クラス名 で実行できます。


コメント

/* コメント
コメント */

// コメント


データ型


整数型  Int Long
浮動小数点型 Double Float
真偽型 Boolean
文字 'a'
文字列 "aa"


変数の宣言

val を使います。

val a: Int = 1


また var でもいいです。

var a: Int = 1


しかし valは再代入できないが、varは再代入できる


型推論

val a = 1

Int を省略して Intを推論する


デフォルト値

var a: Int =_

デフォルト値が入る

0がデフォルト

Booleanはfalse


if式

var i = 2
if (i == 2) println("aiu") else println("hahaa")

iが2のときは aiu
iが2以外の時は hahaa


while式


var i = 0
while (i < 10) i = i + 1
println(i)

iの初期値は0で、iを10まで1ずつ足して出力する


do while式

var i = 0
do
i = i + 1
while (false)

println(i)

doをすると複数行書ける


ブロック式

{
val a = 1 + 2
val b = a * 3
val c = b - 4
}


変数にも代入できる


val result = {
val a = 1 + 2
val b = a * 3
val c = b - 4
c / 5
}


型チェック

Anyの isInstanceOfが使える

(例)

val a: Any = 1

a.isInstanceOf[String]

trueかfalseで返す


型キャスト

型を変換することです

asInstanceOfが使えます

(例)

val a: Any = 1
a.asInstanceOf[Int]


関数の宣言

defによる宣言

def 関数名(引数: 型名, 引数: 型名): 戻り値 = 内容


(例)

def plus(a: Int, b: Int): Int = {
return a + b
}
plus(1,1)


※return は省略可能です

さらに型も省略可能です。

def plus(a: Int, b: Int) = {
a + b
}
plus(1,1)


void型


戻り値がない型 => Unit型

def a = println("string")


Unit型の関数は = を省略して{...}と書くことも出来る

def a(n:Int){
    println(n)
}


デフォルト引数

変数名: 型名 = デフォルト値

def greet(name: String = "John") = println("Hello, " + name)

greet()
=> Hello, John

greet("Taro")
=> Hello, Taro


名前付き引数

def minus(a: Int, b: Int) = a - b
minus(b = 50, a = 100)

引数の名前を指定することで順番を入れ替えることが出来る


可変長引数

(例)

def func(a: Int*) = {
ver i = 0
val length = a.length
while (i < lenght) {
println(a(i))
i += 1
}
}

func(1,2,3,4,5)


出力結果は


2
4
6
8
10


型の紹介

Any型
AnyRef型(参照型)
AnyVal型(プリミティブ型)