咳... 最近寫的部分代碼是有 Code Review 的 ...
但是嘛... 我不知道哪種能過...
PS: PHP 版本是 5.4 的所以不要糾結 [] 是什麼了 ... 這就是 array
// 1$rule = ['pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er1&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1','pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er2&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1','pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er3&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1','pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er4&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1','pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er5&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1',];// 2$rule = array_map(function($s) {return "pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er{$s}&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1";}, range(1, 5));// 3$rule = [];for ($i = 1; $i < 6; $i++) { $rule[] = "pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er{$i}&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1";}
回複內容:
咳... 最近寫的部分代碼是有 Code Review 的 ...
但是嘛... 我不知道哪種能過...
PS: PHP 版本是 5.4 的所以不要糾結 [] 是什麼了 ... 這就是 array
// 1$rule = ['pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er1&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1','pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er2&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1','pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er3&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1','pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er4&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1','pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er5&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1',];// 2$rule = array_map(function($s) {return "pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er{$s}&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1";}, range(1, 5));// 3$rule = [];for ($i = 1; $i < 6; $i++) { $rule[] = "pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er{$i}&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1";}
你個死小兔你也有被人 code review 的時候啊 ...
這三種寫法 ... 如果是成品代碼 ... 第一種是絕對不可取的 ...
你知道你是複製粘貼然後只修改了一個數字 ... 但 review 的人不知道 ...
就算他知道 ... 他也無法確定你是不是手滑多改動了什麼 ...
在無法確定你這五行代碼是不是只有一個數字不一樣其他都一樣的情況下 ...
他需要認真去看或者藉助工具來確認這一點 ... 這實際上是在給 reviewer 添不必要的麻煩 ...
如果是 code-generator 或者 pre-processor 產生的程式碼 ... 無疑第一種是效率最高的 ...
但如果手寫這種代碼 ... 哪怕只是 yy4p 也絕對是一個愚蠢的行為 ...
再說剩下的 ... 在這樣一個簡單的需求下 ... 第二種的寫法偏向炫技 ... 第三種比較中規中矩 ...
我稍微測了一下 ... 第二種寫法比第三種慢 140% ...
換言之 ... 第二種寫法的執行效率是第三種寫法的 240% ...
數字看起來很可怕 ... 但實際上都是毫秒級的差距 ...
我們姑且不說在重負載高並發的情況下這幾毫秒能影響什麼 ...
我只說浪費的這幾毫秒 ... 從任何角度講 ... 都完全沒有意義 ... 你聽到伺服器的哭泣了嗎 ..?
有個事情我必須要說 ... 並不是說你寫成第三種樣子就說明你沒有能力 ... 你的代碼就不好看了 ...
重劍無鋒 ... 大巧不工 ...
舉重若輕才是一個高手該有的樣子 ... 像你這種為了炫技而故意製造麻煩的做法 ... 實在是不可取 ...
當然 ... 這隻是說要把代碼上線去跑的時候 ... 社區溝通的話其實第二種和第三種區別真的不大 ...
順帶一提 ...
這種類 python 的寫法都比你用 array_map 要快哦 ...
方案3
1.代碼多,要看到差異部分太難了
2. 2 和 3 一般人都會寫3. 2還有一個不好之處就是 range 先建立了一個數組,要不然array_map是更好的。
3. 選擇3 我個人原因是因為直觀
如果是重複的字串,明顯是 str_repeat() 更好。
如果不重複那麼明顯是第一種更好,因為在編譯期間就已經確定了。
第二種是最慢的 函數式編程這一塊在PHP這邊還很弱 Python的寫法不一定適用(當然我是做過測試的)
第三種屬於中規中矩
3是擴充性比較好吧.以後想加入新的變數或者增加迴圈次數的時候很方便
如果遇到了運行效率問題的話也可以很簡單的渲染成第一種方式(寫入檔案或者echo啥的):
for ($i = 1; $i < 6; $i++) { file_put_content("pid=etfscreener&formsubmit=1&etfpage=1&cn=cnUS&cf=&go=&ta=&er=er{$i}&ry=&r1=&r3=&r5=&tac=1&erc=1&ryc=1&r5c=1");}