あなたのメンタルモデルあってますか? 矢野

23
あなたの メンタルモデル あってますか? 新しいAPIを使っていて、 そもそも理解の仕方が間違ってることに 気がついた失敗談 矢野 勉 2014/6/5 Uzabase Tech Talk この画像は公開不可

Upload: chome03

Post on 29-Jul-2015

1.406 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: あなたのメンタルモデルあってますか?  矢野

あなたの メンタルモデル あってますか?

新しいAPIを使っていて、 そもそも理解の仕方が間違ってることに

気がついた失敗談

矢野 勉 2014/6/5 Uzabase Tech Talk

この画像は公開不可

Page 2: あなたのメンタルモデルあってますか?  矢野

提供

Page 3: あなたのメンタルモデルあってますか?  矢野

京都在住

Who?矢野 勉名前:

どこ:

なに: 株式会社シェルフという小さい会社を やってます最近 shelfmap.com というサイトを つくりました。主にClojure。

Page 4: あなたのメンタルモデルあってますか?  矢野

今日は

Page 5: あなたのメンタルモデルあってますか?  矢野

今日は

Page 6: あなたのメンタルモデルあってますか?  矢野

今日は

こいつの 話をします

Page 7: あなたのメンタルモデルあってますか?  矢野

新しいものは 試したい

Page 8: あなたのメンタルモデルあってますか?  矢野

Stream APIJavaへのラムダ式導入

さっさと移行するように 説得したいので

まずは自分が試してみた

Page 9: あなたのメンタルモデルあってますか?  矢野

いくつかの関数のうち、 戻り値が条件に マッチしたら、

その最初の戻り値を返す

課題

Page 10: あなたのメンタルモデルあってますか?  矢野

func1(arg) -> “ONE”!func2(arg) -> “TWO”!func3(arg) -> “THREE”

定義

Page 11: あなたのメンタルモデルあってますか?  矢野

(みんな大好き)

Clojureでは…

(some (fn [f] ! (when-let [r (f)]! (= \T (first r))! [#(func1 arg)! #(func2 arg)! #(func3 arg)])

-> “TWO”

Page 12: あなたのメンタルモデルあってますか?  矢野

Stream APIだと?

someにあたるメソッドがない

関数を適用して、最初に真となった要素そのものを返す処理

Page 13: あなたのメンタルモデルあってますか?  矢野

map/filter 使うしか?List<Supplier<String>> list = ! Arrays.asList(()->func1(arg), ! ()->func2(arg), ! ()->func3(arg));!list.stream()! .map(f -> f.get())! .filter(v -> v.charAt(0) == ’T')! .findFirst();

-> Optional(“TWO”)

Page 14: あなたのメンタルモデルあってますか?  矢野

これでいいの?

3つのfuncがmap()で 全て評価されてしまうような…

Page 15: あなたのメンタルモデルあってますか?  矢野

これでいいの?

3つのfuncがmap()で 全て評価されてしまうような…

されません!

Page 16: あなたのメンタルモデルあってますか?  矢野

なぜそう思ってしまったか想定してた

メンタルモデル(認識の形)が 間違っていた

Page 17: あなたのメンタルモデルあってますか?  矢野

なぜそう思ってしまったか想定してた

メンタルモデル(認識の形)が 間違っていた

根底が間違ってるのでそのあと 全部間違う

Page 18: あなたのメンタルモデルあってますか?  矢野

findFirst()

当初のモデル

func1 func2 func3

結果1 結果2 結果3

結果2

結果2

map()

filter()

Page 19: あなたのメンタルモデルあってますか?  矢野

だって数学だとこうだし…

mapping(写像)

Page 20: あなたのメンタルモデルあってますか?  矢野

実際のモデル

func1

func2 func3

findFirst()

map()

filter()

結果1

Page 21: あなたのメンタルモデルあってますか?  矢野

実際のモデル

func1

func2 func3

findFirst()

map()

filter()

結果1全体がイテレータになっていて 評価は必要な回数だけ行われる

Page 22: あなたのメンタルモデルあってますか?  矢野

詳しくは

java.util.Spliterator インタフェース

Page 23: あなたのメンタルモデルあってますか?  矢野

まとめ

メンタルモデル大事