Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

ノスタルジック

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

mButton.setOnClickListener((View v) -> { // 此処で何か処理を致す }); レトロラムダを使った アンドロイドジャバ

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

ジャバ捌の機能の御浚い 一 ラムダ式 一 メソッド参照 一 実質的ファイナル 一 ジェネリクスの改�善 一 便利なコレクション操作 一 ストリイム処理 一 エヌアイオゝ 一 オプショナル 一 タイプアノテーション 一 日付処理の改�善 一 デフォルト実装 一 関数型インタフェース 一 ファンクションクラス

Slide 11

Slide 11 text

メソッド参照 ダブルコロンオペレエタアを使って、メソッドを 関数オブジェクトとして参照する機能。 次の式は等価である。 ! 一 ss -->> SSttrriinngg..vvaalluueeOOff((ss)) 一 SSttrriinngg::::vvaalluueeOOff

Slide 12

Slide 12 text

実質的ファイナル 書き換えられていない変数はファイナルと見なされる。 ! ppuubblliicc vvooiidd ffoooo((iinntt aa)) {{ nneeww RRuunnnnaabbllee(()){{ @@OOvveerrrriiddee ppuubblliicc vvooiidd rruunn(()) {{ //// 此処でファイナルなしでaaを参照可能 }} }}..rruunn(());; }}

Slide 13

Slide 13 text

ジェネリクスの改�善 型パラメエタの省略できる箇所が増えた。 ! 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(())));;

Slide 14

Slide 14 text

Slide 15

Slide 15 text

そしてレトロラムダでサポオト しているのは此処まで。

Slide 16

Slide 16 text

ジャバ捌の機能の御浚い 一 ラムダ式 一 メソッド参照 一 実質的ファイナル 一 ジェネリクスの改�善 一 便利なコレクション操作 一 ストリイム処理 一 エヌアイオゝ 一 オプショナル 一 タイプアノテーション 一 日付処理の改�善 一 デフォルト実装 一 関数型インタフェース 一 ファンクションクラス

Slide 17

Slide 17 text

しくみ

Slide 18

Slide 18 text

ジャバの バイトコオドエンジニアリング 一 aassppeeccttjj ((hhuuggoo,, GGAAlleettttee)) 一 jjaavvaaaassssiisstt ((aannddrrooiidd--ppoowweerr--aasssseerrtt--pplluuggiinn)) 一 AASSMM ((GGrroooovvyy,, PPMMDD)) //// LLaammbbddaaSSaavviinnggCCllaassssFFiilleeTTrraannssffoorrmmeerr..jjaavvaa bbyyttee[[]] bbaacckkppoorrtteeddBByytteeccooddee == LLaammbbddaaCCllaassssBBaacckkppoorrtteerr..ttrraannssffoorrmm(( ccllaassssffiilleeBBuuffffeerr,, ttaarrggeettVVeerrssiioonn));;

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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(())));; }} }}));; 例えば関数型インタフェースを多用 するようなライブラリを使う時

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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