半空洞男女関係

思ったこととかプログラミングしてるときのメモとか色々かいてます。メールはidそのままgmail

Scala ハンズオン Day1

興味が出たので試験勉強の息抜きにやってる。

github.com

省略

まず、Scalaでは全ての値はオブジェクトです。そのため、1に対してメソッド呼び出しができます。1.+(2)というように+メソッドを呼び出しています。

そして、Scalaではメソッド呼び出しの.を省略できます。1 + (2)になります。

さらに、単一の引数をとるメソッドの()が省略できます。1 + 2になります。これでメソッド呼び出しを演算子のように扱うことができました。

へえ、と思って

scala> "abc" length

ってやったら普通に動いた。おもしろい

valで変数宣言をするときに型を明示しておくと、変数が予想外にAnyになってしまうことを防ぐことができます。こうしておくと、sを使うときではなくsに値を代入するときにエラーを発生させることができるので、よりエラーの原因を特定しやすくなります。デバッグ時などに型を明示的に指定することで予想と異なる型になってしまっている箇所を探したりできます。

便利すね。

yield

for文やってて、printlnしながらyieldしてみようと思って、

scala> for (s <- List("Apple", "Banana")) {
     |   println(s)
     |   yield s+"!"
     |}

書いてみたけど怒られた。{} に意味があるのだろうなあ。と思って呟いたら

ありがとうございます。

関数定義

def twice(x: Int): Int = x * 2

二倍にして返す関数。Intに代入してるように見えるけど、

def twice(x: Int):Int = {x * 2}

という感じで、関数を代入している感じである。valみたいな感じで捉えれば良いですね。

Unit

副作用のある関数は副作用があると明示的に示すためにUnitを返す。これを関数定義でやるときは、戻り値を書かなければ良い。関数の中でUnitの返す関数を実行すると汚染みたいなことが起きてUnitになってしまうと便利だなと思ったけどそんなことはなかった。

練習問題

特につまる所はなかった

感想

おもしろい。書きやすいと思う。