1: 以下、名無しにかわりましてVIPがお送りします 2014/02/01 23:53:21 ID:nGM0F1P40
今日の講座はjava8講座です
↓java8のダウンロード
https://jdk8.java.net/download.html
さあみんなでjava8関して勉強しましょう
2: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/01 23:54:51 ID:nGM0F1P40
今回の注目はラムダ式です
3: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/01 23:56:38 ID:nGM0F1P40
Consumer<String> strPrint = System.out::println;
みたいなこともできる
※
【クラス名】::【メソッド名】で取得できるみたい。
4: 以下、名無しにかわりましてVIPがお送りします 2014/02/01 23:56:55 ID:FfRLtbFg0
日本語でおk
5: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/01 23:57:39 ID:nGM0F1P40
人が集まらないな第一回のときはけっこう盛り上がったんだけどなー
6: 以下、名無しにかわりましてVIPがお送りします 2014/02/01 23:58:25 ID:uwMKdqKm0
もっかい第一回やれよ
7: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/01 23:59:26 ID:nGM0F1P40
>>6
第一回はリフレクションだよ
まとめられてる
13: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:10:16 ID:i3S/Mdtf0
一回目のリンクちょーだい
15: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:13:02 ID:CHyVpE/10
僕の大好きなIT速報さん
http://blog.livedoor.jp/itsoku/archives/36274348.html
嬉しかった(*・ω・*)ありがとうございます!
8: 忍法帖【Lv=40,xxxPT】(1+0:15) 2014/02/02 00:00:07 ID:0JzcfZVV0
それよりコボル教えてください
9: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:00:43 ID:CHyVpE/10
>>8
COBOLは僕もわからないっす
家に本はあるんだけど・・・
10: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:03:38 ID:CHyVpE/10
UnaryOperator<String> enclose = s -> "[" + s + "]";
enclose.apply("aaaa")
//で
[aaaa]
が返却される
これがラムダ式
18: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:22:55 ID:vajJvBChO
>>10
C#でラムダ式知ったときはヤッホイと思ったものだ
20: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:26:03 ID:m92WN69C0
>>18
delegate構文なんて要らなかったんや……
でも、System.Delegate型の変数に渡す時にラムダだと渡せないけどdelegateだと渡せるとかあったよな
11: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:05:37 ID:nGM0F1P40
やはり2chには早すぎた技術か
19: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:25:51 ID:R+AiZygH0
第2回か、なら俺も参加できるなwww
↓
ラムダ式が~
↓
?????
↓
そっとスレを閉じる
12: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:08:10 ID:3W+Tz+dH0
ラムダ式はどういう時に使えばいいの?
メリットというか使いどころ
14: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:12:30 ID:CHyVpE/10
>>12
うーんそうだなメリットとしては確実にコードが短くなり可読性があがることかな
たとえば
Comparator<Integer> c = new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return a - b;
}
};
これをラムダ式で書くと
Comparator<Integer> c = (a, b) -> a - b;
こうかけたり
29: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:34:56 ID:cxOSnDd00
>>14
これ抽象メソッドが複数ある場合はどう書くの?
32: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:38:16 ID:CHyVpE/10
>>29
いい質問
これはラムダ式の前提条件として抽象メソッドを一つ持つインターフェースにラムダ式を使うことができるから
よって複数のときはラムダ式が適用できない
36: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:45:59 ID:cxOSnDd00
>>32
うわー微妙
超Javaっぽくない
これまでの新文法?は納得出来たけどこれは個人的にはイヤだなぁ
てかJava8ってもう正式リリースされてたんだな
37: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:49:02 ID:CHyVpE/10
>>36
まあかなり限定されてるね。個人的には使える時は使っていこうかと思う
あとjavav8はまだ正式リリースされてないよ
正式リリースは今年の3月予定です
16: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:19:28 ID:CHyVpE/10
java8の真の目的はパラレル処理だとか
parallelStream()
で並列処理可能みたい
17: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:22:19 ID:m92WN69C0
今更Javaにそんな機能入っても可読性を損ねるだけで何もいい事ないだろ
21: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:29:00 ID:CHyVpE/10
>>17
そうかねー個人的には無名クラスを使うよりは可読性あがってる気がするんだけなー
あとは慣れか?
25: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:32:43 ID:dwrBSALPP
可読性というか、javaの場合そもそも関数ポインタの代理になるようなもんが何も無かったような・・・
必ず変わりになるメソッドの実装を保証したinterfaceを継承したインスタンスを突っ込まなきゃいけなかったような
もう遥か昔で忘れちゃったけど
まぁC#も内部的にはクラスのインスタンスなんだっけ?
28: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:34:26 ID:m92WN69C0
最初からそういう構文だったら何も問題はなかった
今更なのが悪いんだ
31: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:35:57 ID:CHyVpE/10
>>28
あーなるほどね確かに今更かわるのは大変だよねー
無名クラスは何だったんだみたいな
34: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:41:32 ID:m92WN69C0
>>31
まあでも、無名クラスは継承とかインターフェースの実装とかできるからな
こればかりはラムダではできない芸当
とりあえず、>>14のラムダ版は非常にキモいと思う
ラムダがcompare()のオーバーライドであるというのはわかるが、
何故他のメソッドでなくcompare()になるのかがラムダ構文からはわからないから
35: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:45:34 ID:CHyVpE/10
>>34
確かにラムダ式じゃ継承とかは難しいな
ラムダ式からじゃ何のメソッドかわかりにくいけどね、
でもとりあえず抽象メソッドが一個の場合に限定されてるからcompare()しかない
ちゃんとjava理解してないやつがラムダ式を使い始めたら大変なことになりそうだな
38: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:52:56 ID:m92WN69C0
>>35
これは絶対に人々が待ち望んでいたラムダ式ではないと断言したいな
39: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 00:54:18 ID:CHyVpE/10
>>38
どんな感じだったらよかったと思う??
41: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 00:58:05 ID:m92WN69C0
>>39
戻り値型と可変長の引数型リストをジェネリックで取る「ラムダ型」みたいなのがあって、
ラムダ式は全てその型になる、とかがよかったんじゃね?
標準ライブラリに全部ラムダを取るオーバーロードを用意しなきゃならないって問題があるが
42: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 01:05:58 ID:CHyVpE/10
>>41
なるほど
そんな型があってもいいかもな
44: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 01:08:35 ID:m92WN69C0
何がキモいって、ラムダ式を起動するためのメソッド名がラムダの型によって全部違う事だよ
Hoge h = (a) -> a;
int x = h(1);
みたいにやれないものか
46: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 01:12:47 ID:CHyVpE/10
>>44
それは俺も若干気になってたところ
ラムダの型多すぎて大変だよな
確かにそんな感じにかけたらいいね
Object<Integer,Integer> h = (a) -> a;
int x = h.apply(1);
とかはどうだろうか
47: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 01:13:51 ID:m92WN69C0
>>46
悪くないな
45: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 01:11:58 ID:dwrBSALPP
Interfaceのメソッド実装に使うんか。気持ち悪いな
Arrays.sort( obj, ( a, b ) => { return a < b; } )
的な使い方はできるの?
48: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 01:16:03 ID:CHyVpE/10
>>45
若干ラムダ式の書き方と返却の部分がおかしいけどそんな感じでできる
49: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 01:16:34 ID:m92WN69C0
>>48のはC#
51: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 01:18:16 ID:CHyVpE/10
>>49
あ、C#なんだwごめん
C#のがラムダ式は先だからな
43: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 01:07:53 ID:CHyVpE/10
まあjava8の勉強はこのぐらいにしとくか
次回はなにやるかなー
希望ある??
47: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 01:13:51 ID:m92WN69C0
>>43
個人的には、Javaのenumの仕様はキモくて好きだ
50: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 01:16:51 ID:CHyVpE/10
>>47
んじゃ次回enumやるか
あれは案外面白いからね
52: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 01:19:50 ID:m92WN69C0
>>50
真面目にenumへのメソッド定義はC#にも欲しい
だいたい拡張メソッドで事足りるのは確かだけど、ToString()とかのObject継承系をオーバーライドしたい
53: 忍法帖【Lv=10,xxxPT】(1+0:15) 2014/02/02 01:24:18 ID:CHyVpE/10
んじゃ次回第三回java講座はenumです
もちろんenumでのメソッドのあたりもやります。
ではまたいつかよろしく~
54: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 01:24:20 ID:dwrBSALPP
javaのenumは凄く良かった気がする
確かコンストラクタつくれば、enumに色々値つっこめるんだよね
55: 以下、名無しにかわりましてVIPがお送りします 2014/02/02 01:26:14 ID:m92WN69C0
>>54
Javaのenumは、クラス定義と同時にstatic finalなフィールドを設定してるようなもんだからな
999:名無しのプログラマー 2099/99/99 99:99:99 ID:ItSoKuHou
Java8はforEachとか便利そう(´・ω・`)ラムダ式で書ければListも1行で回せたりとか☆彡PHPと混乱しそうだけど
元スレ:http://hayabusa.2ch.net/test/read.cgi/news4vip/1391266401/