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这东西开发的时候还 设计模式 物件导向还不是主流吧