2011年01月11日

Scalaを使ってみました(11)


今回は「Scala Eclipse Pluginのインストール/設定」です。
Eclipse 3.5 Galileo Pleiades All in Oneを起動している状態で、
作業を行いました。

――――――――――――――――――――――
■Scala Eclipse Pluginのインストール
――――――――――――――――――――――
(1) Eclipseの起動
(2)「ヘルプ」-「新規ソフトウェアのインストール」を選択
(3) 作業対象に「http://www.scala-lang.org/scala-eclipse-plugin-nightly」を入力
(4)「追加」ボタンクリック
(5) 名前に「Scala」を指定して「OK」をクリック
(6)「Scala Eclipse Plugin」をチェックして「次へ」をクリック
(7) インストール詳細画面が表示されたら、「次へ」をクリック
(8) ライセンスのレビュー画面が表示されたら、
「使用条件の条項に同意します」をチェックして「完了」をクリック
(9) セキュリティー警告のダイアログが表示されますが、
気にしないで「OK([はい]だったかも)」をクリック
(10) Ecliseの再起動確認のダイアログが表示されます。
「はい」をクリックしてください。

――――――――――――――――――――――
■Scalaのプログラム作成方法
――――――――――――――――――――――
(1)「ウインドウ」−「パースペクティブを開く」-「その他」-「Scala」を選択
(2)「ファイル」-「新規」-「Scalaプロジェクト」を選択
(3) プロジェクト名に「HelloScala」を指定して「次へ」をクリック
(4)「完了」をクリック
(5)「ファイル」-「Scalaオブジェクト」を選択
(6) 名前に「HelloWorld」を指定して「完了」をクリック
(7) 以下のコードを入力
object HelloWorld {
def main(args:Array[String]) {
println("Hello Scala!");
}
}
(8)「実行」-「実行」を選択
(何かダイアログが表示されたような気がしますが
あんまり気にしないでOKを押した記憶があります。)
(9) コンソールに「Hello Scala!」が表示された場合は成功です。
posted by rururu at 00:02| Comment(0) | TrackBack(0) | Scala

2010年03月24日

Scalaを使ってみました(10)


例外処理について

―――――――――――――――――
例外処理
―――――――――――――――――
[例外の階層]
lang.Exception ------io.IOException
|
----lang.RuntimeException-----lang.ArithmeticException
|--lang.IllegalArgumentException
|--lang.NumberFormatException
[文法]
try {
例外が発生する可能性のあるコード
} catch {
case 例外クラス => 例外クラスの例外が発生した時に実行するコード
} finally {
例外が発生しても発生しなくても実行するコード
}
[例]test016.scala
var x: Int = 0
try {
x = 100 / 0
} catch {
case ex: ArithmeticException => println("ArithmeticException")
case ex: Exception => println("Exception")
} finally {
println("finally")
}
println("end")
[実行]
scala> :load test016.scala
x: Int = 0
ArithmeticException
finally
end

―――――――――――――――――
例外をスローする
―――――――――――――――――
[文法]
・throw new 例外クラス("xxxx")
・throw new Error("xxxx")

[例]test017.scala
def test017 (x: Int): Unit = {
if(x == 0) {
throw new IllegalArgumentException("IllegalArgumentException")
} else {
println(x + 10)
}
}
posted by rururu at 01:26| Comment(0) | TrackBack(0) | Scala

2010年03月23日

Scalaを使ってみました(9)


関数について(2)

――――――――――――――――――――――
可変長引数リスト
――――――――――――――――――――――
[文法]
def 関数名 (引数名: 引数のデータ型*):戻り値のデータ型 = {
処理
}

[例]test013.scala
def average (n: Int, vars: Double*): Double = {
var total = 0.0
for (v <- vars.elements) {
total += v
}
total / n
}
[実行]
scala> :load test013.scala
scala> average(2, 10.0, 12.0)
res0: Double = 11.0

――――――――――――――――――――――
無名関数
――――――――――――――――――――――
[文法]
var 変数名 = (引数名:引数のデータ型) => 処理
[例]test014.scala
var mumei = (x: Int, y: Int) => x + y
var z = mumei(1, 2)
[実行結果]
scala> scala test014.scala
mumei: (Int, Int) => Int = <function2>
z: Int = 3

――――――――――――――――――――――
値を返さない関数
――――――――――――――――――――――
[文法]
def 関数名():Unit = {
処理
}
[例]test015.scala
def test():Unit = {
println("hello")
}
[実行]
scala> :load test015.scala
scala> test
hello
posted by rururu at 00:15| Comment(0) | TrackBack(0) | Scala

2010年03月17日

Scalaを使ってみました(8)


関数について

[文法]
def 関数名 (引数名: 引数のデータ型) : 戻り値のデータ型 = {
処理
}
[複数の引数も指定可能] 「,」で区切る
def 関数名 (引数名1: 引数のデータ型,引数名2: 引数のデータ型) : 戻り値のデータ型 = {
処理
}

[例1] ファイル名:test011.scala
def test(x: Int): Int = {
x * 2
}
[実行]
scala> :load test011.scala
scala> var x = test(15)
x : Int = 30

[例2] ファイル名:test012.scala
def addInt(x1: Int, x2: Int): Int = {
x1 + x2
}

[実行]
scala> :load test012.scala
scala> var x = addInt(5, 2)
x : Int = 7

posted by rururu at 01:46| Comment(0) | TrackBack(0) | Scala

2010年03月16日

Scalaを使ってみました(7)


―――――――――――――――
■for
配列の中から要素を1個ずつ
取り出して出力するサンプル
―――――――――――――――
(サンプル1)
val nums = Array(1, 2, 3, 4, 5)
for (num <- nums) {
println(num)
}

(実行結果)
1
2
3
4
5

(サンプル2)
val mojis = Array("PHP", "Java", "Servlet","Webアプリケーション")
for (moji <- mojis) {
println(moji)
}
(実行結果)
PHP
Java
Servlet
Webアプリケーション

―――――――――――――――
■for
yieldキーワードを使ったサンプル
―――――――――――――――
(構文)
for (列挙子)
yield { 実行するコードブロック }
}

(サンプル)
val mojis = Array("PHP", "Java", "Servlet", "Webアプリケーション")
for (moji <- mojis) yield {
println(moji)
moji
}

(実行結果)
PHP
Java
Servlet
Webアプリケーション

―――――――――――――――
■foreach
―――――――――――――――
(構文)
オブジェクト.foreach(式)

(サンプル)
val mojis = Array("PHP", "Java", "Servlet", "Webアプリケーション")
mojis.foreach(println)

(実行結果)
PHP
Java
Servlet
Webアプリケーション
posted by rururu at 00:52| Comment(0) | TrackBack(0) | Scala

2010年03月14日

Scalaを使ってみました(6)



繰り返し(for, do, while, foreach)、
繰り返しの制御(break)
breakは2.8からライブラリレベルでサポート
continueはありません。

breakを試したいためだけにScala 2.8.0 Beta 1
をインストール(現在の安定版は2.7.7)

―――――――――――――――――――――――――――――
■for
―――――――――――――――――――――――――――――
[文法]
for (列挙子) {
処理
}

[例]
var keisan = 0
for(i <- 1 to 9) {
for(j <- 1 to 9) {
keisan = i * j
if(1 >= keisan || keisan <= 9) {
print(" " + keisan)
} else {
print(" " + keisan)
}
}
println("")
}
―――――――――――――――――――――――――――――
■while
―――――――――――――――――――――――――――――
[処理]
while (条件判断式) {
処理
}

[例]
var i:Int = 1
var j:Int = 1
var keisan:Int = 0
while(i <= 9) {
j = 1
while(j <= 9) {
keisan = i * j
if(1 >= keisan || keisan <= 9) {
print(" " + keisan)
} else {
print(" " + keisan)
}
j += 1
}
println("")
i += 1
}
―――――――――――――――――――――――――――――
■do
―――――――――――――――――――――――――――――
[文法]
do {
処理
} while (条件判断式)
[例]
var i:Int = 1
var j:Int = 1
var keisan:Int = 0
do {
j = 1
do {
keisan = i * j
if (1 >= keisan || keisan <= 9) {
print(" " + keisan)
} else {
print(" " + keisan)
}
j += 1
} while (j <= 9)
println("")
i += 1
} while (i <= 9)

―――――――――――――――――――――――――――――
■break
―――――――――――――――――――――――――――――
[例] (break)
import scala.util.control.Breaks._

var i:Int = 1
var j:Int = 1
while(j <= 10) {
breakable {
i = 1
while(i <= 10) {
print(i + " ")
if(i == j) {
println("\n")
break
}
i += 1
}
}
j += 1
}

―――――――――――――――――――――――――――――
■おまけ
―――――――――――――――――――――――――――――
javaで書いたcontinueを使った
プログラムと同じ動きをするサンプル

[Java]
public class ContinueTest {
public static void main(String args[]) {
int i;
for(i = 1; i <= 10; i++) {
if(i % 2 == 0) {
continue;
} else {
System.out.print(i + " ");
}
}
}
}

[Scala]
var i:Int = 1
while(i <= 10) {
if(i % 2 != 0) {
print(i + " ")
}
i += 1
}

posted by rururu at 02:00| Comment(0) | TrackBack(0) | Scala

2010年03月12日

Scalaを使ってみました(5)


――――――――――――――――――――――
■matchとcase
――――――――――――――――――――――
他の言語ではswitch ... caseの構文ですが、
Scalaはmatchとcaseを使うらしいです。
分岐の条件式には任意の型が使えます。

例1と例2の結果は同じです。
(例1)
val i = 1
var msg = i match {
case 0 => "0ですね"
case 1 => "1ですけど"
case _ => "0でも1でもないですよ"
}
println(msg)

(例2)
val i = 1
i match {
case 0 => println("0ですね")
case 1 => println("1ですけど")
case _ => println("0でも1でもないですよ")
}

★注意事項★
日本語を含むソースファイルはUTF-8(BOMなし)で
保存しないと正常に動作しません。
posted by rururu at 00:04| Comment(0) | TrackBack(0) | Scala

2010年03月11日

Scalaを使ってみました(4)


分岐(if)について

――――――――――――――――――――――
■if (分岐)
――――――――――――――――――――――
★記述方法(1)
if (条件式) 処理
[例]
if (x == 0) println("test")
★記述方法(2)
if (条件式)
処理
[例]
if (x == 0)
println("test")

★記述方法(3)
if (条件式) 処理1 else 処理2
[例]
if (x == 0) println("test") else println("other")
ちなみにScalaでは以下の書き方はエラーになります。
(条件判断式とelseの後の文を { } で囲む必要あり)
if (x == 0)
println("test")
else
println("other")
以下のいずれかの書き方ならOKです。
if (x == 0) {
println("test")
} else {
println("other")
}
または
if (x == 0) {
println("test")
} else
println("other")
posted by rururu at 01:19| Comment(0) | TrackBack(0) | Scala

2010年03月09日

Scalaを使ってみました(3)


演算子とインクリメント、デクリメントの説明です。

―――――――――――――――――
■演算子
―――――――――――――――――
・算術演算子 : +、-、*、/、%
・関係演算子 : 2つの値の関係をあらわす (※1)
・論理演算子 : && (AND)、|| (OR)、! (論理否定)
・ビットごとの演算子 : ~(ビット反転)、&(ビットごとのAND)、
|(ビットごとのOR)、^(ビットごとのXOR)、
<<(左シフト)、>>(右シフト)、
>>>(符号なし右シフト)

※1、 「==」 一致、「>」「>=」:大
「!=」不一致、「<」「<=」:小

(算術演算子の例)
scala > 1 + 2
res0: Int = 3
scala > 5 - 2
res1: Int = 3
scala > 2 * 3
res2: Int = 6
scala > 12 / 4
res3: Int = 3
scala > 12 % 7
res4: Int = 5

(関係演算子の例)
scala > 1 > 2
res5: Boolean = false
scala > 1 != 2
res6: Boolean = true
scala > 2 == 2
res7: Boolean = true

(論理演算子の例)
scala > (2 == 2) && (3 == 3)
res8: Boolean = true
scala > (2 == 3) && (3 == 3)
res9: Boolean = false
scala > (2 == 3) || (3 == 3)
res10: Boolean = true
scala > !true
res11: Boolean = false

―――――――――――――――――
■インクリメント、デクリメント
―――――――――――――――――
(例)
scala > var a:Int = 10
scala > a += 1
scala > println(a)
11
scala > var c:Int = 10
scala > c -= 1
scala > println(c)
9
posted by rururu at 01:19| Comment(0) | TrackBack(0) | Scala

2010年03月07日

Scalaを使ってみました(2)


変数、定数、コメント、予約語について
■識別子
先頭は英文字(アンダースコア(_)も使えます)。
一般的には英数文字とアンダースコア(_)は2文字
以降に使用するようです。

■変数(var変数)
varは、変数(Variable)を随時変更する場合に使用
(使用例)
var msg = "Hello, Scala"
println(msg)
msg = "test"
println(msg)

■定数(val変数)
valは、値の宣言(Value Declaration)する場合に使用
(使用例)
val msg = "Hello, Scala"
println(msg)

■コメント
(1) 1行のコメント
(「//」より後の文字がコメントとなります。)
// コメント
(2) 複数行のコメント
(「/*」と「*/」で囲んだブロックがコメントとなります。)
/*
コメント
*/
・コメントのネストもできます。
/* コメント1 /* コメントのネスト */ の例 */

■予約語
abstract case catch class def
do else extends false final
finaly for forSome if implicit
import lazy match new null
object override package private protected
requires return sealed super this
throw trait try true type
val var while with yield
_ : = => <<:
<% >: # @
posted by rururu at 22:42| Comment(0) | TrackBack(0) | Scala

2010年01月19日

Scalaを使ってみました (1)


最近、注目されているプログラミング言語の
「Scala」をインストールしてみました。
(実行にはJDK1.4以降が必要)
1、以下のサイトから「IzPack Installer 」をダウンロード
http://www.scala-lang.org/downloads
2、ダウンロードしたファイルを実行
インストーラの指示に従って任意の場所にインストール
ユーザー環境変数に
SCALA_HOMEの追加とPATHにSCALA_HOME\bin
が追加されますので、PCを再起動
3、動作確認
コマンドプロンプトを起動して以下のコマンドを実行
> scala
以下の文言が表示されればインストールは成功
> Welcome to Scala ・・・
終了するには「:quit」と入力
4、Hello Worldの作成
(1) テキストエディタを開き、以下のコードを入力
object HelloWorld
{
def main(args: Array[String])
{
println("Hello, World!");
}
}
(2) ファイル名は「HelloWorld.scala」で保存
(3) classファイルへのコンパイル
コマンドプロンプトを起動して以下のコマンドを実行
ファイルの場所> scalac HelloWorld.scala
(4) エラーがでなければ以下のコマンドを実行
「Hello, World!」と表示されるはず
ファイルの場所> scala HelloWorld

日本語の本[Scalaスケーラブルプログラミング 4830円]が
出たらしいで興味がある人は、まずは本屋で立ち読みして
みてください。
理想の言語? - 書評 - Scalaスケーラブルプログラミング
http://blog.livedoor.jp/dankogai/archives/51275491.html
posted by rururu at 23:55| Comment(0) | TrackBack(0) | Scala