日和ってすいませんm(_ _)m
Ubuntu版はあっさり使えたのに、なぜかWindows版がだめでした。
コンパイルして、実行すると、mainがないと怒られます(T T) うう
ま、それはそれとして
コマンドラインから使うことにして、とにかく勉強開始です。
簡単にセットアップ
- Scalaご本尊をダウンロード&解凍して、適当なディレクトリに配置
- 環境変数追加
- SCALA_HOME=Scalaを配置した場所
- PATH=%PATH%;%SCALA_HOMNE\bin
Dos窓登場
Scalaと入れてエンター
さー、開始です。
変数の定義
val・・・値型var・・・変数型
scala>val n: Int = 1ここ、大事
n: Int = 1
scala>var m: Int = 2
m: Int = 2
scala> n = 1:8: error: reassignment to val
n = 1
^
scala> m = 3
m: Int = 3
n = 4・・・error:再代入できないっす
m = 5・・・変数なのでOK
Scala推奨は、valでの定義です。
関数の定義
def 関数名(引数: 型, ・・・): 戻り値の型 = {処理
}
scala> def greater(x: Int, y: Int): Int = {型推論してくれるので、戻り値は省略可能
| if (x > y) x else y
| }
greater: (x: Int, y: Int)Int
scala> greater(3, 9)
res0: Int = 9
あくまで、コンパイラが推測できるなら、ね
制御構造
if (条件) 値1(絶対指定してね) else 値2scala> if (true) 5 else 6
res1: Int = 5
scala> if (false) 5 else 6
res2: Int = 6
for (ブロック引数 <- コレクション; ・・・) 処理内容
for (ブロック引数 <- コレクション; ・・・) yield 値
scala> for (i <- 1 to 9) print (i + " ")
1 2 3 4 5 6 7 8 9
高階関数
高階関数ってゆーのはね、関数を引数にとる関数のことです。なんのこっちゃ、ってゆー人は、nouzui2007と同じですので、がんばってくださいm(_ _)m
mapとかfilterとかは、引数に関数を要求します。
書き方は、下をみてくださいね。
nで指定しているのが、=>以降の関数の引数になっています。
scala> List(1,2,3,4).map(n => n+1)
res5: List[Int] = List(2, 3, 4, 5)
scala> List(1,2,3,4).filter(n => n%2==0)
res6: List[Int] = List(2, 4)
mapのほうは、Listに指定した要素ごとに、1を加算していって、結果をListにして返します。
filterのほうは、Listに指定した要素のうち、偶数になる要素をListにして返しています。
_ は魔法のことばです。
scala> List(1,2,3,4).map(_*2)
res7: List[Int] = List(2, 4, 6, 8)
クロージャ
無名関数について、おベンキョしましょうscala> val sq = (n: Int) => n * 100無名関数はsqとゆー変数にセットしてますね。
sq: (Int) => Int =
scala> sq(9)
res9: Int = 900
ここはポイントです。
変数と関数に区別がないことに気づいたでしょうか?
私は気づきませんでした・・・orz
気づいた人は、こんなことができちゃうことがわかるかと思います。
scala> val sq = (n: Int) => n * 100ここでもでました、魔法の言葉。
sq: (Int) => Int =
scala> sq(9)
res9: Int = 900
scala> val alias = sq _
alias: (Int) => Int =
scala> alias(10)
res10: Int = 1000
これは、仮引数です。
仮引数のときに括弧は省略できるようです。
ちょっと、頭が重くなってきたのでこの辺で。
0 件のコメント:
コメントを投稿