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

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

666ef10ec14e5a23d0fcf05bd2665575?s=128

rejasupotaro

May 15, 2014
Tweet

Transcript

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

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

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

  4. None
  5. ノスタルジック

  6. レトロラムダは数あるツウルの中でも かなりモダンな部類です。

  7. // エスデイケエで定義されています interface OnClickListener { public void onClick(View v); }

    ! // 貴方のコード mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 此処で何らかの処理を致す } }); 伝統的な アンドロイドジャバ
  8. mButton.setOnClickListener((View v) -> { // 此処で何か処理を致す }); レトロラムダを使った アンドロイドジャバ

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

  10. ジャバ捌の機能の御浚い 一 ラムダ式 一 メソッド参照 一 実質的ファイナル 一 ジェネリクスの改�善 一

    便利なコレクション操作 一 ストリイム処理 一 エヌアイオゝ 一 オプショナル 一 タイプアノテーション 一 日付処理の改�善 一 デフォルト実装 一 関数型インタフェース 一 ファンクションクラス
  11. メソッド参照 ダブルコロンオペレエタアを使って、メソッドを 関数オブジェクトとして参照する機能。 次の式は等価である。 ! 一 ss -->> SSttrriinngg..vvaalluueeOOff((ss)) 一

    SSttrriinngg::::vvaalluueeOOff
  12. 実質的ファイナル 書き換えられていない変数はファイナルと見なされる。 ! ppuubblliicc vvooiidd ffoooo((iinntt aa)) {{ nneeww RRuunnnnaabbllee(()){{

    @@OOvveerrrriiddee ppuubblliicc vvooiidd rruunn(()) {{ //// 此処でファイナルなしでaaを参照可能 }} }}..rruunn(());; }}
  13. ジェネリクスの改�善 型パラメエタの省略できる箇所が増えた。 ! MMaapp<<SSttrriinngg,, LLiisstt<<SSttrriinngg>>>> mmaapp == nneeww HHaasshhMMaapp<<>>(());; mmaapp..ppuutt((""kkeeyy"",,

    nneeww AArrrraayyLLiisstt<<>>(())));; //// ジャバ䕳ではコンパイルエラア ! //// ジャバ䕳の場合 LLiisstt<<LLiisstt<<SSttrriinngg>>>> lliisstt == nneeww AArrrraayyLLiisstt<<>>(());; lliisstt..aadddd((CCoolllleeccttiioonnss..<<SSttrriinngg>>eemmppttyyLLiisstt(())));; ! //// ジャバ捌の場合 LLiisstt<<LLiisstt<<SSttrriinngg>>>> lliisstt == nneeww AArrrraayyLLiisstt<<>>(());; lliisstt..aadddd((CCoolllleeccttiioonnss..eemmppttyyLLiisstt(())));;
  14. そしてレトロラムダでサポオト しているのは此処まで。

  15. ジャバ捌の機能の御浚い 一 ラムダ式 一 メソッド参照 一 実質的ファイナル 一 ジェネリクスの改�善 一

    便利なコレクション操作 一 ストリイム処理 一 エヌアイオゝ 一 オプショナル 一 タイプアノテーション 一 日付処理の改�善 一 デフォルト実装 一 関数型インタフェース 一 ファンクションクラス
  16. しくみ

  17. ジャバの バイトコオドエンジニアリング 一 aassppeeccttjj ((hhuuggoo,, GGAAlleettttee)) 一 jjaavvaaaassssiisstt ((aannddrrooiidd--ppoowweerr--aasssseerrtt--pplluuggiinn)) 一

    AASSMM ((GGrroooovvyy,, PPMMDD)) //// LLaammbbddaaSSaavviinnggCCllaassssFFiilleeTTrraannssffoorrmmeerr..jjaavvaa bbyyttee[[]] bbaacckkppoorrtteeddBByytteeccooddee == LLaammbbddaaCCllaassssBBaacckkppoorrtteerr..ttrraannssffoorrmm(( ccllaassssffiilleeBBuuffffeerr,, ttaarrggeettVVeerrssiioonn));;
  18. どのような場面で使うと有効か?

  19. 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(())));; }} }}));; 例えば関数型インタフェースを多用 するようなライブラリを使う時
  20. 導入�なさいますか? ご静聴有難う御座いました。

  21. 参考リンク ! hhttttppss::////ggiitthhuubb..ccoomm//oorrffjjaacckkaall//rreettrroollaammbbddaa hhttttpp::////nneewwss..mmyynnaavvii..jjpp//ssppeecciiaall//22001144//jjaavvaa88 hhttttpp::////dd..hhaatteennaa..nnee..jjpp//nnoowwookkaayy// ご静聴有難う御座いました。