我有时会使用临时变量来缩短标识符:
private function doSomething() {
$db = $this->currentDatabase;
$db->callMethod1();
$db->callMethod2();
$db->callMethod3();
$db->...
}
虽然这是一个PHP示例,但我一般都会问:
这是不好的做法吗?有任何缺点吗?
答案 0 :(得分:15)
这个例子非常好,因为你在函数/方法中使用它。
变量将在方法/函数结束后立即取消设置 - 因此没有太多的内存泄漏或什么。
同样通过这样做,你“实施”干燥 - 不要重复自己。
为什么在写$this->currentDatabase
时写下这么多$db
。如果您必须将$this->currentDatabase
更改为其他值,该怎么办?
答案 1 :(得分:6)
实际上,你并没有试图避免输入(否则,你会在编辑器中使用完成机制),但你只是让你的函数更具可读性(通过使用“缩写”)这是一件好事。
当您开始这样做以避免打字(并牺牲可读性)时会出现缺点
答案 2 :(得分:3)
这取决于$ this-> currentDatabase的合约。在任何方法调用之后,它可以随时更改吗?如果它改变了,你是否应继续使用你在第一次数据库调用时所做的对象,或者你应该总是使用当前值?这决定了你必须总是使用$ this-> currentDatabase,或者必须在使用之前始终将它存储在变量中。
因此,严格来说,这根本不是一个风格问题。
但是,假设在诸如此类的函数调用期间从不更改成员,则没有任何区别。我想将它存储在一个变量中稍微好一点,因为它更容易阅读并避免每次操作时对象的成员访问。如果编译好,编译器可能会对其进行优化,但在许多语言中,这种优化非常困难 - 访问局部变量几乎总是比访问对象成员更快。
答案 3 :(得分:2)
一般来说:
所以我会说:不,这不是一种不好的做法。
答案 4 :(得分:2)
我似乎记得史蒂夫麦康奈尔建议不要在“代码完成”中使用临时变量。冒着异端邪说的风险,我不得不反对。我更喜欢引入的附加可读性。我也发现自己添加它们以帮助单步调试,然后没有理由删除它们。
答案 5 :(得分:1)
如果您使用原始变量而不是跳过第一个取消引用($this->currentDatabase
),我认为不会有性能损失。
但是,由于使用缩写可以大大提高可读性,请选择它!
当然,这也取决于您团队的编码惯例。
答案 6 :(得分:0)
如果你这么做,那绝对没问题。只要您只在少量代码中使用这些变量中的一些,并且在小函数内部,我认为这是可以的。
如果你有很多这些变量,并且它们在同一个函数中被命名为i,j,l和f,那么代码的可理解性就会受到影响。如果是这种情况,我宁愿输入更多,然后有不可理解的代码。这是良好的IDE具有自动代码完成的一个原因。
答案 7 :(得分:0)
不,我想,这没关系。通常表现如果不像清洁可读代码那么重要。
此外,通过避免额外的解除引用,您可以在内存中对内存进行小额分配,以便更快地进行方法调用。
答案 8 :(得分:0)
吸气剂将解决您的问题:
private function doSomething() {
getDB()->callMethod1();
getDB()->callMethod2();
getDB()->callMethod3();
}
使用纯净代码N。