scala女子(仮)になれるのか、辛い、(3日目)
やったこと
- ケースクラス
- for式
- 練習問題(wordcountとか)
ようやくコードが読めるようになってきた気がします。
def メソッド名 (引数名: 引数の型) :出力の型 = {}
という形になれてきたのかな。
今思うと簡単だけど、
この形が頭に入るまではなんか難しく感じてしまって
呪文に見えたなぁ。
Optionっていうコレクションがある
あるmapの中の要素を取り出すとき、中身がなかったーーーーー!(エラー)となるのが一番よくない、ということで、あるかどうかわからないときはgetメソッドを使う。
例えば
val p = map.get("キー名")
とすると、pがオプションになる。
値があるときはsome、ないときはnoneで返ってくる。
んーなんとも不思議な概念。
これが現場ではとても役に立つのだろう。
重複をさせないケースクラス
なんか、classの前にcaseをつけると、
newいらない!valいらない!copy使える!となるそう。
インスタンス?が重複しないそう。
for式がrubyよりかなりすっきりする
for( i <- 0 to 10 ) println(n)
FizzBuzzで数字の羅列さえ表示できなかったころが懐かしい。
for { i <- 0 to 10 j <- 11 to 20 if i % 2 == 0 } println(s"$i, $j")
条件がたくさんあっても1つのforでかけちゃう。
rubyと違って全然ネストしなくてすっきり見えます。
word count問題
rubyだったらすぐかけるのに、、、(もうこれ言うのやめる)
まったくわからず撃沈しました。
これはあとで単独で記事にしよう〜!
でもわたしは思い出しました、rubyを勉強してるときも最初は自分で思いついたりしなかったことを。
どんどん正解を見て自分で書いてみて引き出しを作った方が全然早い。
これは数学を勉強してるときとすごく似てます。
例えば数学の問題が自分で解けないと「あぁわたし才能ないんだ、天才はこんなのすぐに思い付くだろうに」と思ってがーんってなるタイプでした。
だからなるべく解答は見ないし、変に頑固でした。
だけど受験生になってどれだけ効率的に点数を伸ばすかってなったら、
引き出しの数でした。
そしてそれをどれだけ多くの問題に応用できるか。
そのために一般化をするのがわたしのくせになりました。
関数的に言うと、1個しかいれてないのに100個出力される関数を目指してたみたいな。
嗚呼頭がscalaになってきたころかなぁ(ちがう)
だから、今は立ち止まらずにどんどん正解を吸収しちゃうぞ。