【プログラミング】【Scala】コップ本、重い(物理)。(Scala勉強2日目)
3章~5章まで読了。
Javaやってたからこの辺は割とサクサク進む一方、Scala独特の発見があったりもしてなかなか興味深かった。
第3章のまとめ ~Scalaプログラミングの次の1歩~
・Scalaではすべての演算がメソッド呼び出しである
すなわち、1 + 2 と (1).+(2) は 同一である。
1+2という演算は、「1」というInteger型の変数が引数を1つとる「+」というメソッドを呼び出す、と言い換えることができる。
・Rubyとかも演算子がメソッドっぽい書き方できるらしい。時代進んでんなー。
・Scalaでは引数を1つだけとるメソッドは「()」と「.」を省略できる。
・ScalaではListが機能豊富。さらに引数に関数をとれるため柔軟性が高そう
・count,exists,filter,forall,foreach,map,remove,sortが関数を引数に取れるっぽい。
・曰く、flatmapがさいきょーらしい。
・異なる型を格納できるListっぽく持てるTupleがすごく便利。
・Javaでは面倒な複数の戻り値を持つ、ということが簡単にできる。
・純粋な関数型の関数には副作用がない。(多分)
・純粋な関数型→値を渡したら値を返すだけの関数であり、
プログラムの状態を変化させず、また状態の影響を受けない。
・副作用→プログラムの状態を変えること、とか。(多分)
・関数の戻り値がUnit(Javaでのvoid)だと副作用ある可能性大だよ!
・副作用がない→入出力が正常値であることを確認すればその関数が常に正しいことを保証できる→テストの信頼性が上がる。これが関数型言語で書くとバグが少ない、って言われる所以なのかしら・・・?
第4章 ~クラスとオブジェクト~
・Scalaではデフォルトのアクセス修飾子はpublicである
・文末のセミコロンはいらない
・Static修飾子は存在しない。その代りシングルトンオブジェクトを持っている
・記載方法はJavaでのclassキーワードの代わりにobjectキーワードを入れ使う。
class hogehoge{ ・・・} → object hogehoge{ ・・・}
第5章 ~基本型と演算子~
・Scalaにはプリミティブ型が存在しない。
・基本はJavaと同じ
・「”””」で文字列囲むとその中はエスケープ文字を無視してすべて文字列と判断
・リッチラッパーが存在する。ちょっと面白そうと思った奴だけ抜粋。
実現方法も面白いらしい。
・0 max 5 → 5を返す
・4 to 6 → Range(4,5,6)を返す