>>317…抱歉懷疑你,不過你這是餵AI給的回答嗎?
switch維護性差是同樣一個switch到處複製重寫的情況
單就能夠重寫成dictionary的情況限定來說
把switch包在function裡之後
就只有dictionary用[],function用()的差別而已
效率還是要看語言實作
c++的switch基本上都是compile到lookup table,一般情況應該是不會比較慢
只是case多或者range比較大等等特殊的情況就會比較複雜
如果限定key是int的話還要跟array比較,然後就還要考慮記憶體快取效率問題
到這裡不實測應該很難預測結果
(我還是會先猜switch比較快就是了,畢竟內建功能通常有比較好的最佳化)
python或js之類就不知道了
畢竟這些語言本來就慢
沒有jit的話用dictionary也很合理
而且js好像有特別針對dictionary做最佳化
以debug的差別來說
switch有個可以直接step in的好處
用dictionary的話你想針對某個case設斷點就要用conditional
斷點一多就更麻煩了
(這部分是把工具學好一點就可以解決的事情就是了)
然後最後有個功能性的差別
switch的case要compile time就寫死
dictionary內容可以全部runtime決定
不過這種情況又有點降低可讀性了,因為只看code根本不知道有什麼case
最好還是有個註解或文件把可能的case都寫下來
總而言之,效率上不實測不知道,但除非你很確定你符合特殊情況或真的需要擠出那一點速度,一般情況相信compiler比較好
維護性上也沒有多少差別,不過switch更verbose一點,這邊就看喜好
回歸到上面的話題,其實用switch或dictionary跟波動拳好像沒什麼關聯…