SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
Java初心者が
Java8のラムダ式をやってみた
2015.11.15 Java女子部 Java8自由研究
@aya_122 えばた あや
えばた あや
Twitter: @aya_122
お仕事: Groovy(フレームワークはGrails)、javascript
Java歴: 学校の授業でちょっとやったのと、
仕事の研修でちょっとやったくらいの初心者
好きな食べ物: ラーメン
苦手な事: 人前で発表すること←
自己紹介(´ω` )
登壇するのはじめてで緊張…((((;゜Д゜)))
Java初心者な自分がラムダ式をやってみて
学んだ事について話します!
目次
1. ラムダ式の概要
2. ラムダ式の書き方
3. おわりに
1. ラムダ式の概要
何故ラムダ式?
始める前: Java8なにそれ
 → Java8って何があるの?
 → ふむふむ…
 → あ!これ、javascriptとかで似たの見た事ある!!
 → ………クロージャか!!!!!!!
  (実際違うとも言われるけど←)
ってなわけで、
一番身近に感じたのでラムダ式を選びました(^ω^)
選んだ理由
とか(^ω^)
Java8で導入された新たな表記法
・Java8で導入された新機能と組み合わせて使うのに最適
・関数型インターフェース
・特に、Stream API
ラムダ式とは
Java8で導入された新たな表記法
・Java8で導入された新機能と組み合わせて使うのに最適
・関数型インターフェース
・特に、Stream API
ラムダ式とは
記述の簡素化
2. ラムダ式の書き方
書き方
ラムダ式の基本的な書き方として、
( 引数 ) -> { 処理 }
と表します。
引数部分の書き方
引数部分についての書き方の基本形は、
・引数が0個の場合
( ) -> { 処理 }
・引数が1個の場合
( int n ) -> { 処理 }
・引数が2個の場合
( String s, int n ) -> { 処理 }
のように表します。
引数部分の書き方
・引数の型を推論することが出来る場合、
 型を省略することが可能
( int n ) -> { 処理 } ( n ) -> { 処理 }
・引数が1個の場合、カッコを省略することが可能
( n ) -> { 処理 } n -> { 処理 }
省略可能!!
省略
省略
処理部分の書き方
処理部分についての書き方の基本形は、
( 引数 ) -> {
何か処理;
return 戻り値;
}
のように表します。
もちろん、処理部分でも省略が可能です!!
処理部分の書き方
・戻り値がvoid、または処理が1個の場合、
 returnを省略することが可能
( 引数 ) -> {
何か処理;
}
・処理が1個しかない場合、カッコを省略することが可能
( 引数 ) -> 処理
こっちも省略
可能(´ω` )
ラムダ式を書いてみる
実際に、引数部分と処理部分に値を入れて書いてみると、
( String s ) -> {
System.out.println( “string: ” + s );
}
でも…
どうせなら、
さっき説明した省略した書き方
使いたいよね(´∀`)
省略して書いてみる
引数部分で一番簡単な書き方と、
処理部分で一番簡単な書き方を合わせて書くと、
s -> System.out.println(“string: ” + s)
こんなにシンプルに書けます★
(処理が2つ以上の場合は、{ }つける書き方で!)
じゃじゃん!
( `ω´ )
実際に使ってみる
その前に!以前の書き方で書いてみると…
List<String> food = new ArrayList<String>();
food.add("アイス");
food.add("ラーメン");
food.add("もつ鍋");
for ( String s : food ) {
System.out.println(“好きな食べ物: ” + s);
}
<出力結果>
好きな食べ物: アイス
好きな食べ物: ラーメン
好きな食べ物: もつ鍋
Listの値を
1つずつ出力
実際に使ってみる
ラムダ式を使うと!!
List<String> food = new ArrayList<String>();
food.add("アイス");
food.add("ラーメン");
food.add("もつ鍋");
food.forEach(s -> System.out.println("好きな食べ物: " + s));
Java8な
書き方(‾∀‾ )
<出力結果>
好きな食べ物: アイス
好きな食べ物: ラーメン
好きな食べ物: もつ鍋
注意点
int n = 1;
Runnable runner = () -> {
n++;
};
runner.run();
ちなみに、このように書くと…
注意点
int n = 1;
Runnable runner = () -> {
n++;
};
runner.run();
コンパイル
エラー
ラムダ式の外側で定義された変数に、
ラムダ式の内側から値を代入すると
コンパイルエラー
3. おわりに
感想
・つい最近までJavaが8になってたなんて知らなかった
 けど、これを機会にJava8について知ることができた
・ラムダ式は他のJava8の機能と相性が良いので、他の
 Java8の機能といろいろ組み合わせてもっともっと使って
 みたくなった
ありがとうございました(^ω^)
と、見せかけて。
時間が余ったので、
問題だします!!!!!
問題
この中でコンパイルエラーにならないものはどれでしょう?
1. Object object = () -> System.out.println("abc");
2. int n = 1;
 Runnable runner = () -> System.out.println(n);
 n++;
 runner.run();
選択肢、続く…
問題
続き…
3. List<String> list = new ArrayList<>();
 list.add("a");
 list.add("b");
 list.forEach(_ -> System.out.println(_));
4. Runnable runner = () -> System.out.println(this);
 runner.run();
答え
答え
正解は、
4. Runnable runner = () -> System.out.println(this);
 runner.run();
です!
Runnable runner = () -> System.out.println(toString());
runner.run();
と同じ出力結果が得られる
解説
1. Object object = () -> System.out.println("abc");
ラムダ式がどの関数型インターフェースのものなのか
分からない為、コンパイルエラー
Object object = (Runnable)() -> System.out.println("abc");
こう書くことでエラーから抜け出せます。
解説
2. int n = 1;
 Runnable runner = () -> System.out.println(n);
 n++;
 runner.run();
変数に再代入する場所がラムダ式の外でもコンパイルエラー
解説
3. List<String> list = new ArrayList<>();
 list.add("a");
 list.add("b");
 list.forEach(_ -> System.out.println(_));
ラムダ式の引数名には、アンダーバーのみのものが使えない
ため、コンパイルエラー
→ 文字列等を使うこと
今度こそ、
ありがとうございました(^ω^)

Contenu connexe

Tendances

JavaScriptで味わう! 関数型プログラミングのメリット!!
JavaScriptで味わう! 関数型プログラミングのメリット!!JavaScriptで味わう! 関数型プログラミングのメリット!!
JavaScriptで味わう! 関数型プログラミングのメリット!!Keigo Magami
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーションyy yank
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN LinkingKouji Matsui
 
モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤karupanerura
 
Java script関数コールの追跡
Java script関数コールの追跡Java script関数コールの追跡
Java script関数コールの追跡Keiichi Kobayashi
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについてShinobu Okano
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラスKoichiro Ohba
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介Yusuke Hirao
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西Shinichi Kozake
 
JavaScript MVC入門
JavaScript MVC入門JavaScript MVC入門
JavaScript MVC入門大樹 小倉
 
「プログラミングGroovy」入門(公開用)
「プログラミングGroovy」入門(公開用)「プログラミングGroovy」入門(公開用)
「プログラミングGroovy」入門(公開用)orange clover
 
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]Yuuki Takezawa
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行Yoshitaka Kawashima
 
クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについてSuguru ARAKAWA
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話terurou
 
LaravelとMVCの先へ
LaravelとMVCの先へLaravelとMVCの先へ
LaravelとMVCの先へYuuki Takezawa
 
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例sohta
 

Tendances (20)

JavaScriptで味わう! 関数型プログラミングのメリット!!
JavaScriptで味わう! 関数型プログラミングのメリット!!JavaScriptで味わう! 関数型プログラミングのメリット!!
JavaScriptで味わう! 関数型プログラミングのメリット!!
 
簡単!Groovy入門
簡単!Groovy入門簡単!Groovy入門
簡単!Groovy入門
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN Linking
 
モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤モジュール開発におけるぼくの試行錯誤
モジュール開発におけるぼくの試行錯誤
 
Java script関数コールの追跡
Java script関数コールの追跡Java script関数コールの追跡
Java script関数コールの追跡
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
 
JavaScript MVC入門
JavaScript MVC入門JavaScript MVC入門
JavaScript MVC入門
 
「プログラミングGroovy」入門(公開用)
「プログラミングGroovy」入門(公開用)「プログラミングGroovy」入門(公開用)
「プログラミングGroovy」入門(公開用)
 
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
 
クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについて
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話
 
LaravelとMVCの先へ
LaravelとMVCの先へLaravelとMVCの先へ
LaravelとMVCの先へ
 
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
 

Plus de Aya Ebata

GraalVMに入門してみた
GraalVMに入門してみたGraalVMに入門してみた
GraalVMに入門してみたAya Ebata
 
Java女子部 コミュニティ紹介 ロングバージョン
Java女子部 コミュニティ紹介 ロングバージョンJava女子部 コミュニティ紹介 ロングバージョン
Java女子部 コミュニティ紹介 ロングバージョンAya Ebata
 
JSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてJSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてAya Ebata
 
E2D3ハンズオン
E2D3ハンズオンE2D3ハンズオン
E2D3ハンズオンAya Ebata
 
「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜
「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜
「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜Aya Ebata
 
Swiftをやってみた!
Swiftをやってみた!Swiftをやってみた!
Swiftをやってみた!Aya Ebata
 
Javaの好きなところ
Javaの好きなところJavaの好きなところ
Javaの好きなところAya Ebata
 
Androidに入門してみた( 'ω'-)
Androidに入門してみた( 'ω'-)Androidに入門してみた( 'ω'-)
Androidに入門してみた( 'ω'-)Aya Ebata
 

Plus de Aya Ebata (8)

GraalVMに入門してみた
GraalVMに入門してみたGraalVMに入門してみた
GraalVMに入門してみた
 
Java女子部 コミュニティ紹介 ロングバージョン
Java女子部 コミュニティ紹介 ロングバージョンJava女子部 コミュニティ紹介 ロングバージョン
Java女子部 コミュニティ紹介 ロングバージョン
 
JSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてJSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方について
 
E2D3ハンズオン
E2D3ハンズオンE2D3ハンズオン
E2D3ハンズオン
 
「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜
「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜
「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜
 
Swiftをやってみた!
Swiftをやってみた!Swiftをやってみた!
Swiftをやってみた!
 
Javaの好きなところ
Javaの好きなところJavaの好きなところ
Javaの好きなところ
 
Androidに入門してみた( 'ω'-)
Androidに入門してみた( 'ω'-)Androidに入門してみた( 'ω'-)
Androidに入門してみた( 'ω'-)
 

Java初心者がJava8のラムダ式をやってみた