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

    ! // 貴方のコード mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 此処で何らかの処理を致す } }); 伝統的な アンドロイドジャバ
  2. ジャバ捌の機能の御浚い 一 ラムダ式 一 メソッド参照 一 実質的ファイナル 一 ジェネリクスの改�善 一

    便利なコレクション操作 一 ストリイム処理 一 エヌアイオゝ 一 オプショナル 一 タイプアノテーション 一 日付処理の改�善 一 デフォルト実装 一 関数型インタフェース 一 ファンクションクラス
  3. 実質的ファイナル 書き換えられていない変数はファイナルと見なされる。 ! ppuubblliicc vvooiidd ffoooo((iinntt aa)) {{ nneeww RRuunnnnaabbllee(()){{

    @@OOvveerrrriiddee ppuubblliicc vvooiidd rruunn(()) {{ //// 此処でファイナルなしでaaを参照可能 }} }}..rruunn(());; }}
  4. ジェネリクスの改�善 型パラメエタの省略できる箇所が増えた。 ! 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(())));;
  5. ジャバ捌の機能の御浚い 一 ラムダ式 一 メソッド参照 一 実質的ファイナル 一 ジェネリクスの改�善 一

    便利なコレクション操作 一 ストリイム処理 一 エヌアイオゝ 一 オプショナル 一 タイプアノテーション 一 日付処理の改�善 一 デフォルト実装 一 関数型インタフェース 一 ファンクションクラス
  6. ジャバの バイトコオドエンジニアリング 一 aassppeeccttjj ((hhuuggoo,, GGAAlleettttee)) 一 jjaavvaaaassssiisstt ((aannddrrooiidd--ppoowweerr--aasssseerrtt--pplluuggiinn)) 一

    AASSMM ((GGrroooovvyy,, PPMMDD)) //// LLaammbbddaaSSaavviinnggCCllaassssFFiilleeTTrraannssffoorrmmeerr..jjaavvaa bbyyttee[[]] bbaacckkppoorrtteeddBByytteeccooddee == LLaammbbddaaCCllaassssBBaacckkppoorrtteerr..ttrraannssffoorrmm(( ccllaassssffiilleeBBuuffffeerr,, ttaarrggeettVVeerrssiioonn));;
  7. 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(())));; }} }}));; 例えば関数型インタフェースを多用 するようなライブラリを使う時