七段

无论怎样,请让我先感谢一下国家。

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 阅读(300) | 评论 (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 阅读(166) | 评论 (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 阅读(114) | 评论 (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 阅读(149) | 评论 (0)编辑 收藏

仅列出标题
共4页: 上一页 1 2 3 4