创建临时变量以增强可读性

eco*_*utu 7 variables optimization

我想知道为在小范围内多次访问的值创建临时变量是否存在任何明显的缺点.

例如:

filep->waypt[rp->leg[j]].ID
Run Code Online (Sandbox Code Playgroud)

要么

(*(filep->route + filep->nroutes - 1))->number
Run Code Online (Sandbox Code Playgroud)

这些是最近一个项目的例子,我强迫自己避免几乎任何变量引用的简化,以便用C指针提高我的技能(这很痛苦).然而,习惯似乎坚持.我发现我尝试引入变量以简化代码(可读性和打字量)越多,就越难以记住每个新变量引用的内容.

我只是在教育环境中审查过我的代码,我想知道其他人更容易消化的内容以及性能权衡(如果有的话).

什么时候分配一个值的内存地址需要几个算术运算来计算它自己的变量start会导致性能问题?如果在循环中完成一次会有所作为吗?一次嵌套循环怎么样?如何在循环中为其自己的变量赋值,但是在内循环中访问它?

这会如何改变解释语言?用PHP说(请原谅语法错误,我是PHP的新手):

$employees[$i][$phone]['Home']['number'];
Run Code Online (Sandbox Code Playgroud)

VS

$home = $employees[$i][$phone]['Home']['number'];
Run Code Online (Sandbox Code Playgroud)

最后,如果它不是太主观(代码可读性不应该!),这被认为是编写可读代码的最佳实践?我编写尽可能自我记录的代码,但如果变量开始变得过于人为并被多次引用,我将为它们分配自己的变量.然而,这对我有用的原因可能是我已经习惯了自己的风格.

pax*_*blo 9

任何体面的编译器都有可能检测到常见的子表达式并为您优化它们.

但是,如果它提高了我的代码的可读性,我仍然会选择一个临时变量,尽管它引入了额外的存储空间(尽管很小).

我认为代码的可维护性比微小的存储更重要.通过(设计)的例子,我可能会取代很多:

item[last_item-1].id = 14860;
item[last_item-1].name.first = "pax";
item[last_item-1].name.last = "diablo";
Run Code Online (Sandbox Code Playgroud)

打电话:

tItem lastItem = &(item[last_item-1]);
lastItem->id = 14860;
: : :
// and so on.
Run Code Online (Sandbox Code Playgroud)

至于解释型语言,我对此的了解较少.我对如何优化汇编代码知之甚多(虽然远不及编写编译器的半神半导体,这就是我通常把它留给他们的原因).我对大多数解释器中运行的虚拟机知之甚少.

但我仍然会编写可读性代码.我不希望$employees[$i][$phone]['Home']['number']在代码中看到一大堆片段.我宁愿补充一下

$homePhone = $employees[$i][$phone]['Home']['number'];
Run Code Online (Sandbox Code Playgroud)

在某处,$homePhone从那一点开始使用.

  • +1表示“我认为代码的可维护性比存储方面的损失要重要得多”。 (2认同)