强制使用牙套

2024-04-17

作为我不久前写的代码标准文档的一部分,我强制要求“您必须始终对循环和/或条件代码块使用大括号,即使(特别是)它们只有一行。”

Example:

// this is wrong
if (foo) 
    //bar
else 
    //baz
while (stuff)
    //things

// This is right.
if (foo) {
    // bar
} else {
    // baz
}
while (things) {
    // stuff
}

当你不加括号,然后有人将其注释掉时,你就有麻烦了。如果您不使用单行大括号,并且缩进在其他人的机器上显示不一样......您就有麻烦了。

那么问题来了:是否有充分的理由解释为什么这是一个错误或不合理的标准?关于它已经有一些讨论,但没有人能给我提供比“感觉丑陋”更好的反驳。


我能提供的最好的反驳论点是,空间占用的额外行会减少您一次可以看到的代码量,而您一次可以看到的代码量是影响易用性的一个重要因素。是为了发现错误。我同意你给出的包含大括号的原因,但是在 C++ 的许多年里,我只能想到一次我因此犯了一个错误,而且是在一个我没有充分理由跳过大括号的地方反正。不幸的是,我无法告诉您这些额外的代码行在实践中是否有帮助。

我可能更有偏见,因为我喜欢在相同缩进级别匹配大括号的对称性(以及将包含的语句隐式分组为一个执行块) - 这意味着添加大括号all时间给项目增加了很多行。

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

强制使用牙套 的相关文章

  • 枚举是单数还是复数?

    枚举时使用单数还是复数 我认为声明中使用复数最有意义 enum Weekdays Monday Tuesday Wednesday Thursday Friday Saturday Sunday 但我认为在使用类型时使用单数更有意义 例如
  • 迭代还是使用计数器,这就是问题

    每当有人开始使用 STL 并且他们有一个向量时 您通常会看到 vector
  • 如何用好Fortran语句标签?

    我正在开发一个用 Fortran 95 编写的模型 我对此完全陌生 语句标签的概念似乎很奇怪 到目前为止我只找到了标签可以由作者任意决定的解释 通常以 10 为增量 除了更容易地找出语句的结尾位置之外 这些标签还有其他实际用途吗 以及关于如
  • SQL Server 2005:“保护”存储过程免受 MS Access 使用的 FMTONLY 模式影响

    我们拥有的一些存储过程包含条件逻辑 如下所示 Create Procedure dbo DoSomething Some Parameters As If Some Condition Begin Set SomeVariable Some
  • 如何让 gcc/clang 警告 switch 语句中缺少中断

    有什么办法可以使gcc or clang警告 switch 语句中缺少中断 具体来说 我几乎总是希望 case 语句以中断结束 如果我不这样做的话 如果我能让编译器抱怨 那就太好了 如果它会寻找一个break语句或一个 fall throu
  • 当你不需要Python中的索引时,如何创建For循环? [复制]

    这个问题在这里已经有答案了 如果我需要一个forPython 中的循环 for i in range 1 42 print spam 但不要使用i对于任何事情 pylint 都会抱怨未使用的变量 我应该如何处理这个问题 我知道你可以这样做
  • 使用循环计算 Python 字典中元素的有效方法

    我有一个值列表 我希望在循环期间计算每个类的元素数量 即 1 2 3 4 5 mylist 1 1 1 1 1 1 2 3 2 2 2 2 3 3 4 5 5 5 5 mydict dict for index in mylist mydi
  • 正则表达式的替代(流畅?)界面设计

    我刚刚看到了一个巨大的 Java 正则表达式 这让我对正则表达式的一般可维护性进行了一些思考 我相信大多数人 除了一些糟糕的 Perl 贩子 都会同意正则表达式很难维护 我正在考虑如何解决这种情况 到目前为止 我最有希望的想法是使用流畅的界
  • 何时使用属性而不是函数

    这可能是个人喜好的问题 但是什么时候在代码中使用属性而不是函数 例如 要获取错误日志 我可以说 string GetErrorLog return m ErrorLog 或者我可以 string ErrorLog get return m
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • 您将整个应用程序中使用的常量保存在哪里?

    界面是存储我的信息的可接受的地方吗 public static final Foo bar 您是否推断它们可以从程序外部读取 你给它编了一个超级课吗 当情况出现时 你会怎么做 我会将每个常量放入与其最密切相关的类或接口中 例如 因为它将被其
  • C++ getter 和 setter 最佳风格

    Java 代码约定简单明了 采用这种风格 public int GetMyAge return myAge void SetMyAge int myAge this gt myAge myAge private int myAge 我知道这
  • 防止Java实例化的正确方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • LaTeX 报告章节样式

    如何更改 LaTeX 报告类中的章节样式 我发现了一些关于 makechapterstyle 但它似乎不适用于报告 或者至少不适用于my报告 我很确定一定有某种方法可以改变这一点 我知道 LaTeX 不太适合编程 但我不知道有什么更好的地方
  • C++ 用纯虚方法重写纯虚方法

    用另一个纯虚拟方法覆盖一个纯虚拟方法是否有意义 是否存在任何功能差异或代码风格原因使您更喜欢以下选项之一而不是另一个 class Interface public virtual int method 0 class Abstract pu
  • 使用“for”循环迭代 C++ Vector

    我是 C 语言的新手 我已经开始使用向量 并且注意到在我看到的所有代码中通过索引迭代向量 for循环总是基于向量的 在 Java 中 我可能会用 ArrayList 做这样的事情 for int i 0 i lt vector size i
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • 指向常量结构的速记 typedef 指针

    使用 typedef 声明结构 typedef struct some struct int someValue pSomeStruct 然后将其作为参数传递给带有 const 声明的某个函数 这意味着 const some struct
  • 太多的导入正在垃圾邮件我的 Java 代码

    在我的项目中我有一个shapes包含我为图形程序设计的形状的包 例如 长方形 and Circle 我还有一两个同名的软件包java awt类 现在 由于我不想重命名代码库中的每个类 为了显示我的源文件 当我声明一个新的矩形时 我需要执行以

随机推荐

  • Gradle 发出错误“无法创建类型为‘AppPlugin’的插件”

    我正在尝试使用 gradle 创建一个简单的 android 项目 我在一台装有 Debian GNU Linux 7 wheezy 的计算机上工作 我遵循了中的建议Gradle 插件用户指南 Android 工具项目网站 http too
  • 如何将 Twitter 小部件集成到 Reactjs 中?

    我想将 Twitter 小部件添加到 React 中 但我不知道从哪里开始或如何做 我对 React JS 很陌生 下面是 HTML 版本的代码 div class Twitter a class twitter timeline href
  • 如何在 Meteor 中缓存数据?

    感谢大家 最近我想在meteor上建立一个小型cms 但有一些问题 1 缓存 页面缓存 数据缓存等 例如 当人们搜索某篇文章时 在服务器端 Meteor publist articles function keyword return Ar
  • chrome.storage 在 chrome 扩展中未定义

    我正在开发一个 Google Chrome 扩展程序 并且已经为此工作了一段时间 所以它已经安装了一段时间 我更新了清单文件以包含 存储 权限并重新加载扩展 但是 当我在控制台中尝试时 chrome storage is undefined
  • Microsoft Bot 在 WebChat 中显示不必要的重复消息?

    当用户第一次访问我的聊天室时 他们会收到欢迎消息 并立即被要求提供他们的名字 一旦用户输入他们的名字 就会出现欢迎消息 并再次显示输入名字的文本提示 只有在他们第二次输入名字后 机器人才会继续处理下一个有关姓氏的问题 此外 当用户最终在第一
  • 在 Java JFrame 上添加图像 - Netbeans

    我在用着NetBeans 7 1用 Java 编写代码 我已经创建了一个JFrame充满了一些labels textbox and buttons 我该如何导入一些图像 JPG PNG etc 从我的电脑到同一个JFrame 在框架的特定位
  • 如何以 const 形式返回指向指针列表的私有指针?

    我有一个指向指针列表的指针 作为私有变量 我还有一个 getter 它返回指向列表的指针 我需要保护它免受更改 我找不到如何使用reinterpret cast 或const cast 对此 class typeA shared ptr
  • 实现字典的 Applicative 实例(Map、关联数组)

    为关联数组实现函子实例 本质上是映射操作 似乎很简单 例如 参见Functor定义 1 然而 Applicative实例未定义 地图不是应用程序有一个很好的理论理由吗 它们需要什么额外的限制才能成为应用程序 1 https hackage
  • 如果 B 列中的值 = 特定文本,则将特定文本插入到 A 列中的值中

    简单地说 如果 B 列中的任何单元格包含thisvalue然后附加到 A 列中的相邻单元格sometext 这是怎么做到的 一个简单的 if 语句 例如 IF ISNUMBER SEARCH thisvalue B1 sometext 编辑
  • 多个 NSEntityDescription 声明 NSManagedObject 子类

    我正在创建一个允许我使用核心数据的框架 在框架的测试目标中 我配置了一个名为的数据模型MockModel xcdatamodeld 它包含一个名为MockManaged有一个单一的Date财产 为了测试我的逻辑 我正在创建一个内存存储 当我
  • 为什么必须对存储在堆中的函数的局部变量调用delete?

    假设您有以下函数 void doSomething int data new int 100 为什么这会产生内存泄漏呢 由于我无法在函数外部访问此变量 为什么编译器不在每次调用此函数结束时自行调用delete 为什么这会产生内存泄漏呢 因为
  • 核心数据迁移非常慢

    我正在尝试执行核心数据迁移 一切正常 只是迁移本身需要 10 多秒的时间 我正在使用 xcmappingmodel 在两个模型版本之间进行映射 效果很好 除了所需的时间长度之外 在下面的代码中 开始迁移 和 完成迁移 日志之间有 10 秒
  • 如何使用 make 打印目标的所有先决条件并构建规则

    一个大的项目通常有一个复杂的Makefile系统 有许多变量定义和目标先决条件依赖项分散在不同的 Makefile 中 有什么方便的方法来打印目标的所有先决条件和构建规则吗 具体来说 有两个问题 问题1 假设我有四个 Makefile 生成
  • 设置并验证 Python MySQL 连接中使用的 SSL/TLS 版本

    如何告诉 Python MySQL 连接器使用哪种 SSL TLS 协议 特定的 例如 TLS1 2 或最低的 如何检查已建立的连接使用哪种协议 我有一个应用程序使用mysql connector python 8 0 18 我连接这样的东
  • 将 CMake 变量从 GUI 导出到命令行

    是否可以将 CMake GUI 中设置的所有变量值导出到单个命令行字符串 以便可以从外部工具快速使用它 所以输出会是这样的 cmake DVar1 ON DVar2 foo 你可以从 Tools gt Show My Changes
  • Corda 真的需要公证人才能达成唯一性共识吗?

    科达共识简介 https docs corda net releases release V2 0 key concepts consensus html说 唯一性共识是由公证人提供的 我们是说 如果没有公证人 A 有可能说服 B 将一笔交
  • 我如何通过查询从 Firestore 获取单个文档(我正在使用 Ionic 4 )

    早上好 我在 firestore 中有数据库如下 collections documents fields 123 news1 title some data news2 content some data 例如我想获取我的 ionc4 应
  • Java FXML 从绝对路径加载(动态)

    我想从绝对路径或 jar 系统外部的路径加载 fxml 文件 背景 它将是一个简单的插件系统 在插件文件夹中查找所有 fxml 文件 后来的 jar 文件 并将其自动包含在 TabPane 中 String fxmlpath C plugi
  • ColdFusion 参数化查询

    我运行一个查询来填充我试图参数化的 CFChart
  • 强制使用牙套

    作为我不久前写的代码标准文档的一部分 我强制要求 您必须始终对循环和 或条件代码块使用大括号 即使 特别是 它们只有一行 Example this is wrong if foo bar else baz while stuff thing