作者neutrino (十年一梦)
看板Soft_Job
标题Re: [讨论] 程式设计师,好吃技术的职业喔!
时间Sat Dec 27 20:20:30 2008
※ 引述《idleidle (赚大钱=看对&下大注&抱住)》之铭言:
: 如果没加else一定是没被搞过
: 我一定会在else里面加例外回报的程式码
听起来有点怪....
如果是"认为condition永远不会跑到else"
那就不该用if 该用assert 或者用try&catch
如果if是用来branch, 程式原本逻辑是如下这种
if(condition)
{
xxx();
}
yyy();
那麽, 一定要加上else的话,
那到底是要
if(condition)
{
xxx();
yyy();
}else
{
yyy();
}
还是
if(condition)
{
xxx();
}else
{
}
yyy();
效果相同, 出题者到底想要哪个呢? 两者都反而把程式的阅读性变差,
行数也拉长了不是吗?
coding style 有些规定大家都会同意, 例如"不要滥用goto",
也有些规定只要在同一家公司或同一个平台里面约定一致就好, 例如"如何缩排",
"if或else之後的{要放在同一行或是隔行"等等.
我觉得"if後面要有else"就是属於後面那种.
有必要在找人的时候就要求对方的coding style和自己完全相同吗?
: 然後再加上自订的编号
: 加这几行不花几分钟
: 但这几行可能在未来
: 节省你几小时的debug时间!!
: 如果是写过硬体语言的
: 应该会习惯加上else吧
: 不加else会有什麽产生?
: 科科科
: ※ 引述《cheng1989 (cheng1989)》之铭言:
: : 跟我不久前去应徵过的一家公司一样, 不会是同家吧?(凯x智慧)
: : 那家公司在礼拜五跟我约隔天面试(礼拜六还上班...头皮发麻..)
: : 隔天我如期赴约, 结果一进去,
: : 老板就拿了张试题要我填, 不多, 好像才四题
: : 第一题就是要我回答某支jsp的code有没有问题? 能再加强什麽?
: : 他接着就开了一个网页, 按右键检视原始档给我看,
: : 说就是这个web page
: : 看看有没有问题, 有什麽想法就把它写下来~
: : 然後, 天兵的我过了五分钟後:
: : 「....小姐, 我有问题」没错, 现场还有一位员工在那里加班
: : 正妹走过来问我有何问题?
: : 我说经理要我看看这页的code有什麽问题
: : ...可是它是html档欵...Orz
: : (目小的我撑大眼睛看了5分钟後总算肯定地告诉正妹, 但其实我是以为经理会再
: : 走过来开code给我看啦~)
: : 正妹说, 喔, 那我去帮你问一下经理喔!
: : 我跟在正妹後面走到经理位置上....
: : ZZZzzzzz
: : 正妹:「经理睡着了....」我完全能理解, 这家公司真的很操呢!
: : 後来正妹就找出jsp code让我作答, 总算完成了我的第一道题目
: : 因为是问我个人看法, 所以没有标准答案,
: : 写了几个我认为的问题之後, 接着再填写其它试题, 交卷.
: : 那位经理人还不错, 看了我的答案之後告诉我说,
: : 其实那页的code有两个大问题, 但我没有答出来,
: : 一个是它只有if
: : 很多个if来判断条件成立时要执行的动作
: : 却没有else
: : 这意味着,
: : 写程式的人很有自信一定会有其中一个条件会成立
: : 或都不成立就什麽都不用做
: : 所以没有else
: : 但他认为这是最大的问题,
: : 万一发生意料外的事
: : 很可能就会异常
: : 他还拿cobol举例, 说cobol就是每个if都要搭else才比较保险比较稳定(me: ????)
: : 另一个问题, 好像是这些code最开始没有先做xx判断
: : 那个xx是什麽? 对不起我忘了Orz
: : 好像是类似要处理的资料, 是否为null, 或值为0吗?
: : 这个没先判断就开始处理资料了
: : 大概就这两个问题是他认为最重要的
: : 不过後来有被录取耶~ 但我没兴趣做稽核, 就没去了
: : 倒是我认为, 无论出这种考题的用意何在,
: : 都可以努力把自己的想法表达出来,
: : 即使回答的不是对方想听的答案,
: : 至少也让他知道我的程度到那里, 懂哪些东西
: : 绝对比交白卷好
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.136.226.5
※ 编辑: neutrino 来自: 220.136.226.5 (12/27 20:23)
1F:推 luciferii:以这个例子来说,效果不同。 12/27 20:37
2F:→ luciferii:例如你觉得某结果应该会 mathc -> xxx() -> yyy() 12/27 20:38
3F:→ luciferii:但是却只看到yyy(),就无法判定是没match,还是xxx()出错 12/27 20:39
4F:→ luciferii:加个 else { print something }等,会加快debug速度 12/27 20:40
5F:→ luciferii:回到原PO的主管例子,应该也是范例程式码没作防错处理吧 12/27 20:41
6F:→ neutrino:那在if的{}里面加一行print debug message就行了... 12/27 20:42
7F:→ neutrino:加在if里的xxx(); 之前 12/27 20:42
8F:→ neutrino:这样作决定点不在於if 有没有 else 而在於 是否处理例外? 12/27 20:47
9F:→ neutrino:是否加上适当的除错讯息? 是否有隐含视作理所当然成立的 12/27 20:48
10F:→ neutrino:条件却没有assertion? 12/27 20:48
11F:→ neutrino:不知道原po看的程式码内容, 无法判断,单看"if没配else"我 12/27 20:49
12F:→ neutrino:认为没有定论 12/27 20:50
13F:推 wa120:如果今天写了八个条件判断if...else if...else if... 12/27 23:25
14F:→ wa120:最後面加个else比较保险... 12/27 23:26
15F:推 hougzou:看情况!像if(a==null){return;}判断是否继续就不用else 12/27 23:52
16F:推 luciferii:楼上,如果程式里有多处这种判断,还是加一下好 12/28 00:10
17F:→ luciferii:才知道return发生在何时,或可能都不是,是发生例外时? 12/28 00:11
18F:推 lgd1008:听起来还是很奇怪, 怎麽会有人程式这样子写? 12/28 00:17
19F:→ lgd1008:如果在一个检查input的function里, by case去执行程式跟 12/28 00:17
20F:→ lgd1008:秀出input错误的讯息那很正常, 但怎麽可能全部都检查 12/28 00:18
21F:→ lgd1008:举个例来说 A 呼叫 B 呼叫 C 呼叫 D 12/28 00:19
22F:→ lgd1008:在 A 里检查算正常,可是到了 B, C, D...还在检查干嘛? 12/28 00:19
23F:→ lgd1008:通常都是早在A在确定输入正确, B, C, D完全不检查 12/28 00:20
24F:→ lgd1008:就算写了 else 也100% 执行不到 12/28 00:21
25F:→ lgd1008:那为何补上 else 会成为一种良好的习惯? 就令人十分费解.. 12/28 00:22
26F:推 joy830:都可以拉!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 12/28 00:29
27F:→ luciferii:楼楼上,要这样写的前提是, D只会被C呼叫,C只会被B呼叫 12/28 01:58
28F:→ luciferii:而B只会被A呼叫。而且要规定来B,C,D不可被其他人呼叫 12/28 01:59
29F:→ luciferii: ^未来 12/28 01:59
30F:推 a2975313:推coding style 12/28 02:31
31F:推 TonyQ:虽然不认为补上else 是「一定必要」,不过认同每个支线都要 12/28 02:44
32F:→ TonyQ:做处理的态度。身为Coder就要掌握这条路径上的每一个可能性. 12/28 02:45
33F:→ TonyQ:不然费尽千辛万苦把程式模组化就失去其意义了. 12/28 02:46
34F:→ minstrelsy:支线处理很重要 但并不是用了else就能天下太平 12/28 03:14
35F:→ minstrelsy:完全不用else不能算是很好的习惯 但凡事都非else不可 12/28 03:16
36F:→ minstrelsy:只是让人觉得矫枉过正 12/28 03:16
37F:推 realmeat:讨论到这个已经到了有点无聊的地步了 12/28 08:14