https://reurl.cc/OmeMaR
以下內容轉自臉書(連結如上)
https://files.catbox.moe/0pu43a.png
前幾日微軟工程師 Dave W Plummer 分享
當初微軟推出新的作業系統 Windows NT 後
要把立體彈珠台 (Pinball) 這個內建遊戲改寫到新的作業系統
於是被交派這個任務的他看了原本的程式碼
結果發現是一個超級巨型的 swtich() 語句
底下有超過五十個 case 所組成
作者:
serding (累緊地們)
2025-09-08 16:16:00不能亂動了
作者:
SangoGO (隱世的外來人Lv.1)
2025-09-08 16:16:00至少他還有用Switch而不是if else
作者:
HJC6666 (帕修)
2025-09-08 16:16:00switch也沒很亂吧 總比把東西亂放好
作者:
yezero (肥雁改)
2025-09-08 16:16:00可以想像只是有點失望
很合理啊 都是用球去撞switch成五十塊反而可以讓每塊的深度不要太深
作者:
HJC6666 (帕修)
2025-09-08 16:18:00永遠true更爽了 剩下49條砍掉都不怕出事= =
作者:
tnlinna (serena)
2025-09-08 16:19:00好奇那個年代可以呈現出那樣的彈珠彈跳感算是很厲害嗎?那時有物理引擎之類的東西了?
作者:
gino0717 (gino0717)
2025-09-08 16:19:00那個誰跟你說你應該總是使用if else還出了本書
作者: piyan5566 2025-09-08 16:19:00
至少不是寫成巢狀if else
以彈珠台這例子來說,用switch沒有什麼不好吧?
if else if else if else if else if else if else
這個案例寫50個case或50個if else都算是合理用法
作者: xxxzxcvb (阿........) 2025-09-08 16:28:00
不然要一堆if else 喔 最後的判斷要把前面全都跑過
寫到50我猜是用來判斷撞到什麼 現代可能寫成物件吧
if else要判斷的只有if裡面的東西啊 switch一樣要比較如果那50個東西被彈珠撞的反應有明顯的樹狀結構
那就會寫成樹狀if else了 不過我也不是做這遊戲的
作者:
yezero (肥雁改)
2025-09-08 16:31:00只是在這裡聽到switch這種程設課前幾堂就學到的東西覺得有點奇怪而已。身為微軟的程式猿沒有更神奇的寫法嗎…
如果處理50種碰撞都是相異的小事 那並列沒什麼問題
彈珠檯本身就是個貼圖碰撞遊戲 不管你是要顯示外觀還是要處理彈珠碰撞 switch和if else都是最直接的選擇我個人是比較偏好if else啦 switch你還要想一下冒號換行 以及裡面如果要宣告變數可能會有什麼麻煩
作者:
lsd25968 (cookie)
2025-09-08 16:34:00這邊switch case很合理吧 每個事件都是平等的話 如果一
作者:
llabc1000 (野生的攻城ç…)
2025-09-08 16:35:00只要她會動,那就沒問題。
50個case和50個else if其實看起來也差不多case裡面宣告變數反而還稍微有點問題
作者:
npc776 (二次元居民)
2025-09-08 16:35:00牛用奶頭走路.gif
作者:
vios10009 (vios10009)
2025-09-08 16:37:00至少不是用if else 外加 goto
我倒是覺得是用 X-macro 加上 array,之後套 switch-case這樣只要維護 X-macro 就好
以這張圖來說 只知道是跟這50個彈珠檯零件有關的判斷
作者:
ltytw (ltytw)
2025-09-08 16:47:00用switch會好讀嗎
這個的關鍵不是在switch,而是"巨型"。無論什麼程式碼你只要聽到某個"巨型"的東西(不管那東西是條件判斷還是函式還是其他的什麼),那通常都會讓人類一個頭兩個大,就這樣。
看起來就是球跟場地有互動就來跑這個switch 簡單粗暴 比什麼不小心搜尋到整個包包造成卡頓 還是什麼你看這顆石頭有幾百萬面但優化0分 拍賣太多人用會壞掉 好很多
作者:
YeaPa (葉胖)
2025-09-08 16:51:00我猜碰觸物件之後該物件會觸發一個共同event,而不是每個物件有獨立的event,然後再從參數裡面帶物件的編號,所以後面的handler用switch case去處理,如果是這樣的話那會比if else好很多,包括效能的部分
作者:
npc776 (二次元居民)
2025-09-08 16:52:00我有點忘記 場上是不是可以多一顆球 這樣運作沒問題嗎
作者:
ss218 (大青花魚)
2025-09-08 16:54:00那時代的程式語言就差不多那樣吧
作者:
EXTECH (EXTECH)
2025-09-08 16:54:00寫得蠻好的啊
作者:
Giornno (喬魯諾.喬三槐)
2025-09-08 16:57:00至少不是if
作者:
ilohoo (ilohoo)
2025-09-08 16:58:00switch case比if else好讀 不過要是能物件化每個物件各自處理碰撞事件會更好擴充
作者:
Giornno (喬魯諾.喬三槐)
2025-09-08 16:58:00或者是用jumpx跳來跳去的
多球不知道如何設計 handler再傳入ball*之類的? 但又要忙多顆球的物理有點忙C++的話有種想套template method XD
作者:
EXTECH (EXTECH)
2025-09-08 17:06:00如果是50物件都有獨自物理特性,沒毛病啊
作者: whosu (HiHi) 2025-09-08 17:06:00
看他這個圖片的案例 switch確實沒啥問題 就是很多而已
作者:
Pixis (說好不擺爛)
2025-09-08 17:17:00童年
作者: crazyanight (crazyanight) 2025-09-08 17:28:00
我比較喜歡看if else switch還要找break不過如果內容簡單的話確實switch更合理
作者: ao40418 (噗嚕嚕咕) 2025-09-08 17:34:00
switch控制狀態機不是基本到不行嗎
作者: edgefish02 2025-09-08 17:51:00
至少不是用goto 大家就要知足 XD
作者:
WiLLSTW (WiLLS)
2025-09-08 18:30:00沒有問題吧 遊戲就是一個巨大的狀態機
作者:
anondog (anon)
2025-09-08 18:32:00Windows工作管理員也是他寫出來的
作者:
spfy (spfy)
2025-09-08 18:48:00這東西開發的時候還 設計模式 物件導向還不是主流吧