はじめに
来年度から,Scalaを使うことになるそうなので,Scalaをちまちま勉強しています.
教材はこれ(通称コップ本).
この本の一つの章が終わるたびに記事を書こうと思います.
ちなみにこの本の章構成はこんな感じです.
コップ本の目次
基本的に,自分が気になったところだけ抜粋して書くつもりです.
僕は,C,Javaあたりの言語に親しみがある人間です.
あと,Haskellを勉強する機会もありました(あんまりわかってない疑惑あり).
ですので,これらの言語との違いや似ている部分を主に書くと思います.
あと,箇条書きが多いです.
今回は2章「Scalaプログラミングの第一歩」を勉強したまとめです.
saclaインタプリタの使い方
$ scala
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_07).
Type in expressions to have them evaluated.
Type :help for more information.
scala> 1 + 2
res0: Int = 3
scala> res0 * 3
res1: Int = 9
scala> :q
- 先に計算した結果は自動で
res0
などに格納される - 計算結果の
Int
などは結果のデータ型
これは,Scalaインタプリタが型推論し導いている
変数,定数の使い方
scala> val hoge = 0 hoge: Int = 0 scala> var piyo = "piyo" piyo: java.lang.String = piyo scala> piyo = "piyopiyo" piyo: java.lang.String = piyopiyo scala> hoge = 1 <console>:8: error: reassignment to val hoge = 1 ^
val <定数名> = <値>
で 定数 を定義する.
(val
はvalueの意)var <変数名> = <値>
で 変数 を定義する.
(var
はvariableの意)- 定数と変数はともに,初期値なしで宣言できない.
- 定数には再代入できない.
- 宣言時にデータの型を明示する場合は
val <定数名>: <データ型名> = <値>
と定義する. - データ型名を変数の後ろに書くのは,型推論によってデータ型名を省略できるようにするため.
(データ型名を前に置く文法にすると,省略したときに,宣言か否かの判別ができない.)
関数の使い方
scala> def add(x: Int, y: Int): Int = { | x + y | } add: (x: Int, y: Int)Int scala> add(1, 2) res0: Int = 3 scala> def hello() = { | println("hello") | } hello: ()Unit scala> hello() hello scala>
- 関数の宣言は以下のフォーマットである.
def <関数名>(<仮引数名1>: <仮引数1のデータ型名>, ...): <関数の戻り値のデータ型名>
= {関数本体} - '{'の前の'='の書き忘れに注意が必要.
- 戻り値は関数本体の最後の式が返す値となる.
- 関数の戻り値は型推論される.
- 仮引数は 型推論されない.
- Cなどの
void
型に相当するものはがUnit
である.
配列の参照
- 配列へのアクセスは
array(0)
のように書く.
array[0]
のようには書かない.
コマンドライン引数
- コマンドライン引数を格納するのは
args
という名の文字列の配列である. args(0)
はプログラム名ではない.
cf. C言語のargv
の最初の要素はプログラム名である.
foreach
args.foreach(arg=> println(arg)) args.foreach((arg: String) => println(arg)) //上と同じ処理を行う args.foreach(println) //部分適用
(arg: String) => println(arg)
の部分を関数リテラルという- 引数の型(上の例では
arg
の型)は省略できる - 引数の型を明示する場合は,引数を示す部分を括弧で括る.
foreach
は引数に関数を取る,ということだと思う.
関数型言語では,関数も値と同じように扱う.
for式
for(arg <- args){/*argを用いた処理*/}
for(<定数名> <- <配列名>){処理}
でループが回るたびに配列の中身を定数に一つずつ入れ,処理する.
その他
- scalaの推奨インデントはスペース2つである.
- scalaでは
++i
やi++
は使えない
おわりに
というわけで,Scalaの最初の一歩を踏み出した感じです.
さて,いつまで続くでしょうか…
さて,いつまで続くでしょうか…
--
My Emacs Files At GitHub
0 件のコメント:
コメントを投稿