Upgrade to Pro — share decks privately, control downloads, hide ads and more …

レトロラムダはどれ程モダンか

 レトロラムダはどれ程モダンか

rejasupotaro

May 15, 2014
Tweet

More Decks by rejasupotaro

Other Decks in Technology

Transcript

  1. レトロラムダはどれ程モダンか
    @@レジャスポ太郎

    View Slide

  2. レトロラムダを御存知ですか?

    View Slide

  3. ジャバのバックポオティングツウルです。

    View Slide

  4. View Slide

  5. ノスタルジック

    View Slide

  6. レトロラムダは数あるツウルの中でも


    かなりモダンな部類です。

    View Slide

  7. // エスデイケエで定義されています
    interface OnClickListener {
    public void onClick(View v);
    }
    !
    // 貴方のコード
    mButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    // 此処で何らかの処理を致す
    }
    });
    伝統的な


    アンドロイドジャバ

    View Slide

  8. mButton.setOnClickListener((View v) -> {
    // 此処で何か処理を致す
    });
    レトロラムダを使った


    アンドロイドジャバ

    View Slide

  9. 使えるのはラムダだけなのですか?

    View Slide

  10. ジャバ捌の機能の御浚い
    一 ラムダ式


    一 メソッド参照


    一 実質的ファイナル


    一 ジェネリクスの改�善


    一 便利なコレクション操作


    一 ストリイム処理


    一 エヌアイオゝ


    一 オプショナル


    一 タイプアノテーション


    一 日付処理の改�善


    一 デフォルト実装


    一 関数型インタフェース


    一 ファンクションクラス

    View Slide

  11. メソッド参照
    ダブルコロンオペレエタアを使って、メソッドを
    関数オブジェクトとして参照する機能。


    次の式は等価である。


    !
    一 ss -->> SSttrriinngg..vvaalluueeOOff((ss))


    一 SSttrriinngg::::vvaalluueeOOff

    View Slide

  12. 実質的ファイナル
    書き換えられていない変数はファイナルと見なされる。


    !
    ppuubblliicc vvooiidd ffoooo((iinntt aa)) {{


    nneeww RRuunnnnaabbllee(()){{


    @@OOvveerrrriiddee


    ppuubblliicc vvooiidd rruunn(()) {{


    //// 此処でファイナルなしでaaを参照可能


    }}


    }}..rruunn(());;


    }}

    View Slide

  13. ジェネリクスの改�善
    型パラメエタの省略できる箇所が増えた。


    !
    MMaapp<>>> mmaapp == nneeww HHaasshhMMaapp<<>>(());;


    mmaapp..ppuutt((""kkeeyy"",, nneeww AArrrraayyLLiisstt<<>>(())));; //// ジャバ䕳ではコンパイルエラア


    !
    //// ジャバ䕳の場合


    LLiisstt<>>> lliisstt == nneeww AArrrraayyLLiisstt<<>>(());;


    lliisstt..aadddd((CCoolllleeccttiioonnss..<>eemmppttyyLLiisstt(())));;


    !
    //// ジャバ捌の場合


    LLiisstt<>>> lliisstt == nneeww AArrrraayyLLiisstt<<>>(());;


    lliisstt..aadddd((CCoolllleeccttiioonnss..eemmppttyyLLiisstt(())));;

    View Slide


  14. View Slide

  15. そしてレトロラムダでサポオト


    しているのは此処まで。

    View Slide

  16. ジャバ捌の機能の御浚い
    一 ラムダ式


    一 メソッド参照


    一 実質的ファイナル


    一 ジェネリクスの改�善


    一 便利なコレクション操作


    一 ストリイム処理


    一 エヌアイオゝ


    一 オプショナル


    一 タイプアノテーション


    一 日付処理の改�善


    一 デフォルト実装


    一 関数型インタフェース


    一 ファンクションクラス

    View Slide

  17. しくみ

    View Slide

  18. ジャバの


    バイトコオドエンジニアリング
    一 aassppeeccttjj ((hhuuggoo,, GGAAlleettttee))


    一 jjaavvaaaassssiisstt ((aannddrrooiidd--ppoowweerr--aasssseerrtt--pplluuggiinn))


    一 AASSMM ((GGrroooovvyy,, PPMMDD))
    //// LLaammbbddaaSSaavviinnggCCllaassssFFiilleeTTrraannssffoorrmmeerr..jjaavvaa


    bbyyttee[[]] bbaacckkppoorrtteeddBByytteeccooddee == LLaammbbddaaCCllaassssBBaacckkppoorrtteerr..ttrraannssffoorrmm((


    ccllaassssffiilleeBBuuffffeerr,,


    ttaarrggeettVVeerrssiioonn));;

    View Slide

  19. どのような場面で使うと有効か?

    View Slide

  20. sseennddMMeessssaaggeeCClliicckk


    ..ffllaattMMaapp((oo -->> OObbsseerrvvaabbllee..ccoommbbiinneeLLaatteesstt((


    pphhoonneeNNuummbbeerrTTeexxtt,,


    mmeessssaaggeeBBooddyyTTeexxtt,,


    MMeessssaaggee::::nneeww))


    ..ttaakkee((11))))


    ..ssuubbssccrriibbee((mmeessssaaggee -->> {{


    iiff ((mmeessssaaggee..ggeettPPhhoonneeNNuummbbeerr(())..ttrriimm(())..eeqquuaallss(("""")))) {{


    pphhoonneeNNuummbbeerrEEddiittTTeexxtt..rreeqquueessttFFooccuuss(());;


    }} eellssee {{


    mmeessssaaggeeBBooddyyEEddiittTTeexxtt..sseettTTeexxtt((""""));;


    mmeessssaaggeeLLiissttAAddaapptteerr..aadddd((mmeessssaaggee..ggeettMMeessssaaggeeBBooddyy(())));;


    }}


    }}));;
    例えば関数型インタフェースを多用
    するようなライブラリを使う時

    View Slide

  21. 導入�なさいますか?
    ご静聴有難う御座いました。

    View Slide

  22. 参考リンク


    !
    hhttttppss::////ggiitthhuubb..ccoomm//oorrffjjaacckkaall//rreettrroollaammbbddaa


    hhttttpp::////nneewwss..mmyynnaavvii..jjpp//ssppeecciiaall//22001144//jjaavvaa88


    hhttttpp::////dd..hhaatteennaa..nnee..jjpp//nnoowwookkaayy//
    ご静聴有難う御座いました。

    View Slide