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);
}
}
一个牛人给她的回复:
private object love(object boy,object girl)
{
//假定已对变量boy和gril赋予了人类的各种属性
switch(gril.Condition)
{
case gril.HaveMuchMoney://如果女孩很有钱
{
boy.love++;
boy.GiveRoseToGirl++;
girl.Money--;
if(girl.Money<1000000)
{
boy.love--;
boy.GiveRoseToGirl--;
}
break;
}
case gril.HaveBigDroit://如果女孩有至高的权利
{
boy.love++;
boy.GiveRoseToGirl++;
boy.Money++;
if(girl.Droit<=0)//一旦女孩失去权利甚至限于挫折之中
{
boy.love<=0;
boy.GiveRoseToGirl=0;
}
break;
}
case gril.VeryBeautiful://如果女孩很漂亮
{
boy.love++;
boy.GiveRoseToGirl>=999;
boy.Money--;
if(girl.OLd>=30)//女孩的年龄大了
{
boy.love--;
boy.loveOtherBeautifulGirl
boy.GiveRoseToGirl=0;
}
break;
}
case gril.VertCommonly://如果女孩很普通
{
gril.love++;
gril.GiveRoseToBoy++;
boy.love++;
boy.GiveRoseToGirl<=1;
if(girl.old>=30)
{
boy.love--;
boy.GiveRoseToOtherGirl=0;
gril.love++;
gril.GiveMoneyToBoy++;
boy.love++;
}
break;
}
}
}
这段代码可以写得更紧凑些:
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);
}