2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

Java言語のラムダ式できる奴ちょっときてくれ

1 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 21:52:09.71 ID:zF4p+sim0.net
ラムダ式使ってfizzbuzz書いてみた
こんな感じで使い方あってる?ムダなインスタンスとか生成されてない?

Runnable run=()->{
 i++;
 Print.print(i+":");
 Branch.branch(()->{return (i%3==0);},()->{Print.print("fizz");});
 Branch.branch(()->{return (i%5==0);},()->{Print.print("buzz");});
 Print.print('\n');
};
Loop.loop(run, loopcounter);

ちな
loopcounterには任意のint型の数値が入ってる
Branch.branchは(Supplier<Boolean>,Runnable)でtrueのときにRunnable run()を実行する
Print.printはCUI上に出力
Loop.loopは(Runnable,int)でintのパラメータ分だけRunnableのrun()を実行する

2 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 21:53:53.40 ID:JBYucHG90.net
4行目がまちがってるよ

3 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 21:55:12.59 ID:zF4p+sim0.net
>>2
iはフィールドで定義してる
4行目ってBranch.branch(()->{return (i%3==0);},()->{Print.print("fizz");});のとこか?
いちおうfizzbuzzされるぞ

出力結果はこんな感じ
1:
2:
3:fizz
4:
5:buzz
6:fizz
7:
8:
9:fizz
10:buzz
11:
12:fizz
13:
14:
15:fizzbuzz

4 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 21:55:43.33 ID:1fWm3uw/0.net
全部まちがってるよ

5 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 21:58:15.29 ID:zF4p+sim0.net
>>4
そりゃお前の頭はJava7だから読めないだろうよ

6 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:07:35.58 ID:pFbAWjYF0.net
Javaの持ち味はどんなコード書いてもメモリリークしないことだから大丈夫でしょ

7 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:14:52.33 ID:zF4p+sim0.net
>>6
ムダにインスタンス作りすぎると重くなるんだぜ?

for(int i=0;i<1000;i++){
System.out.println("これは死のコードです"+i+"←カウンタ");
}
ってやると"これは死のコードです"+i+"←カウンタ"の文字列のインスタンスが1000個できて重くなる

8 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:22:25.44 ID:pFbAWjYF0.net
>>7
ループを抜けるとスコープ外に抜けるのと同じだからガベージコレクション働かないかな?

9 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:22:58.61 ID:LVGwbaKR0.net
ちょっと釣り針大きすぎます

10 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:26:37.25 ID:zF4p+sim0.net
ガベージコレクションそんなに頻繁にやってたら大変なことになって穏やかじゃない
ためしにfor()文の中にgc()ぶちこんで毎ループごとにガベージコレクションしてみいや

11 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:30:55.76 ID:zF4p+sim0.net
あー普通にメモリの使用量監視すればいいのか
メモリの使用量出力するメソッドあったんだ忘れてた

12 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:32:16.84 ID:B77mcQqu0.net
わざわざこんなこんなめんどい書き方するメリットってあんの?

13 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:39:50.49 ID:pFbAWjYF0.net
さっきの文言の参考先
http://promamo.com/?p=2828

14 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:40:04.17 ID:zF4p+sim0.net
>>12

Branch.branchってメソッドがbooleanを動的に判断してRunnableに入ってるメソッドを実行できる
デザインパターンのCommandを実装しようとするとかなり楽になるきがする。たぶん

15 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:43:12.41 ID:zF4p+sim0.net
>>13
インスタンス生成のタイムラグもある

"これは死のコードです0←カウンタ"ってなってiが1になったところで、ガベージコレクションの対象にはなれど、解放されてないし
一度にくるガベージコレクションのタイムラグが苦しい。全部の動作止まるわけだからな

16 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:44:07.38 ID:zF4p+sim0.net
>>13
とりあえずEffectiveJava読むことお勧めする。読んでなかったら俺が勘違いしてる可能性あるからまた質問する

17 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:44:37.76 ID:zF4p+sim0.net
>>16
逆だった
>>13が読んでたら俺が勘違いしてる可能性あるってことな

18 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:52:49.15 ID:LVGwbaKR0.net
>>7
このコードはforが展開されてもっと負担の少ないものに最適化されるだろ

19 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 22:58:22.79 ID:zF4p+sim0.net
>>18
たしかに実行して時間計測したら文字連結してない奴より>>7のコードの方が早かった
Javaの実行時間管理とメモリ管理むずかしいね

20 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:04:19.07 ID:LVGwbaKR0.net
やあ、ここはプログラミングスレッドだよ!

Wiki(まだまだ未完成。編集者募集!)
http://vipprog.net/wiki/
共有Blog(プログラミング関連のコラム☆編集大歓迎!)
http://vipprog.tumblr.com/
避難所(規制組来たれ)
http://ex14.vip2ch.com/test/read.cgi/part4vip/1399372368/
うpろだ
http://www8.uploader.jp/home/vipprog/
コードが長くてコピペが辛い
http://pastebin.com/
web上で実行したい
http://codepad.org/
http://ideone.com/

21 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:14:42.18 ID:X4cR+RaD0.net
よくわからんからLispで書いて

22 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:16:40.56 ID:zF4p+sim0.net
Runnable runのところを
Runnable fizz=()->{Print.print("fizz");};
Runnable buzz=()->{Print.print("buzz");};
Supplier<Boolean> flag3=()->{return (i%3==0);};
Supplier<Boolean> flag5=()->{return (i%5==0);};
Runnable run=()->{
i++;
Print.print(i+":");
Branch.branch(flag3,fizz);
Branch.branch(flag5,buzz);
Print.print('\n');
};
って修正したらかなり高速化してワロタ。従来のfor()文よりも早かった

23 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:17:47.39 ID:zF4p+sim0.net
でも100回のとき早いのはラムダ式つかった方だな。10_0000回やるとラムダ式の方が時間かかる

24 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:18:20.20 ID:LVGwbaKR0.net
("やあ、ここはプログラミングスレッドだよ!"
(:title "Wiki(まだまだ未完成。編集者募集!)"
:url ("http://vipprog.net/wiki/"))
(:title "共有Blog(プログラミング関連のコラム☆編集大歓迎!)"
:url ("http://vipprog.tumblr.com/"))
(:title "避難所(規制組来たれ)"
:url ("http://ex14.vip2ch.com/test/read.cgi/part4vip/1399372368/"))
(:title "うpろだ"
:url ("http://www8.uploader.jp/home/vipprog/"))
(:title "コードが長くてコピペが辛い"
:url ("http://pastebin.com/"))
(:title "web上で実行したい"
:url ("http://codepad.org/"
"http://ideone.com/")))

25 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:19:52.32 ID:zF4p+sim0.net
>>21
これで堪忍してや
http://www.youtube.com/watch?v=xpacbPhprcM

ラムダ式つかうとしたらLispも勉強したほうがいいんだろうか

26 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:22:09.29 ID:zF4p+sim0.net
普通にプログラミングスレ建てればよかったね

27 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:22:42.55 ID:X4cR+RaD0.net
iがどっかで定義されてるんか
ようわからんからコード全部のせて

28 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:24:24.45 ID:LVGwbaKR0.net
(loop for n from 1 to 100
if (zerop (mod n 15))
do (print 'fizzbuzz)
else if (zerop (mod n 3))
do (print 'fizz)
else if (zerop (mod n 5))
do (print 'buzz)
else
do (print n))

loopマクロは偉大

29 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:27:44.61 ID:zF4p+sim0.net
>>27
フィールドにint i=0;で書いてる
ラムダブロック内での宣言方法がわかんなくて

30 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:29:13.79 ID:zF4p+sim0.net
>>28 なんかスマートだな。Lispかこれ?

最適化しまくると関数型言語になっちゃうよね極論

31 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:40:14.73 ID:LVGwbaKR0.net
最適化したら関数型言語になるというより
関数型言語の方が最適化しやすいだと思う

32 :以下、\(^o^)/でVIPがお送りします:2014/07/18(金) 23:46:10.37 ID:zF4p+sim0.net
なるほど!

総レス数 32
10 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★