昨年度の秋口に2回ほど参加して以降長らく都合を合わせられなかった名古屋Scala勉強会ですが、今年度最初となる第17回勉強会に参加できました。
コップ本を買ってからはずいぶん長いというのに、なぜか未だに超初心者という…。
コップ本を買ってからはずいぶん長いというのに、なぜか未だに超初心者という…。
というわけで、簡単な参加記録を。
ついていけなかった話がかなりあったので、そういうところは適当にごまかして書くことにします(ツッコミいただくと泣いて喜びます)。
勉強会について
開催日時: 2011年4月15日
イベントページ: 名古屋Scala勉強会#17 – PARTAKE
名古屋Scala勉強会グループ: 名古屋Scala勉強会 | Google グループ
今回の勉強会のテーマ
- 今回からは、いわゆるGoFのデザインパターンをScalaで書くというテーマ
- 教科書として、増補改訂版Java言語で学ぶデザインパターン入門
-
今回の範囲は
- Iterator
- Adaptor
- Template Method
- Factory Method
- Singleton
自己紹介
- 今回は初めて来られる方が多かった
- というか今回は参加者自体が多かった模様
-
新社会人の方も多かった
- 学生は自分だけだったみたい
-
自分の自己紹介:「豊橋クラスタの生き残りです」
- 真意はあえて黙っておく
-
@yoshihiro503さんが東京に行ったときのこと
- あちらの人「名古屋だから関数型ですよね?」
- (゜Д゜)oh…
-
@bleisさんがMicrosoft MVP受賞
- 巻き起こるスタンディングオベーション!
Iteratorパターンについて
- サンプルは、名古屋Scala練習場にて。
-
内部イテレータ
- コレクションのオブジェクト自身が内部に列挙メカニズムを持つ
- ドロドロのループを書かんでいい
-
外部イテレータ
- 要素を参照するための別のオブジェクトを用意
- STLのイテレータ
- Scala的には、どうよ
-
そもそもScalaではコレクションに対する処理としてのforは書かないしbreak的なものも使わない
- mapだったりfilterだったりreduceだったり
- カーソルとイテレータの違いは?
-
scalaでいうtraitはいわゆるインタフェース
- でも状態をもつこともできる
- こんな書き方できる
for{ i <- 1 to 9 j <- 1 to 9 } yield i * j
-
scalaでのコレクションの話
- seq
- foreach→iterable
- yieldしたい→flatMap
- foldとreduceの違いがわからない(違うもの?)
-
長い方に合わせるzip
- 足りない側をOptionにしてくれれば
- なるほど
- と、ここまでで勉強会の時間が終わってしまいました
懇親会
- ほとんどの方が参加
- ついにSCMにまで宗教戦争勃発か(git vs hg)
-
えーデバッグ!?デバッグが許されるのは(ry
-
バグはテストで抑えるもんでしょ
- えーテスト!?テストが許されるのは(ry
- 証明すればいいじゃん!!
- 名古屋こわい
- テストっていう外延的アプローチに対する証明っていう内包的アプローチの良さはすごく理解できる
-
バグはテストで抑えるもんでしょ
-
動的言語の間の論争?
- perl、python、ruby、groovy
- すみません調子乗りました
-
Scala道場
- 豊田市の方で少人数で開催
-
名古屋Scalaと合同で何かできたら
- 道場破りとか言うのはやめましょう
- ハンズオン、さらにはHack-a-thon形式で実践的な勉強会をしたい
- 名古屋で開催なら飛んでいきます
-
女の人とペアプロ
- みんながtwitterで囃し立ててる影で死にそうなぐるぐるの人がいたようです…
- 他にいろいろ面白い話があったんですが覚えてない…
次回以降について
-
さすがに1ヶ月に1章ペースはヤバいw
- GoF23パターンだから2年ww
- 1回に2つはやっていきましょう
- コードは名古屋Scala練習場に
- 掲示板(練習場やPARTAKEなど)も活用して
-
その他
-
@bleisさん主催のBoost.勉強会 #5 名古屋が5/14に開催されます
- 来てね!
-
@mzpさん主催のActionScriptを使わないFlash勉強会 #1が4/13に開催されます
- 来てね!
-
@bleisさん主催のBoost.勉強会 #5 名古屋が5/14に開催されます
個人的な感想
-
名古屋Scala勉強会自体は3回目の参加だけど、回を追うごとについてける度が増してるかな
- それでも、かなり、追いつけてない…
-
というかまず、ちゃんと自学しましょう。
- さーせん。。
- 写経しましょう
-
名古屋=関数型のイメージが相当に強いらしい
- よく訓練された豊橋クラスタは名古屋クラスタと見分けがつかない
- ∴自分は訓練不足である
> foldとreduceの違いがわからない
foldは初期値を与えますけど、reduceは対象の先頭要素を初期値に使います。
なので、reduceは空だと例外投げるので、戻り値をOptionにしたreduceLeftOptionとかあります。
あとfoldは戻り値の型を対象要素の型にしないことも可能ですけど、reduceでは不可能、という違いもあります。
ただまぁこれらはあくまで*Scalaの場合は*ですけど。
言語によって違いすぎててあばばばば。
> yieldしたい→flatMap
正確にはyieldしたい場合はmapで、flatMapはネストしたい場合に必要になります。
例えば、for (i 足りない側をOptionにしてくれれば
これも正確には足りない側をNoneに、ですね。
シグネチャ的には、(Seq[T], Seq[U]) => Seq[(Option[T], Option[U])] とかそんな。