gpt4 book ai didi

coding-style - 使用 return 语句效果很好!

转载 作者:行者123 更新时间:2023-12-04 04:01:34 25 4
gpt4 key购买 nike

当我创建带有返回值的方法时,我通常会尝试进行设置,这样就不会出现调用方法时必须返回一些默认值的情况。当我开始时,我经常会编写做某事的方法,然后返回它们所做的事情,或者如果它们没有做任何事情,则返回 null。但是我讨厌在我的代码中到处都是难看的 if(!null) 语句,

我正在阅读我很久以前读过的 ruby​​ 重新指南,作者是务实的程序员,我注意到他们经常返回 self(ruby 的 this ) 当他们通常不会返回任何东西时。他们说,这是为了能够链接方法调用,如本例中使用的 setter 返回他们设置其属性的对象。

tree.setColor(green).setDecor(gaudy).setPractical(false)

起初我觉得这种东西很有吸引力。有几次我很高兴能够链接方法调用,比如 Player.getHand().getSize() 但这有点不同,因为方法调用的对象发生了变化从一步到一步。

Stack Overflow 如何看待返回值?当您想到返回值时,是否有任何模式或习语会温暖地浮现在您的脑海中?有什么好方法可以避免挫败感并增加美感?

最佳答案

在我看来,您应该考虑三种返回情况:

对象属性操作

首先是对象属性的操作。您在此处描述的模式在操作对象时经常使用。一个非常典型的场景是和工厂一起使用。考虑这个假设的创建调用:

// When the object has manipulative methods:
Pizza p = PizzaFactory().create().addAnchovies().addTomatoes();
// When the factory has manipulative methods working on the
// object, IMHO more elegant from a semantic point of view:
Pizza p = PizzaFactory().create().addAnchovies().addTomatoes().getPizza();

它允许快速掌握到底创建了什么或对象是如何操作的,因为这些方法形成了一个人类可读的表达式。这绝对不错,但不要过度使用。根据经验,这可能会与您也可以将其返回值声明为 void 的方法一起使用。

评估对象属性

第二个可能是方法对对象求值时。例如,考虑 car.getCurrentSpeed() 方法,它可以解释为向对象发送消息,询问当前速度并返回该消息。它只会返回值,不会太复杂。 :)

让对象做这个或那个

第三种情况可能是当一个方法执行一个操作时,返回某种值表明调用者的意图得到了多好的实现——但是设计这样一个方法可能很困难:

int new_gear = 20;
if (car.gears.changeGear(new_gear)) // does that mean success or fail?

这是您可以看到设计方法的难点。它应该在成功或失败时返回 0 吗?如果无法设置档位 -1 怎么样,因为汽车只有 5 个档位?这是否意味着当前档位现在也为 -1?该方法可以返回它更改为的齿轮,这意味着您必须将提供给该方法的参数与返回代码进行比较。那行得通。另一方面,您可以简单地为失败返回 true 或 false,或者为失败返回 false 或 true。可以通过估计您是否期望这些方法调用会失败或成功来决定使用哪一个。

以我的愚见,有一种方法可以更好地表达此类返回值的语义,即为它们提供语义描述。 future 与您的对象交互的开发人员会喜欢您,因为您不必为您的方法查找注释或文档:

class GearSystem {
// (...)
public:
enum GearChangeResult
{ GearChangeSuccess, NonExistingGear, MechanicalGearProblem };

GearChangeResult changeGear (int gear);
};

这样一来,对于查看您的代码的任何程序员来说,返回值的含义就变得非常明显(考虑:if (gears.changeGear(20) == GearSystem::GearChangeSuccess) - 很多比上面的例子更清楚这意味着什么)

反模式:失败作为返回码。

返回值的第四种可能性我实际上省略了,因为在我看来它不是:当你的程序出现错误时,比如逻辑错误或需要处理的失败 - 理论上你可以返回一个表明如此的值。但如今,这种做法已不再(或不应如此)频繁发生,因为为此也有异常(exception)。

关于coding-style - 使用 return 语句效果很好!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/393675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com