■ このスレッドは過去ログ倉庫に格納されています
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 ★