我有点惊呆了大量的反应的问题,指出开发人员更关心的产生编字节约的含义的代码。我倾向于挑剔约后缀/prefix增加,因为我倾向于挑剔关于使用布尔的一所列举的类型有两个价值观,以及有关的正常功能的命名,以及...

所以问题更多的是rethorical民意调查:当是一个允许无视的语义是什么写?那里的边界线?

  • 操作员++(后缀/prefix)
  • string.empty()vs.string==""
  • 矢量。empty()vs.矢量。大小()==0
  • 枚举{上,关}对布尔上=true;关=false
  • ...

名字。

编辑

我不是故意要问题是关于需要(微型)-优化。相反,我想观点如何,你应该 意识到 什么你在写,并在类似的语句"但是,它编制一个双字,无论如何,那么,为什么我应该使它枚举?" (这是一个极端的情况下...).

有帮助吗?

解决方案

我已经写了一个 很多 代码在我的职业生涯。肯定不是如许多人在这里,但许多代码尽管如此。在这段时间内,我学到一件事,就是证明是正确的时间和时间再次:当你草率的,当你忽略的细节, 缺陷蠕变。

缺陷花费时间和金钱来修复。你可以花时间写的代码清洁和清楚的最前面,当它的便宜这样做,或者可以花费大量的时间和金钱以后追逐一个缺陷在代码,你可能不记得所有那很好因为你打了一起急或因为它不符合本编码标准。最终的结果是, 你在浪费时间和金钱。 另外,你在浪费时间和金钱,你没必要浪费以开始,因为它可能已阻止通过一个小小的前期投资。

我从来没有感到遗憾的是细致的方式有关,我写代码。它从来没有回来困扰我的。被草率已经总是回来困扰我的。

其他提示

定义"确定"。它是好的,如果它适用于初始交付的日期,但每次需要做出改变,它需要一个额外的三星期的古老的代码?

这就是你的回答:只要你能明白的代码和它不会伤害你的能力去维护它。

当你开始担心深奥的东西,没有任何效果的最后结果,我认为这是走得太远。讨论是否使用的三元的操作者或编写明确的,如果声明是良好的那些日子你什么都没有做但是坐下来,把你的双脚,sip啤酒/wine/苏打水和讨论的事项"伟大的后果":)

但是,创造一枚举,对于布尔只是简单的错误。

取决于你的成功

这里有几尺寸人们喜欢讨论,并经常将.真的,答案是它依赖。它是什么您真正的价值?

  • 字符数
  • 数量的行动创造了
  • 运行时间
  • 可携带性
  • 维护性
  • 清楚的
  • 聪明的
  • 稳定(自由的错误?)
  • 可扩展性

我一直瞄准高了东西的第一个,就像的清晰度。损失的清晰度支付在人类周期,其中有总是缺乏的。人们很少关心原钟的时间,人们说他们几乎都是优化过早。

如果它有助于你,我想我们取得进展,通过了堆,照顾更多关于语义和工作得到完成,而不是奴隶位和数字。然而,这不是一个借口忘记的基础,并记住如何定义位实施。你不想抓到你的裤子在那些罕见的机会在哪里的速度开始论及《公约》出去窗口。

"当是一个允许无视的语义是什么写?那里的边界线?"

我觉得一个合理的问题是:"时 应该 一个忽视的语义是什么写?"

因为我看程作为人类活动,我会说唯一的时刻之一 应该 忽视这一语义学的一项声明是当系统自身的力量你-当有些不可理解的语句是的 的方式来做一些事情。这样的声明是很好的文件。

边境当你面对的一次编写,阅读-不会的代码。只有那么它最终不管你是什么做(在这种情况),因为你将永远不会再次使用它。不幸的是,这并没有解决的间接反馈的练习的东西,你不想重复。

边境线是副作用。

如果一封功能做一切你想要0意外副作用和代码是可读的,也就是所有事项。如果你可预测的外部用户和任何"奇怪"的功能是保持国内,这是所有事项。

它改变稍如果你加上优化,但是因为你永远不应该过早地化,这是它在哪里结束。

微优化是毫无意义的99%的时间。例如,如果你编译实习生的所有","单一实例的不管怎么说,你是不是增加能在任何方式采用字符串。空。没有任何可衡量的效果通常是最好的你可以希望,我看见"优化"降低性能,由于编译器做一个更好的工作,并优化干扰。

大多数代码,不需要进行优化。确定需要发生只能做诊断代码后运行,甚至随后的大部分时间它是通过优化算法,不是微型最优化。

我觉得这几天大多数人同意,假定它能够正常工作,可读性是最重要的考虑。也有例外,当然-有些应用程序必须尽可能快地运行,以及一些应用程序可以 从来没有 被允许崩溃,但是一般来说它是可读性。

观察的例子,你已经提供了-- 如下:

operator++ (后缀/prefix)

string.empty()string == ""

似乎不是很好的例子,因为他们比较操作的不同在 functionality.因此,一个更好的 无视他们的语义区别。

与此相反,以下例子:

vector.empty()vector.size() == 0

enum温{ on, off}对 boolean on=true; off=false

是完全合理的。

vector.empty() 最好如果其使用仅仅是确定如果矢量是空的。在冠冕堂皇的风险居高临下的(这是我做的 打算):这归结为常识。为什么要问的矢量的大小如果你只想要知道,如果它是空的?这就是喜欢问别人有多少钱他们有自己的钱包的时候你只想知道如果他们有足够的现金,以通过一个焦炭。

作为对 enum温{ on, off}对 boolean on=true; off=false, ,问问自己这样的:怎么可能是认为你可能会增加另一个值枚举,在未来?它似乎是合理的,一个可能会想 enum温{on, off, indeterminate}`(或一些变化),这样的回答可能是肯定的。否则,一个简单的布尔就足够了。

这使我想到的核心你的问题:这似乎是,如果有某种确定性/算方法来决定一种或另一种方式在这样的问题,或者它们的相关性?我的回答是,直到有一天, 图灵机的 能够通过 图灵试验, 我会说不。这就是为什么人需要工程师的软件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top