日和ってすいません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: (Int) => Int =無名関数はsqとゆー変数にセットしてますね。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 件のコメント:
コメントを投稿