たまたま見つけました。
僕は左みたいなコードをよく書きます。
エンジニアさんに見せたら「プログラミングではそんなことしないんですよ」と言って右のループの書き方へ変えます。確かに計算はCPUにさせるところがプログラミングっぽい。右の方を好む人が多いでしょうか? pic.twitter.com/1NztJia7VU
— 麹町jp ₍ᐡ• •ᐡ₎ 🧩こうじまち (@KSJP9) September 15, 2023
時間を測定してみた。
void main() { final n = 10000000; var start1 = DateTime.now(); var result = sumN1(n); var end1 = DateTime.now(); print('sumN1 duration: ${end1.difference(start1)} : result$result'); var start2 = DateTime.now(); result = sumN2(n); var end2 = DateTime.now(); print('sumN2 duration: ${end2.difference(start2)} : result$result'); var start3 = DateTime.now(); result = sumN3(n); var end3 = DateTime.now(); print('sumN3 duration: ${end3.difference(start3)} : result$result'); } int sumN1(int n) { int sum = 0; for(int i = 1;i<=n;i++){ sum += i; } return sum; } int sumN2(int n) { return (n*(n+1)/2) as int; } int sumN3(int n) { final numbers = List.generate(n, (index) => index + 1); return numbers.reduce((acc, val) => acc + val); }
結果
sumN1 duration: 0:00:00.016000 : result50000005000000 sumN2 duration: 0:00:00.000000 : result50000005000000 sumN3 duration: 0:00:00.218000 : result50000005000000
やはり予想通りの結果。
こういうの、あるんですよね🧐
最初非同期処理にすべきかと思ってしまいましたが、計算が全部同期処理なのでawaitは要らないんですね、あはは😅
あとこういうツイートがありました。確かに見ちゃいますね笑
僕は左みたいなコードをよく書きます。
エンジニアさんに見せたら「プログラミングではそんなことしないんですよ」と言って右の書き方へ変えます。確かに〇〇。
右の方を好む人が多いでしょうか?これ構文化できそう
— kumamo_tone (@kumamo_tone) September 15, 2023