昨天在修改以前同事写的JavaScript代码时,看到里面有这样的写法:
location.load(’/foo…’)
以此跳转到新的页面。
当时心想,哟,看别人代码就是有收获,又学到新东西了。于是修改的过程中,我也尝试用这种办法,一方面我可以copy原来的代码,另一方面,这种办法比起window.location.href = ‘/foo…’的写法要好看一些嘛……然而代码跑起来的时候却发现,location对象根本没有这个方法。原来,这位同事是看到location有reload(查一下标准)这个方法来重新载入当前页,就认为载入一个新页面应该有个方法为load,以一个字符串为参数。
记下这件事,并没有丝毫冷嘲热讽的意思。从程序语言设计的角度来说,这种思想是很合理的:为location对象的href属性赋值,应该只引起该对象属性的变化,而不是引发一个动作;而要想使浏览器加载新的页面,应该由一个方法来完成。然而,不论怎么合理,都不能想当然地这样写代码,这已经超出了写代码的范畴了,这是在设计语言。我也不应该看到这样的代码就想当然地认为有这样的方法,至少,google一下就知道它不存在了,万幸的是这个错误被及时地发现了。
还有一件事,在看到有人用system.out.println方法debug代码时,我经常会指出,除非万不得已,尽可能用IDE的Watch之类的功能,打印的函数很有可能被遗忘在代码中而不被删除。我是个比较自以为是的人,也很理解对方不以为然地说,没关系,完了都会删除的。我很不放心地走开,然而事后经常证明我的担心是对的,检查代码时,还可以看见许多的println debugger完好地留在代码中。
总之,虚心是很重要的一个品德,如果实在以下问为耻,可以Google啊,baidu啊。看到这些事情,在为别人惋惜的同时,我也把它们当作镜子,反观自己身上是不是有同样的缺点。对别人宽容,对自己严格,又是更难做到的一件事情。
我c code习惯把debug的东西都封装成宏,像什么print assert log之类的,release的时候全define成do;while(0)就ok了
java里面能做类似的事情么?
有些这方面工作,但用得不多,如:
http://jdj.sys-con.com/read/36089.htm
毕竟Java的应用一般都很方便调试,不像C更常用在嵌入式之类的设备。
哦哦。
说的没错,AS里面的trace;JS里面的alert,包括你说的这个(应该是Java吧?我不懂)
嗯,是Java