プログラミング詳しい人、ifと+について聞きたいことがある

1: 2019/07/26(金) 16:22:50.673 ID:dkhaBsd/0
ifと+ってどっちが速い?

2: 2019/07/26(金) 16:25:13.053 ID:OSj3QDGo0
言語とオペランド次第

3: 2019/07/26(金) 16:25:39.388 ID:dkhaBsd/0
javaね

5: 2019/07/26(金) 16:25:49.845 ID:OSj3QDGo0
あと場合によっては文脈も必要かも

7: 2019/07/26(金) 16:27:06.440 ID:zbsep9u+a
何したいか分からん

8: 2019/07/26(金) 16:28:02.435 ID:zbsep9u+a
ifと+ってそんな使う場面同じだっけ?
マジで分かんねぇ

9: 2019/07/26(金) 16:28:40.882 ID:hdjOyA5q6
せめて、何したいのかをかけ、
、前後の文も、

10: 2019/07/26(金) 16:28:55.222 ID:/DBzx9qs0
アセンブリ出力してみないと分からない

11: 2019/07/26(金) 16:39:17.284 ID:NAxPg7C8a
そもそも言語なんだよifと+悩む状況ってなんだよ

12: 2019/07/26(金) 16:44:19.435 ID:dkhaBsd/0
int i = 0;

function A(){
if(i==0){
i = 2+3+4+5+6;
return i
}else{
return i
}
}

function B(){
return 2+3+4+5+6;
}

これね
A()とB()どっちがいい?

15: 2019/07/26(金) 16:46:09.075 ID:gSDF6TuW0
>>12
どっちとは?
同じ処理ではないようだが

17: 2019/07/26(金) 16:47:11.874 ID:dkhaBsd/0
>>15
どっちが速いか
返す値は同じ

18: 2019/07/26(金) 16:47:23.405 ID:OSj3QDGo0
>>15
くっそわかりにくいけど、計算結果をキャッシュしてるだけだから同じ処理っちゃあ同じ処理

14: 2019/07/26(金) 16:46:02.057 ID:zbsep9u+a
使い道がまったく分からんが処理はBの方が早い
決まった値が欲しいなら定数を定義しよう

16: 2019/07/26(金) 16:46:44.492 ID:dkhaBsd/0
>>14
計算式が
20*40/1000*100でも?

20: 2019/07/26(金) 16:49:04.086 ID:zbsep9u+a
>>16
何万回と短時間に頻繁に呼び出すならAの方が早い
頻繁に呼び出さないならBの方が早い
そもそも決まった値が欲しいなら定数として定義した方が遥かに早い
遅延初期化したいなら話は別だけど違うっぽいし

22: 2019/07/26(金) 16:49:24.405 ID:OSj3QDGo0
>>16
ケースバイケースだから実際に測定して決めろ
なおAの場合、時間低下の最大の原因はifではなくiへのアクセス時間となる
何度も連続して呼ぶ場合は高速だが、他の処理を挟むと一気に1ケタ以上落ちたりするケースもある

19: 2019/07/26(金) 16:48:29.186 ID:sqE9JlmW0
そりゃBでしょ

21: 2019/07/26(金) 16:49:09.983 ID:dkhaBsd/0
>>19
Bは毎回計算するけど
文字列結合でもB?

23: 2019/07/26(金) 16:50:02.042 ID:sqE9JlmW0
>>21
Aも毎回計算するでしょ

25: 2019/07/26(金) 16:51:34.235 ID:dkhaBsd/0
>>23
Aは2回目以降はifの後すぐ値を返す

24: 2019/07/26(金) 16:51:33.085 ID:zbsep9u+a
あとクラスのメンバ(例ではi)へのアクセスはちょっと時間かかるから
ローカル変数に叩き込んどいて引数で渡した方が早い

28: 2019/07/26(金) 16:52:56.618 ID:dkhaBsd/0
>>24
ローカルにしたら値維持できなくね?

26: 2019/07/26(金) 16:51:45.756 ID:5fi67UQA0
日本語もろくに使えないのに
なんで他の言語をやろうとするんだろ?

27: 2019/07/26(金) 16:52:26.208 ID:sqE9JlmW0
ああよく見たらiのスコープは外か 何回も使うならAでいいんじゃない

29: 2019/07/26(金) 16:53:57.902 ID:gSDF6TuW0
返す値は同じじゃないし
コレをキャッシュと言う奴がいるとは思わなかったよ

35: 2019/07/26(金) 16:56:43.048 ID:OSj3QDGo0
>>29
どう見ても同じじゃん

30: 2019/07/26(金) 16:54:15.714 ID:zbsep9u+a
常に20が欲しいなら定数にしよう
初めて呼び出した時に20を計算して、次回から最初に計算した20が欲しいならBと比較するのはおかしい

34: 2019/07/26(金) 16:56:28.000 ID:dkhaBsd/0
>>30
1回も呼び出さない場合もある
そうすると計算が無駄になる

36: 2019/07/26(金) 17:00:12.140 ID:zbsep9u+a
>>34
遅延初期化したいならBは論外
インスタンスを複数作るなら定数にした方がいい
シングルトンならAでいい

32: 2019/07/26(金) 16:56:07.615 ID:mfq2LQV90
速度が気になるなら+なんて使うんじゃねえよと言いたいところだが

33: 2019/07/26(金) 16:56:24.588 ID:zbsep9u+a
兎にも角にも
やりたい事が分からなさすぎる
何がしたいのか、何故そうするのかが分からないと
使い道が違うから無難な事しか言えない

37: 2019/07/26(金) 17:08:41.877 ID:zbsep9u+a
軽い計算ならこんなこと考えないはずだから
例と違って実際の処理は配列の合計みたいな、一計算にコストがかかる処理なんだよな?
で、重い計算だから使わない場合は一度も計算したくないと
Setup関数でも作って、欲しい値をiにセットする処理を追加するとかの方法もあるし
その必要な値を用意してくれる機能をクラスにして、必要な時にインスタンスを作れば値を計算してセットしてくれてるという方法もある

何がしたいか、どう使うのか次第だから
実装はお好みで