<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    七段

    無(wú)論怎樣,請(qǐng)讓我先感謝一下國(guó)家。

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      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都會(huì)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 等是值的寫(xiě)入class中,不會(huì)在去引用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
    直接編譯成結(jié)果寫(xiě)入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 人發(fā)表留言,猛擊->>這里<<-參與討論


    JavaEye推薦




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

    按使用頻率排名:
    1,IDE
    個(gè)人首選aptana IDE,因?yàn)橛脩T了eclipse快捷鍵。
    根據(jù)個(gè)人喜好,可選intelJ,gvim
    2,debugger
    熟記debugger的快捷鍵是高效coding的關(guān)鍵之一。
    FF當(dāng)屬firebug,IE除了IE8的debugger沒(méi)有一個(gè)好鳥(niǎo)。
    3,API doc
    熟練翻閱各種API電子書(shū),HTML 和 jscript的電子書(shū)是必備的,根據(jù)需要常備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,
    然后回來(lái)refactor自己項(xiàng)目里成團(tuán)的FML的js
    閑的蛋疼就去51js吹牛起哄

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


    JavaEye推薦




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

    傳統(tǒng)的client side js MVC 結(jié)構(gòu):
    Model:
    json object - mapping with PO from server side
    View:
    HTML + CSS
    Controller:
    Page object - 負(fù)責(zé)頁(yè)面初始化邏輯(驗(yàn)證、事件綁定、json數(shù)據(jù)渲染到DOM),提交時(shí),獲取DOM的數(shù)據(jù)組裝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相比,框架的好處是可以批量添加。

    用例:
    對(duì)于autocomplete組件,formatted data = data name; saved data= data id;
    之前有一個(gè)實(shí)現(xiàn)是為了save data id,多加了一個(gè) input hidden.
    如果是concrete js pattern, 可以在這個(gè)input element 上直接保存數(shù)據(jù)。
    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 人發(fā)表留言,猛擊->>這里<<-參與討論


    JavaEye推薦




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

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

    -------------------------
    screw.unit
    是一個(gè)很實(shí)用的BDD框架。
    除了TDD的時(shí)候很方便,在學(xué)習(xí)任何新框架或者javascript語(yǔ)法的時(shí)候,都可以把測(cè)試分門(mén)別類(lèi)的組織起來(lái),就是一個(gè)生動(dòng)的文檔。





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

    僅列出標(biāo)題
    共4頁(yè): 上一頁(yè) 1 2 3 4 
    主站蜘蛛池模板: 18级成人毛片免费观看| 亚洲第一综合天堂另类专| 人与动性xxxxx免费| 在线观看免费亚洲| 亚洲中文字幕无码av| 扒开双腿猛进入爽爽免费视频| 2020久久精品亚洲热综合一本| 免费电影在线观看网站| 亚洲人成人77777在线播放| 亚洲av无码国产精品色午夜字幕| 无遮挡免费一区二区三区| 亚洲女同成人AⅤ人片在线观看| 曰批全过程免费视频观看免费软件| 亚洲?v女人的天堂在线观看| 人人鲁免费播放视频人人香蕉| 亚洲国产精品无码久久久蜜芽| 午夜精品射精入后重之免费观看| 久久精品国产亚洲av水果派| 2021久久精品免费观看| 亚洲乱码日产精品一二三| 国产v片免费播放| 中文永久免费观看网站| 国产AV无码专区亚洲Av| 蜜臀AV免费一区二区三区| 亚洲日韩精品无码专区| 一本色道久久88亚洲综合| 成人A片产无码免费视频在线观看| 亚洲AV天天做在线观看| 猫咪社区免费资源在线观看 | 日韩免费一级毛片| 特级av毛片免费观看| 亚洲va无码手机在线电影| 黄瓜视频影院在线观看免费| 亚洲欧美在线x视频| 国产AV无码专区亚洲Av| 成熟女人牲交片免费观看视频| 一级毛片免费不卡| 亚洲第一区视频在线观看| 免费v片视频在线观看视频| 久久午夜夜伦鲁鲁片无码免费| 中文字幕亚洲综合久久综合 |