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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值