开发人员应该首先考虑可读性还是性能? [关闭]

2023-11-23

开发人员常常面临着在解决问题的两种可能方法之间进行选择的情况——一种是惯用且可读的,另一种是不太直观但可能表现更好的方法。例如,在基于 C 的语言中,有两种将数字乘以 2 的方法:

int SimpleMultiplyBy2(int x)
{
    return x * 2; 
}

and

int FastMultiplyBy2(int x)
{
    return x << 1;
}

第一个版本对于技术和非技术读者来说都更容易上手,但第二个版本可能表现更好,因为位移位是比乘法更简单的操作。 (现在,我们假设编译器的优化器不会检测到这一点并对其进行优化,尽管这也是一个考虑因素)。

作为开发者,初次尝试哪个会更好?


你错过了一个。

首先编码是为了正确性,然后是为了清晰性(当然,两者通常是相连的!)。最后,只有当您有真正需要的实际经验证据时,您才可以考虑优化。过早的优化确实是邪恶的。优化几乎总是会花费你的时间、清晰度和可维护性。你最好确保你买的东西是值得的。

请注意,好的算法几乎总是胜过局部调整。您没有理由不能拥有正确、清晰且快速的代码。不过,如果你一开始就专注于“快”,那么你会非常幸运地到达那里。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开发人员应该首先考虑可读性还是性能? [关闭] 的相关文章

随机推荐

  • 对话框后面显示的垫选择选项

    我将表单输入 带有选项的垫选择和带有选项的自动完成字段也包含到垫对话框中 问题是选项显示在对话框后面 我已经遇到过这些解决方案解决方案1但并没有解决这个问题 这是我的代码
  • CMake - 如何使库的私有标头可供其测试使用?

    因此 我正在将项目的一部分制作为一个库 其中一些标头是该库的接口 其余部分是库本身私有的 因此 对于我的库 CMAKE 部分如下所示 add library PROJECT NAME PROJECT SOURCES PROJECT BINA
  • 接收 KeyError:“[Int64Index([ ... dtype='int64', length=1323)] 均不在 [列] 中”

    SUMMARY 当将测试和训练数据输入 ROC 曲线图中时 我收到以下错误 KeyError Int64Index 0 1 2 dtype int64 length 1323 都不在 列 中 该错误似乎是说它不喜欢我的数据格式 但它在第一次
  • 使用 Bouncy Castle 生成密钥对

    我有使用 BC 生成密钥对的 Java 代码 如下所示 KeyPairGenerator keyGen KeyPairGenerator getInstance RSA keyGen initialize 1024 KeyPair key
  • 确定性哈希函数可以轻松解密吗? [复制]

    这个问题在这里已经有答案了 可能的重复 是否可以解密 md5 哈希值 是否可以逆转 sha1 我问了这个问题 使用巨大的电子表格 并得到了很好的答案 我听从了建议 我用这个 http splinter com au blog p 86 我对
  • 链接服务器在 SQL Server 作业上失败

    我有一个链接服务器 在执行查询时可以完美运行 但是当我将查询放入作业中时 它失败了 这是我的链接服务器的设置 Error Read 当作业使用链接服务器时 SQL Server 代理作业失败 替代方法 要解决此问题 请使用以下方法之一 方法
  • 如何在 .NET Framework 4.7.2 中引用 System.Management.Automation?

    我启动了一个新的 NET Framework 4 7 2 库项目 我需要自动化 PowerShell 脚本 但 Visual Studio 参考中添加 UI 的 框架 选项卡未将 System Management Automation 列
  • Android:ListView 中的 EditText 问题

    我的应用程序中有一个列表视图 它基本上是一个调查问卷 因此用户需要填写一些编辑文本 我遇到过以下问题 某些 EditText 需要数字输入 因此我将相应 xml 类型中的 inputType 设置为数字 但是 当我单击 EditText 时
  • 为什么 Guava 的 TypeToken.getRawType() 返回 Class<?超级 T> 而不是 Class

    来自 Effective Java Second Edition 第 28 条 不要使用通配符类型作为返回类型 这不会为用户提供额外的灵活性 而是会迫使他们在客户端代码中使用通配符类型 public final Class
  • 使用 Nashorn (JSR 223) 和预编译进行 Java 脚本编写

    我通过 JSR 223 使用 Nashorn 来执行用户输入脚本的小片段 public Invocable buildInvocable String script throws ScriptException ScriptEngine e
  • AWS Lambda 和 SNS:跨区域调用 Lambda

    我有一个部署到多个区域的 Lambda 函数 我想向 SNS 发布一条消息来调用这些函数 我使用 aws cli 创建了主题 授予 Lambda 与 SNS 通信的权限 并创建订阅 订阅似乎已成功创建 我可以在 AWS 控制台中看到它 但是
  • 为什么对域名后的第一个斜杠进行 url 编码会破坏 url?

    萨尔维特 我发现某种 url 编码方式会破坏链接 作为记录 2f代表正斜杠字符 现在 考虑一下 原文链接 http dottech org 95285 this is the pacific barreleye a fish with a
  • 方法名称为空,这实际上是做什么的?

    我目前正在自学 Objective C 和 iOS 编程 发现自己由于这个微妙的错误而陷入了无法工作的代码一个小时 考虑以下代码 property strong nonatomic NSString name NSString name r
  • Bootstrap-Datetimepicker 不适用于 jQuery 3

    Bootstrap datetimepicker 不适用于 jQuery 3 1 1 我需要使用相同的 jQuery 库来运行所有其他依赖函数 我遇到同样的错误 input size is not a function TypeError
  • 递归数组类型打字稿

    说我有类型type Atom string boolean number 我想定义一种数组类型 例如 NestedArray Atom a 0 a 1 a n 其中每个a i is an Atom or a NestedArray 这可以在
  • 1093 MySQL 表被指定两次时出错

    我正在尝试更新一些行 我只想更新 ID 0 的行 我收到的错误消息是 1093 表 ch 15 posts 被指定两次 既作为 UPDATE 的目标又作为单独的数据源 这是我正在使用的代码 欢迎大家提出意见 UPDATE ch 15 pos
  • 从基类创建子类的克隆副本

    考虑这种情况 public class Base public int i public class Sub Base public void foo do stuff 然后我想 举个例子Base获取一个克隆实例Sub 在本例中 i 17
  • 这是什么?????!运算符在C中做什么?

    我看到一行C 看起来像这样 ErrorHasOccured HandleError 它编译正确并且似乎运行正常 看起来它正在检查是否发生了错误 如果发生了 它就会处理它 但我不太确定它实际上在做什么或它是如何做的 看起来程序员确实正在尝试表
  • 如何在 Yii2 Active Record 中使用 JOIN 建立关系模型?

    我有 2 张表 分别称为 书籍 和 评论 Books 表与 Reviews 具有一对多关系 我想搜索书籍并按评论对它们进行排序 例如 如果有 10 本书可用 并且书籍在评论中有评论 那么我想使用 WHERE 子句查找所有书籍并计算评论数量
  • 开发人员应该首先考虑可读性还是性能? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 开发人员常常面临着在解决问