一女孩写的经典“代码”的重构

原创 2006年05月27日 18:21:00

下面是网络上流传的一段代码:

 result love(boy, girl)
{
    if( boy.有房() and boy.有车() )
    {
        boy.set(nothing);
        return girl.嫁给(boy);
    }
    if( girl.愿意等() )
    {
    while(!(boy.赚钱 > 100,000 and girl.感情 > 8 ) )
    {
        for( day=1; day <=365; day++)
        {
            if( day == 情人节 )
            if( boy.givegirl(玫瑰) )
                girl.感情++;
            else
                girl.感情--;  
            if( day == girl.生日 )
            if( boy.givegirl(玫瑰) )
            {
                girl.感情++;
            else
                girl.感情--;
                boy.拼命赚钱();
            }
        }
        if( boy.有房() and boy.有车() )
        {
            boy.set(nothing);
            return girl.嫁给(boy);
        }
        年龄++;
        girl.感情--;
    }
    return girl.goto( another_boy);
}

这段代码可以写得更紧凑些:

1. girl()和boy()结婚的条件重复了两次,应该用单独的函数包装。
2. 在365天的循环中,对待两个特殊日子的处理逻辑完全相同,应该合并,将对日子的处理的语句写在一起。
3. boy.拼命赚钱()是boy在单独线程里面处理的,girl只是在检查boy线程工作的状态,所以boy.拼命赚钱()语句不应该出现,而应该换线程等待语句,比如sleep(1天);
4. 最后一个return 语句有很大的语病,正确的逻辑是选择一个新的boy,然后重新递归执行:return love(selectAnotherBoy());

修改后如下:

function marry(boy, girl)
{
 boy.set(nothing);
 return girl.嫁给(boy);
}

function canMarry(boy, girl)
{
  return boy.有房() and boy.有车();
}

function love(boy, girl)
{
 if (canMarry(boy, girl) {
  marry(boy, girl);
  return;
 }

 if (girl.愿意等()) {
  for (; !(boy.年收入 > 100,000 && girl.感情 > 8); girl.感情 --) {
   for (day=1; day <=365; day++) {
    if (day == 情人节 || day == girl.生日) {
     if (boy.givegirl(玫瑰))
      girl.感情++;
     else
      girl.感情--; 
    }
    sleep(1天);
   }

   if (canMarry(boy, girl) {
    marry(boy, girl);
    return;
   }
  }
 }
 love(getAnotherBoy(), girl);
}

相关文章推荐

写代码的小女孩

写代码的小女孩  童话故事  不知道大家有没有看过    天冷极了,下着雪,又快黑了。这是一年的最后一天——大年夜。在这又冷又黑的晚上,一个乖巧的小女孩在机房里调试程序。她从家里出来的时候还穿着一件外...

akari.c(小女孩)降采样代码

  • 2014年01月05日 19:04
  • 3KB
  • 下载

码代码的小女孩(来自noip贴吧)

天冷极了,下着雪,又快黑了。这是NOIP的前夜。在这又冷又黑的晚上,一个衣衫破烂的小女孩在机房敲着代码。她从班里逃出来的时候还拿着一本算导,但是有什么用呢?那是一本很破旧的书——那么大,一向是她妈妈垫...

女孩子写的管用的追女孩的方法_[转载]

很久没写东西了,无意在Q好友的空间了看到一篇挺有意思的文章,所以就转过来给大家分享一下了!        我是女生,看到有的男生想追自己喜欢的女孩子又不敢追,还想人家...
  • hotdust
  • hotdust
  • 2011年12月17日 16:29
  • 479

徐州一姑娘写的(女孩看了是自省,男孩看了是激励)

别嫌文章长。看完你肯定想看第二遍。 (女孩看了是自省,男孩看了是激励!) 最经典的话: 要是我的男人真的就没那本事,我就忍了,弄不好他有了本事,我就没了他呢。他没逼我长成曼玉嘉欣,我...

Eclipse开发经典教程:代码重构

重构是对软件内部结构的一种调整,目的是在不改变软件行为的前提下,提高其可理解性,降低其修改成本。开发人员可以使用一系列重构准则,在不改变软件行为的前提下,调整软件的结构。     有很多种原因,开发人...
  • y2j855
  • y2j855
  • 2011年07月07日 15:27
  • 193

Eclipse开发经典教程:代码重构(五)

类内部重构 类内部重构有如下一些: 1. Inline “Inline”重构能用函数的内容替换掉函数的引用。首先选择函数的引用,在Refactor菜单中选择“Inline”打开“Inline”对话框,...
  • y2j855
  • y2j855
  • 2011年07月07日 15:44
  • 544

Java经典书籍推荐《重构-改善既有代码的设计》

Java经典书籍推荐《重构-改善既有代码的设计》 《Refactoring: Improving the Designof Existing Code》 Karlon 29 Jun 2012  ...

Eclipse开发经典教程:代码重构(四)

类级别重构 类级别重构有如下一些:1. Push Down “Push Down”重构功能是把父类的方法和属性移动到所有的子类中,父类的方法可以选择性的保留抽象方法。首先选择父类,右键选择Refact...
  • y2j855
  • y2j855
  • 2011年07月07日 15:38
  • 275

Eclipse开发经典教程:代码重构(二)

使用Eclipse进行代码重构     重构是软件开发过程中保证代码质量非常重要的手段,而手动进行重构代码的话,很容易引入一些低级错误(例如,单词拼写错误),从而导致浪费大量不必要的时间。Eclips...
  • y2j855
  • y2j855
  • 2011年07月07日 15:30
  • 327
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一女孩写的经典“代码”的重构
举报原因:
原因补充:

(最多只允许输入30个字)