七段

          無論怎樣,請讓我先感謝一下國家。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            35 Posts :: 2 Stories :: 7 Comments :: 0 Trackbacks

          #

          Less Code == [Less Bugs,Better Readability,Less programmers to hire, Less organizational communication costs, Less maitain cost]
          Less Code != [Higher Productivity,Better Performance]
          1, import static
          remove duplicated namespace
          what does it do?
          package com.toolbox.lang;
          public class ClassWithStaticMember {
            public static final String name="value";
            public static String say() {
              return "111";
            }
            public static String say(String msg) {
              return msg;
            }
          }
          package com.toolbox.lang;
          import static com.toolbox.lang.ClassWithStaticMember.say;
          import static com.toolbox.lang.ClassWithStaticMember.name;
          public class Test {
            public static void main(String[] args) {
              System.out.println(say());
              System.out.println(say(name));
            }
          }
          

          import同名的member
          意味著不同方法簽名的member都會import, e.g. say() and say(String msg)
          const #45 = Method      #46.#48;        //  com/toolbox/lang/ClassWithStaticMember.say:()Ljava/lang/String;
          const #46 = class       #47;    //  com/toolbox/lang/ClassWithStaticMember
          const #47 = Asciz       com/toolbox/lang/ClassWithStaticMember;
          const #48 = NameAndType #49:#38;//  say:()Ljava/lang/String;
          const #49 = Asciz       say;
          const #62 = Method      #46.#63;        //  com/toolbox/lang/ClassWithStaticMember.say:(Ljava/lang/String;)Ljava/lang/String;
          const #63 = NameAndType #49:#64;//  say:(Ljava/lang/String;)Ljava/lang/String;

          copy primitive type value
          意味著編譯后,Test class中static import的String, int 等是值的寫入class中,不會在去引用ClassWithStaticMember
             43:  ldc     #55; //String value
             45:  invokestatic    #57; //Method com/toolbox/lang/ClassWithStaticMember.say:(Ljava/lang/String;)Ljava/lang/String;
             48:  invokevirtual   #50; //Method java/io/PrintStream.println:(Ljava/lang/String;)V

          when to use it?
          Do it when frequent access to static members from one or two classes
          Not Do it when has naming conflict or complicated class body, otherwise, make you confuse with so many polluting namespace

          2, apply lanuage feature
          2.1 String contact
          String s = "a" + "b";
          compile into:
          const #15 = Asciz       ([Ljava/lang/String;)V;
          const #16 = String      #17;    //  ab
          if String constance + String constance
          直接編譯成結果寫入class
          else
          使用StringBuilder.append
          So always use "+" unless you need to use StringBuffer or other specific class
          3, inner class {{}}
            List<String> list = new ArrayList<String>() {{add("data1");add("data2");}};
          4, use PMD to find and remove duplicated code

          已有 0 人發表留言,猛擊->>這里<<-參與討論


          JavaEye推薦




          文章來源:http://sevenduan.javaeye.com/blog/504911
          posted @ 2009-10-31 14:49 sevenduan 閱讀(310) | 評論 (0)編輯 收藏

          按使用頻率排名:
          1,IDE
          個人首選aptana IDE,因為用慣了eclipse快捷鍵。
          根據個人喜好,可選intelJ,gvim
          2,debugger
          熟記debugger的快捷鍵是高效coding的關鍵之一。
          FF當屬firebug,IE除了IE8的debugger沒有一個好鳥。
          3,API doc
          熟練翻閱各種API電子書,HTML 和 jscript的電子書是必備的,根據需要常備YUI,mootools,jquery等。要知道,許多api的function并不是可以那么容易google得到的。
          e.g.string.replace(Regex, function)
          function f2c(s) {
          var test = /(\d+(\.\d*)?)F\b/g; //Initialize pattern.
          return(s.replace
          (test,
          function($0,$1,$2) {
          return((($1-32) * 5/9) + "C");
          }
          )
          );
          }

          4,小眾工具
          YSlow, Google page speed, httpwatch ==> performance tuning
          Jslint ==> coding convention
          YUI Compressor, Jawr => compress
          5,茶余飯后的消遣
          先看看yui,mootools,jquery,Prototype & script.aculo.us,ext的source code,
          然后回來refactor自己項目里成團的FML的js
          閑的蛋疼就去51js吹牛起哄

          已有 0 人發表留言,猛擊->>這里<<-參與討論


          JavaEye推薦




          文章來源:http://sevenduan.javaeye.com/blog/504691
          posted @ 2009-10-31 14:49 sevenduan 閱讀(184) | 評論 (0)編輯 收藏

          傳統的client side js MVC 結構:
          Model:
          json object - mapping with PO from server side
          View:
          HTML + CSS
          Controller:
          Page object - 負責頁面初始化邏輯(驗證、事件綁定、json數據渲染到DOM),提交時,獲取DOM的數據組裝json。

          Concrete Javascript Pattern :
          把status 和 behavior 直接綁定到DOM element上。

          jquery concrete framework:
          http://github.com/hafriedlander/jquery.concrete
          http://github.com/nkallen/effen/
          前者42k,后者0.8k。
          與直接在DOM element object上添加status or behavior相比,框架的好處是可以批量添加。

          用例:
          對于autocomplete組件,formatted data = data name; saved data= data id;
          之前有一個實現是為了save data id,多加了一個 input hidden.
          如果是concrete js pattern, 可以在這個input element 上直接保存數據。
          effen + jquery.autocomplete test:
          $('body').append('<div id="dom_test"><input id="month"/></div>');
                      var monthInput = $("#month");
                      monthInput.fn({
                          dataPair: function(){
                              if (arguments.length == 0) {
                                  return this._data;
                              }
                              else {
                                  this._data = arguments[0];
                              }
                          },
                          _data: []
                      });
                      monthInput.autocomplete(months, {
                          minChars: 0,
                          max: 12,
                          autoFill: true,
                          mustMatch: true,
                          matchContains: false,
                          scrollHeight: 220,
                          formatItem: function(data, i, total){
                              if (data[0] == months[new Date().getMonth()]) 
                                  return false;
                              return data[0].substring(0, 3);
                          },
                          formatResult: function(row){
                              return row[1];
                          }
                      });
                      monthInput.result(function(event, data, formatted){
                          var _data = data[0].split("|");
                          monthInput.fn("dataPair", _data);
                          console.dir(monthInput.fn("dataPair"));
                      });
          



          已有 0 人發表留言,猛擊->>這里<<-參與討論


          JavaEye推薦




          文章來源:http://sevenduan.javaeye.com/blog/503946
          posted @ 2009-10-31 14:49 sevenduan 閱讀(132) | 評論 (0)編輯 收藏

          solution:
          所有的$(html)用法,給html的內容加上關閉標簽,否則IE不支持
          $('<li class="describe">')
          //refactor into
          $('<li class="describe"/>')
          //or
          $('<li class="describe"></li>')

          -------------------------
          screw.unit
          是一個很實用的BDD框架。
          除了TDD的時候很方便,在學習任何新框架或者javascript語法的時候,都可以把測試分門別類的組織起來,就是一個生動的文檔。





          文章來源:http://sevenduan.javaeye.com/blog/503814
          posted @ 2009-10-31 14:49 sevenduan 閱讀(161) | 評論 (0)編輯 收藏

          僅列出標題
          共4頁: 上一頁 1 2 3 4 
          主站蜘蛛池模板: 镇原县| 小金县| 凤凰县| 商丘市| 土默特左旗| 太原市| 南华县| 邮箱| 寿阳县| 太仆寺旗| 贵溪市| 连城县| 阜宁县| 香港 | 彝良县| 贵定县| 六盘水市| 定安县| 临安市| 房产| 红河县| 张家港市| 渭南市| 崇义县| 英吉沙县| 晋江市| 清水县| 夏邑县| 渭南市| 永吉县| 增城市| 阜新| 松原市| 天门市| 贵定县| 塔城市| 汪清县| 南京市| 瑞安市| 乌兰察布市| 青浦区|