IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

代码的缩进和嵌套

外刊IT评论 2011-06-01 13:22:25 累计浏览 3,315 次
本机暂存
本文是从 Code Indentation and Nesting 这篇文章翻译而来。

    Ash Furrow在关于避免不必要的代码缩进问题上这样说:

    自从第一年一个睿智的高年级的学生向我展示了如何在代码里避免不必要的缩进后,我一直都保持着这种做法。我并不去纠正已有的代码,因为这并不能改善程序的性能,我只是在些新的程序里避免不必要的空格缩进。

    我还有另外一个很相似的习惯,但并不是关于缩进的,而是关于避免嵌套。乍一看,这两个问题很相似(连视觉上都有缩进的表现)。但核心问题不一样,前者是关于程序书写问题的,后者是语义上的。

    避免嵌套这种编写风格最大的好处是bailing early。跟深层次的嵌套你的语句(这样会同时导致你深度的缩进)的做法相反,简化你的语句,把你的程序设计成最终要执行的语句尽可能的少,简单的越容易让人理解越好。观察一下下面的例子:

        - (void)doSomethingWithString:(NSString *)s {
            if (nil != s) {
                if ([s length] > 0) {
                    NSLog(@"%@", s);
                }
            }
        }

        // 相对于
        - (void)doSomethingWithString:(NSString *)s {
            if (nil == s)
                return;

            if (![s length])
                return;

            NSLog(@"%@", s);
        }
        

    细心的读者可能会注意到一些问题:

  • 我的第二个例子实际比第一个要长。
  • 第二个例子更可读。想象一下如果在主方法执行前你有5个判断条件要检查,你嵌套出来的语句将会有多么的可怕?
  • 这个组合的nil 和 length 检查在这个特殊的例子中是没必要的(因为返回nil这样的消息时,nil的值是0x0,等于0,对于空字符或 nil 调用[s length]都返回0)。这是专门这样做的,为了说明问题。
  •     当然,这种特别的”bailing early”的风格在处理内存管理上会有一些其他方面的问题。如果你使用这种风格,某些时候你必须做一些额外的操作。也就是你有时候会过于频繁的使用内存自动释放(autorelease),或你需要在程序的多个地方使用重复的释放代码来避免对象分配泄漏。在真实工作中这种情况很少见,但我想你还是要把这点记在心里。

    同分类推荐文章

    1. 科技爱好者周刊(第 401 期):如何赚到10亿美元 (2026-06-26 08:05:38)
    2. 如何做决策 - 从 Go 的一个 issue 说起 (2026-06-26 08:00:00)
    3. Seven Player:Windows上播放115网盘视频的增强工具 (2026-06-09 00:06:47)

    查看更多 开发者 文章 →

    建议继续学习

    1. 提高代码可读性的注释技巧 (累计阅读 8,171)
    2. 10个最“优秀”的代码注释 (累计阅读 4,769)
    3. 如何避免重构带来的危险 (累计阅读 4,638)
    4. 谈谈年度最佳代码“不管你们信不信,反正我信了” (累计阅读 4,130)
    5. 文字编排的易读性 (累计阅读 3,424)
    6. 10个最“牛叉”的代码注释 (累计阅读 3,108)
    7. 用 HTML 标记的古怪代码注释 (累计阅读 2,880)
    8. PHP最佳实践之PHP标签 (累计阅读 2,257)
    9. 《web前端最佳实践》—HTML篇 (累计阅读 2,150)
    10. 我对“语言之争”的看法:别随便拉我入场 (累计阅读 2,015)