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

原创 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);
}

一女孩写的经典“代码”,程序员该如何应对?

这是一个网上流传甚广的搞笑程序代码。作为程序员的我们,号称是高收入群体,然后事实究竟是不是大家都如此丰衣足食呢?经常贪黑与计算机相伴,我们的另一半,你找到了么?遇到下面这样一个看似玩笑,而其实是非常现...
  • king201210
  • king201210
  • 2013年08月28日 14:32
  • 180

写代码的女孩

我对Paul Graham在微博中的言论很反感,因为他最近总发表一些我敢肯定是非常错误观点。但是,他把女性从女创始人、女程序员、女黑客中解放出来,确是做了一件大好事。因为女性是不是应该从事计算机行业是...
  • u012884280
  • u012884280
  • 2014年01月14日 10:10
  • 839

常用的代码重构方法

一.提取子函数 说白了就是一个大函数里,可以根据不同功能分成几个小函数,因为说不定,其他函数也可能会用到其中的函数 二.把大家都要用的方法放到父类中     所有对象都要执行同一个方法,那就把这个方法...
  • u011889786
  • u011889786
  • 2016年07月09日 10:13
  • 4094

代码重构意义和方法

摘要:很多人认为重构浪费时间,影响项目进度,其实重构不仅可以让我们的代码更加强壮而且还可以加快我们的项目进度。就和我们盖一个高楼大厦一样,我们的架构和地基越好,我们的楼房会越坚固和牢靠。 一、什么是...
  • jinglijun
  • jinglijun
  • 2014年11月20日 13:31
  • 5898

为什么要重构&如何实施代码重构?

代码重构简介:(英语:Code refactoring)重构就是在不改变软件系统外部行为的前提下,改善它的内部结构。 为什么要重构(Refactoring)??? 为什么要这么做?投入精力...
  • ztx643702008
  • ztx643702008
  • 2016年08月29日 22:01
  • 2102

代码优化重构(很经典)

1、 清晰地表达意图 2、 一个方法只做一件事情 3、 同一个方法体内,保持相同的抽象层次 4、 不要重复自己(避免手动的复制与粘贴代码) 5、 减少“语法噪音” 6、 ...
  • dahaizhiliang
  • dahaizhiliang
  • 2014年04月21日 18:25
  • 5375

重构 改善既有代码的设计——重构原则

1.何谓重构? 答: A.重构(名词意义):对软件内部结构的调整,目的是在不改变软件可观察行为的前提下,提高其理解性,降低其修改成本; B.重构(动词意义):使用一系列重构手法,在不改变软件可观...
  • zhongshujunqia
  • zhongshujunqia
  • 2016年09月08日 11:52
  • 1149

java 代码重构

几天前的一次上线,脑残手抖不小心写了bug,虽然组里的老大没有说什么,但心里面很是难过。同事说我之所以写虫子是因为我讨厌if/else,这个习惯不好。的确,if/else可以帮助我们很方便的写出流程控...
  • zero_295813128
  • zero_295813128
  • 2016年04月14日 14:46
  • 4957

代码重构之路

来到了新的公司已经半年之久了,准确来说应该是163天,整个应用无论是层级还是架构,都已经被我全部翻新了,这一路走过来,有艰辛,有郁闷,当然还有快乐和成就感。 在此总结一下这半年的工作。也算是有所收获...
  • u010479969
  • u010479969
  • 2016年07月28日 15:21
  • 520

重构实践,优化技能释放代码

开始的话 最近都在忙课程设计和考试,但是计划是学习人工智能和重构,难得挤出时间看这本好书--.看了之后受益匪浅,因为 终于知道了为什么觉得自己的代码和高手写的代码还是有一大截差距,现在终于知道,好的代...
  • qq_22348545
  • qq_22348545
  • 2015年12月14日 22:14
  • 260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一女孩写的经典“代码”的重构
举报原因:
原因补充:

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