Language agnostic 谁在乎。。。只要结果还可以?

Language agnostic 谁在乎。。。只要结果还可以?,language-agnostic,semantics,Language Agnostic,Semantics,我有点惊讶于许多问题的反应,这些问题指出,开发人员更关心最终编译的字节,而不是他们代码的含义。我倾向于吹毛求疵关于后缀/前缀增量,就像我倾向于吹毛求疵关于对具有两个值的枚举类型使用布尔值,关于正确的函数命名,以及 因此,问题更像是一个重复的民意测验:什么时候才允许人们忽视自己所写内容的语义?边界线在哪里 运算符++(后缀/前缀) string.empty()与string==“” vector.empty()与vector.size()=0 枚举{on,off}与布尔on=true;关=假

我有点惊讶于许多问题的反应,这些问题指出,开发人员更关心最终编译的字节,而不是他们代码的含义。我倾向于吹毛求疵关于后缀/前缀增量,就像我倾向于吹毛求疵关于对具有两个值的枚举类型使用布尔值,关于正确的函数命名,以及

因此,问题更像是一个重复的民意测验:什么时候才允许人们忽视自己所写内容的语义?边界线在哪里

  • 运算符++(后缀/前缀)
  • string.empty()与string==“”
  • vector.empty()与vector.size()=0
  • 枚举{on,off}与布尔on=true;关=假
随便说说

编辑-


我不是想质疑(微观)优化的必要性。更确切地说,我想要的是关于你对你所写内容的了解程度的意见,以及诸如“但它编译成dword,无论如何,那么为什么我要将其作为枚举?”(这是一个极端情况…。

边界线是副作用

如果一个封装的函数做了你想做的一切,没有意外的副作用,并且代码是可读的,那么这就是最重要的。如果您对外部用户来说是可预测的,并且任何“奇怪”的功能都由内部控制,那么这就是最重要的

如果您添加优化,它会略有变化,但由于您永远不应该过早地进行优化,因此它就到此结束。

定义“确定”。如果它在最初的交付日期起作用,可以吗?但是每次您需要进行更改时,都需要额外的三周时间来找出旧代码


这就是你的答案:只要你能理解代码,并且不影响你维护代码的能力。

我认为现在大多数人都同意,假设代码工作正常,可读性是最重要的考虑因素。当然,也有例外——有些应用程序必须尽可能快地运行,有些应用程序可以永远不被允许崩溃,但一般来说它是可读的。

边界是当你处理写一次,读一次的代码时。只有这样,你在做什么(在那种情况下)才最终无关紧要,因为你再也不会使用它了。不幸的是,这并不能解决练习那些你不想重复的东西的间接反馈。

当你开始担心那些对底线没有影响的深奥的东西时,我认为这太过分了。讨论,如是否使用三元运算符或编写明确的if语句,对于那些除了坐下来、站起来、啜饮啤酒/葡萄酒/苏打水和讨论“重大后果”之外无事可做的日子来说是好的:


但是为布尔值创建枚举是完全错误的。

取决于代价函数

这里有几个人们喜欢争论的方面,并且经常混淆。真的,答案是这要视情况而定。你真正看重的是什么

  • 字符数
  • 创建的操作数
  • 运行时
  • 便携性
  • 维修性
  • 清晰
  • 聪明
  • 稳定性(没有bug?)
  • 可扩展性
我总是先追求更高层次的东西,比如清晰。在人类周期中,清晰度的丧失是要付出代价的,而人类周期中总是缺少清晰度。人们很少关心原始时钟时间,而那些说他们关心的人几乎总是过早地优化

如果这对你有帮助的话,我喜欢认为我们正在取得进展,我们在不断提升,更加关注语义和完成的工作,而不是成为比特和数字的奴隶。然而,这并不是忘记基本原理和记住某些语义位是如何实现的借口。你不想在这种罕见的机会中被抓住,因为在这种情况下,速度开始变得重要,而传统已经过时。

“什么时候才允许人们无视自己所写内容的语义?边界线在哪里?”

我认为一个合理的问题是:“一个人什么时候应该忽视他写的东西的语义?”


由于我将编程视为一种人类活动,我想说,人们唯一应该忽略语句语义的时候是当系统本身强迫你的时候——当一些不可理解的语句是做某事的唯一方式时。这样的陈述很容易记录下来

微优化99%的时候是毫无意义的。例如,如果您的编译器以任何方式将所有“”实习到单个实例,则使用String.Empty不会以任何方式提高性能。没有任何可测量的效果通常也是最好的,我看到“优化”会降低性能,因为编译器做得更好,而优化会干扰它


大多数代码不需要优化。只有在代码运行后通过诊断才能确定需要在何处发生,即使在大多数情况下,也只能通过算法优化而不是微观优化来完成

观察您提供的示例-- 以下是:

运算符++
(后缀/前缀)

string.empty()

这似乎不是一个很好的例子,因为它们比较了
功能不同的操作。因此,最好不要忽略它们的语义区别

相比之下,以下示例:

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

enum
rate{
on
off
}与
boolean
on=true
<代码>关闭=假

这是完全合理的

vector.empty()
如果其使用上下文仅用于确定向量是否为空,则更可取。冒着听起来居高临下的风险(我