`
庄表伟
  • 浏览: 1150861 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

敲响OO时代的丧钟——一种新的语言(4)

阅读更多
二、方法/函数定义
 
定义一个函数的办法其实很简单,几乎和java的函数定义没有什么两样——如果你不使用DJ的高级特性的话。
 
User getUser(UserList ul,String name){
    for(int i=0;i<ul.size();i++){
        User item=ul.item(i);
        if(item.name.equals(name)){
            return item;
        }
    }
    return null;
}
 
给getUser函数一个用户列表和一个用户名,然后getUser就可以找出第一个名字与name相同的用户,并返回。
 
这样有意义吗?这不就是java代码吗?
 
是啊,这个例子确实没什么意思,仅仅是为了表明,DJ的函数定义,可以与java没什么区别而已。
 
void addUser(UserList ul,User u){
    ul.add(u);
}
 
有人会说了,这就更没有意思了!且慢,我再给这个函数加点内容:
 
void addUser(UserList ul,User u){
    ul.add(u);
check:
    old.ul.size()+1==new.ul.size();
    old.uequals(new.u);
    new.ul.item(new.ul.size()).equals(old.u);
}
 
这样就描述三个check条件:ul的size+1;u的内容不被改变;u被加在ul的最后一个位置。
这三条check条件,都必须成立,这个addUser才算是正确。
 
这就有点DBC的意思了吧,且慢,我再给这个函数加点内容:
void addUser(UserList ul,User u){
    ul.add(u);
check:
    old.ul.size()+1==new.ul.size();
    old.uequals(new.u);
    new.ul.item(new.ul.size()).equals(old.u);
test:
    void test1(){
        User u1=new User(1,"a");
        User u2=new User(2,"b");
        UserList ul1=new UserList();
        UserList ul2=new UserList();
        ul1.add(u1);
        ul1.add(u2);
        ul2.add(u1);
        ul2.add(u2);
        Useru3=new User(3,"c");
        ul1.add(u3);
        addUser(ul2,u3);
        assert(ul1.equals(ul2));
    }
}
 
理解我这样做的意图的同学请举手!
 
(未完待续)
分享到:
评论
1 楼 nisen 2007-07-02  
把函数,环境约束和示例(测试)放在一起。感觉这样更好。直接。

相关推荐

Global site tag (gtag.js) - Google Analytics