别靠巧合编程

来源:互联网 发布:淘宝怎么设置不同规格 编辑:程序博客网 时间:2024/05/01 19:22


      我来到一个熟悉的地方, 却发现许多角落依然陌生...

      某日, 我重新建立了测试库, 当着组内所有程序员的面清空了所有业务数据. "好了, 让我看看咱们的系统会发生什么情况, 我敢保证你们负责的部分有80%会瘫掉." 在说这句话时我衷心的祈祷不要被我言中. 但是, 当一个个硕大无比的异常页面张牙舞爪地出现在我面前时, 我意识到我好像总是处于失望中. "你们怎么做的异常处理?? 我强调过多少次了?? 你们懂不懂墨忒尔定理?? 现在看来所有的代码都是基于某种假设, 假设数据是存在并且是正确的, 这是在靠巧合编程!!" 又怒了, 没法控制了. "让你们看看我的程序怎么处理的." 我点开了我负责的页面. 一个完美的页面展现出来, 在他们眼里大概没什么好挑剔的, 我背后却有点冒汗了, 只有我知道, 这个页面和我期望的并不一致, 难道我也是在靠巧合编程?!

      代码走查, 一个激动人心的时刻, 看看这段java代码:

      for(int i = 0; i < nodeValue.length; i++){
   
          result = new ArrayList();
   
          itr = resourceSet.iterator();
          while(itr.hasNext()){
              bean = (EsseBean) itr.next()
              bean.setNodeValue(nodeValue[i]);  
              result.add(bean);
          }
   
         hash.put(nodeValue[i], result);
    }


      做个测试:

      nodeValue = {"aaa", "bbb"};
      bean = (EsseBean) ((ArrayList) hash.get("aaa")).get(0);
      print("The key is aaa; The value is " + bean.getNodeValue());

      猜猜打印出的会是什么?
      没错, 是 "The key is aaa; The value is aaa".


      真的是这样? 你对此确信无疑?


      真实的结果是: "The key is aaa; The value is bbb".


      我太过于信赖 "java没有指针" 这句话. 不对, 应该说对语言的特性理解的还不够, -_-||| . 好在我前几天刚刚把 "Thinking in java 3th" 读了一遍, 马上想到了Clone. 修改后的循环如下:

       while(itr.hasNext()) {
           bean = (EsseBean) ((EsseBean) itr.next()).clone;  /*depth clone in EsseBean*/
           bean.setNodeValue(nodeValue[i]);  
           result.add(bean);
       }

       够味!
       看来做事要低调啊.

       接替我工作的同事将菜单文件全部改了一遍, 其实就是改了个她不清楚的属性, 要命的地方就在这, 更改导致一大片子菜单丢失了. ^_^ 有多年工作经验的老手尚且会出这种问题, 值得警惕. 我的结论是: 不要轻易改动你不知道或一知半解的事物. 我多次看到同一模块, 同一作者的页面字符集分别用到了"GBK" 和 "GB2312". 除了编码时粗心大意外, 最可能的原因就是编写页面的程序员不清楚二者间的差别. baidu一下只需30秒就能知道它们的主要差别: GBK是GB2312的超集, GB2312没有收录繁体中文. 对于经常在眼前晃悠而自己又不明白的东西最好弄懂它, 否则日后传出去多丢脸.
 

原创粉丝点击