🔥 PTT.BEST 批踢踢爆文 💬 八卦 Gossiping 😊 希洽 C_Chat 💰 股票 Stock 🏠 房屋 home-sale 🏀 美國職籃 NBA ⚾ 棒球 Baseball 👛 省錢 Lifeismoney 🚗 汽車 car 😡 政黑 HatePolitics 💻 電蝦 PC_Shopping 🥰 韓星 KoreaStar ✨ 英雄聯盟 LoL 🍿 電影 movie 🪖 軍事 Military 📡 通訊 MobileComm 🏀 台籃 basketballTW 🍼 寶媽 BabyMother 🇯🇵 日旅 Japan_Travel 🏭 科技 Tech_Job 👉 男女 Boy-Girl 👉 真香 CheerGirlsTW 👧 女孩 WomenTalk 👻 媽佛 marvel 💳 卡版 creditcard 👉 NS NSwitch 👉 PS5 PlayStation 👉 大氣 TY_Research 👉 婚姻 marriage 👉 台南 Tainan 👉 台中 TaichungBun 👉 Steam Steam 👉 高雄 Kaohsiung 👉 羽球 Badminton 👉 超商 CVS 👉 米哈遊 miHoYo 👉 iOS 👉 兄弟 Elephants 👉 日劇 Japandrama 👉 玄幻 CFantasy 👉 ES e-shopping 👉 WOW 👉 遊戲交易 Gamesale 👉 4X BaseballXXXX 👉 Lakers 👉 韓劇 KoreaDrama 👉 汽車買賣 CarShop 👉 機車 biker 👉 新竹 Hsinchu 👉 美保 BeautySalon 👉 串流 OTT 👉 歐美影集 EAseries 👉 手機交易 mobilesales 👉 健身 MuscleBeach 👉 MacShop 👉 Lions 👉 FGO FATE_GO 👉 中劇 China-Drama 👉 數位貨幣 DigiCurrency 👉 暗黑 DIABLO 👉 實習教師 studyteacher 👉 航空 Aviation 👉 藝文票券轉售 Drama-Ticket 👉 韓綜 KR_Entertain 👉 美妝 MakeUp 👉 速食 fastfood 👉 手錶 watch 👉 體適能 FITNESS 👉 攝影 DSLR 👉 Headphone 👉 嘻哈 Hip-Hop 👉 轉珠 PuzzleDragon 👉 美食 Food 👉 蔚藍 BlueArchive 👉 數位相機交易 DC_SALE 👉 筆電蝦 nb-shopping 👉 軟工 Soft_Job 👉 汪踢 Wanted 👉 台綜 TW_Entertain 👉 坂道閒聊 SakaTalk 👉 貓咪 cat 👉 日GO BabyProducts 👉 TypeMoon 👉 MLB 👉 職場 Salary 👉 臺劇 TaiwanDrama 👉 海賊王 ONE_PIECE 👉 PMGO PokemonGO 👉 國營 Gov_owned 👉 碧航 AzurLane 👉 家電 E-appliance 👉 布蘭德 Brand 👉 DMMG DMM_GAMES 👉 贈送 give 👉 神魔 ToS 👉 銀行服務板 Bank_Service 👉 原創 YuanChuang 👉 期權 Option 👉 重機 SuperBike
https://reurl.cc/OmeMaR 以下內容轉自臉書(連結如上) https://files.catbox.moe/0pu43a.png
前幾日微軟工程師 Dave W Plummer 分享 當初微軟推出新的作業系統 Windows NT 後 要把立體彈珠台 (Pinball) 這個內建遊戲改寫到新的作業系統 於是被交派這個任務的他看了原本的程式碼 結果發現是一個超級巨型的 swtich() 語句 底下有超過五十個 case 所組成 ----- Sent from MeowPtt on my SH-M28 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.9.200.133 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1757319319.A.D4A.html
serding: 不能亂動了 09/08 16:16
SangoGO: 至少他還有用Switch而不是if else 09/08 16:16
HJC6666: switch也沒很亂吧 總比把東西亂放好 09/08 16:16
yezero: 可以想像只是有點失望 09/08 16:16
kirimaru73: 很合理啊 都是用球去撞 09/08 16:17
kirimaru73: switch成五十塊反而可以讓每塊的深度不要太深 09/08 16:17
xga00mex: 然後發現第一個case永遠為true 09/08 16:17
StarTouching: 巨型狀態機 這不是很棒嗎? 09/08 16:18
h0103661: 1993年欸,那個時候上課都在用組語 09/08 16:18
HJC6666: 永遠true更爽了 剩下49條砍掉都不怕出事= = 09/08 16:18
h0103661: 用switch已經是高階語言了 09/08 16:19
tnlinna: 好奇那個年代可以呈現出那樣的彈珠彈跳感算是很厲 09/08 16:19
tnlinna: 害嗎?那時有物理引擎之類的東西了? 09/08 16:19
gino0717: 那個誰跟你說你應該總是使用if else還出了本書 09/08 16:19
piyan5566: 至少不是寫成巢狀if else 09/08 16:19
kirimaru73: 二維運動反彈加個重力 不算太複雜 09/08 16:20
twosheep0603: 狀態機 沒有問題 09/08 16:20
HolyBugTw: 還有什麼更好的寫法嗎?願聞其詳 09/08 16:20
speedingriot: 以彈珠台這例子來說,用switch沒有什麼不好吧? 09/08 16:22
oyaji5566: if else if else if else if else if else if else 09/08 16:22
Gwaewluin: 至少比全都if好很多了 09/08 16:27
kirimaru73: 這個案例寫50個case或50個if else都算是合理用法 09/08 16:27
StarTouching: 任天堂又贏 09/08 16:27
kirimaru73: switch有一些比較奇怪的規則要注意 你想要穩一點就寫 09/08 16:27
kirimaru73: 50個if else然後都用{}框好 有人要叫就隨便他叫 09/08 16:28
xxxzxcvb: 不然要一堆if else 喔 最後的判斷要把前面全都跑過 09/08 16:28
xga00mex: 寫到50我猜是用來判斷撞到什麼 現代可能寫成物件吧 09/08 16:29
kirimaru73: if else要判斷的只有if裡面的東西啊 switch一樣要比較 09/08 16:29
kirimaru73: 如果那50個東西被彈珠撞的反應有明顯的樹狀結構 09/08 16:30
xga00mex: 不過邏輯如果不複雜用switch也沒差 09/08 16:30
kirimaru73: 那就會寫成樹狀if else了 不過我也不是做這遊戲的 09/08 16:30
yezero: 只是在這裡聽到switch這種程設課前幾堂就學到的東西覺得 09/08 16:31
yezero: 有點奇怪而已。身為微軟的程式猿沒有更神奇的寫法嗎… 09/08 16:31
kirimaru73: 如果處理50種碰撞都是相異的小事 那並列沒什麼問題 09/08 16:31
xga00mex: 能寫的簡單幹嘛複雜化 09/08 16:31
kirimaru73: 彈珠檯本身就是個貼圖碰撞遊戲 不管你是要顯示外觀 09/08 16:32
kirimaru73: 還是要處理彈珠碰撞 switch和if else都是最直接的選擇 09/08 16:33
kirimaru73: 我個人是比較偏好if else啦 switch你還要想一下冒號 09/08 16:33
kirimaru73: 換行 以及裡面如果要宣告變數可能會有什麼麻煩 09/08 16:34
lsd25968: 這邊switch case很合理吧 每個事件都是平等的話 如果一 09/08 16:34
kirimaru73: 當然你內容夠簡單的話用哪個都沒差 09/08 16:34
lsd25968: 長串if那維護才會看到吐血== 09/08 16:34
llabc1000: 只要她會動,那就沒問題。 09/08 16:35
kirimaru73: 50個case和50個else if其實看起來也差不多 09/08 16:35
kirimaru73: case裡面宣告變數反而還稍微有點問題 09/08 16:35
shallreturn: 菜雞覺得用switch 很美(X 09/08 16:35
npc776: 牛用奶頭走路.gif 09/08 16:35
kirimaru73: switch它其實是個......用goto原理都出來的東西 09/08 16:35
kirimaru73: 我給它比較多尊重 夠單純的任務才會叫它上工 09/08 16:36
vios10009: 至少不是用if else 外加 goto 09/08 16:37
clh960524: 我倒是覺得是用 X-macro 加上 array,之後套 switch-c 09/08 16:38
clh960524: ase 09/08 16:38
clh960524: 這樣只要維護 X-macro 就好 09/08 16:38
kirimaru73: 以這張圖來說 只知道是跟這50個彈珠檯零件有關的判斷 09/08 16:41
FertilizerN: If it works, it works 09/08 16:41
kirimaru73: 如果是簡單的事情 那用簡單的語法處理很合理 09/08 16:41
kirimaru73: 如果是很複雜的行為 那開發過程中就會自己分類包裝了 09/08 16:42
kirimaru73: 一個if或switch加起來幾千行確實是不應該 09/08 16:43
kirimaru73: 不過發文者也沒說那個switch裡面有多大 09/08 16:43
ltytw: 用switch會好讀嗎 09/08 16:47
NightDream08: 這個的關鍵不是在switch,而是"巨型"。無論什麼程式 09/08 16:50
NightDream08: 碼你只要聽到某個"巨型"的東西(不管那東西是條件判 09/08 16:50
NightDream08: 斷還是函式還是其他的什麼),那通常都會讓人類一個 09/08 16:50
NightDream08: 頭兩個大,就這樣。 09/08 16:50
ULTIMGBK: 看起來就是球跟場地有互動就來跑這個switch 簡單粗 09/08 16:51
ULTIMGBK: 暴 比什麼不小心搜尋到整個包包造成卡頓 還是什麼 09/08 16:51
ULTIMGBK: 你看這顆石頭有幾百萬面但優化0分 拍賣太多人用會 09/08 16:51
ULTIMGBK: 壞掉 好很多 09/08 16:51
YeaPa: 我猜碰觸物件之後該物件會觸發一個共同event,而不是每個物 09/08 16:51
YeaPa: 件有獨立的event,然後再從參數裡面帶物件的編號,所以後面 09/08 16:51
YeaPa: 的handler用switch case去處理,如果是這樣的話那會比if el 09/08 16:51
YeaPa: se好很多,包括效能的部分 09/08 16:51
npc776: 我有點忘記 場上是不是可以多一顆球 這樣運作沒問題嗎 09/08 16:52
ss218: 那時代的程式語言就差不多那樣吧 09/08 16:54
ymsc30102: 可以三顆噢 09/08 16:54
EXTECH: 寫得蠻好的啊 09/08 16:54
Giornno: 至少不是if 09/08 16:57
ilohoo: switch case比if else好讀 不過要是能物件化每個物件各自 09/08 16:58
ilohoo: 處理碰撞事件會更好擴充 09/08 16:58
Giornno: 或者是用jumpx跳來跳去的 09/08 16:58
inte629l: 多球不知道如何設計 handler再傳入ball*之類的? 但又要 09/08 16:58
inte629l: 忙多顆球的物理有點忙 09/08 16:58
inte629l: C++的話有種想套template method XD 09/08 16:59
EXTECH: 如果是50物件都有獨自物理特性,沒毛病啊 09/08 17:06
whosu: 看他這個圖片的案例 switch確實沒啥問題 就是很多而已 09/08 17:06
Pixis: 童年 09/08 17:17
crazyanight: 我比較喜歡看if else switch還要找break 09/08 17:28
crazyanight: 不過如果內容簡單的話確實switch更合理 09/08 17:29
ao40418: switch控制狀態機不是基本到不行嗎 09/08 17:34
edgefish02: 至少不是用goto 大家就要知足 XD 09/08 17:51

😊 希洽 C_Chat 版:熱門文章

😊 希洽 C_Chat 版:更多文章