Python 还能承担下一个时代的发展重任吗?Mojo 语言的横空出世对 AI 研发生态有什么影响? 了解详情
写点什么

纽约时报 Objective-C 编码风格指南

  • 2013-08-19
  • 本文字数:1226 字

    阅读完需:约 4 分钟

纽约时报发布了其 iOS 团队使用的 Objective-C 编码规范,内容涵盖源代码布局、条件表达式编写、变量名、方法和布尔值使用等方面。

纽约时报向来以严谨的写作风格而闻名。数十年前印刷出版的一本手册对他们的写作风格进行了详细说明,许多记者都把它作为参考。现在,该报社的iOS 团队承担起为在Objective-C 中编程的开发人员编写编码指南的任务。编码指南的灵感来自于苹果公司编写的数个Objective-C 及Cocoa 指南。

编码规范通常涵盖源代码的诸多方面,包括布局- 缩进、空格、花括号的使用、大写及注释风格等。每位开发人员都有自己的编码风格,但是很多时候,当加入一个新团队,就需要遵循特定的规范。虽然有些人可能会拒绝遵循严格的编码指南,但是为了提高代码的可读性和降低代码维护的难度,通常还是建议开发人员遵循规范。Sun 公司的“ Java 编程语言编码规范:为什么要有编码规范?”支持遵循规范进行编码的做法,原因如下:

  • 一款软件的维护成本占软件整个生命周期总成本的 40%-80%。
  • 几乎没有软件在整个生命周期中都是由其作者进行维护。
  • 编码规范提高了软件的可读性,使工程师可以更迅速、更彻底地读懂新代码。
  • 如果开发人员要将源代码作为产品交付,那么他需要保证,该产品跟他创造的任何一款产品相比,都进行了精心地打包,而且同样简洁。。

以下是纽约时报编码规范的部分内容:

空格——不使用 tab 键,而使用 4 个空格。花括号的左半部分与方法或其它元素在同一行,花括号的右半部分单独占一个新行。

好的做法

复制代码
if (user.isHappy) {
// 做一些操作
}
else {
// 做其它操作
}

不好的做法

复制代码
if (user.isHappy) {
// 做一些操作
} else {
// 做其它操作
}

条件语句总是使用花括号来避免错误。

好的做法

复制代码
if (!error) {
return success;
}

不好的做法

复制代码
if (!error)
return success;
if (!error) return success;

变量名应该尽可能地具有描述性。要尽可能地使用属性定义代替无修饰的实例变量。

好的做法

复制代码
@interface NYTSection: NSObject
@property (nonatomic) NSString *headline;
@end

不好的做法

复制代码
@interface NYTSection : NSObject {
NSString *headline;
}

布尔值——在比较时,不使用 nil、NO 或 YES。

好的做法

复制代码
if (!someObject) {
}
if (isAwesome)
if (![someObject boolValue])
{1}

不好的做法

复制代码
if (someObject == nil) {
}
if ([someObject boolValue] == NO)
if (isAwesome == YES) // 永远不要这样做。

纽约时报 Objective-C 编码风格指南还包括一些其它相关元素的规范,包括方法、命名、字面值、注释、常量和单例等。他们希望得到开发人员的反馈。鉴于可能会有人不喜欢这套规范,他们还推荐了其它公司的规范,包括 Google GitHub Adium Sam Soffes CocoaDevCentral Luke Redpath 或者 Marcus Zarra

查看英文原文: The New York Times Objective-C Style Guide


感谢马国耀对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013-08-19 04:373204
用户头像

发布了 256 篇内容, 共 77.8 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

【等保小知识】信息安全等级保护四级系统有哪些?

行云管家

网络安全 等级保护

老电影和图片变清晰的秘密!分辨率提升400%的AI算法

百度大脑

人工智能

Go语言学习查缺补漏ing Day5

恒生LIGHT云社区

golang 编程语言

npm进阶(一) 更换成淘宝镜像源以及 cnpm

No Silver Bullet

npm 12月日更

List 去重的 6 种方法

编程江湖

List java 编程

飞桨双十二礼包,上海“拆箱”啦!

百度大脑

人工智能

谈谈对微软Dapr的理解

行云创新

微软 服务网格 dapr

Web3.0时代的社交网络会有哪些新变化?

CECBC

腾讯音乐iOS开发四次面试记录

iOSer

ios 腾讯 面试题 iOS面试 腾讯音乐

Aeron 是如何实现的?—— Ipc Subscription

BUG侦探

共享内存 Aeron Ipc Subscription

如何搭建批流一体大数据分析架构?

Kyligence

十年期货股票行情数据轻松处理——TDengine在同心源基金的应用

TDengine

数据库 tdengine 时序数据库

es单机安装及配置其系统服务

elasticsearch

跨越可观测性鸿沟|高手们都在用的“火焰图”是什么

尔达Erda

程序员 微服务 云原生 可观测性 链路追踪

JavaScript 中的 .forEach() 和 for...of

devpoint

JavaScript foreach for...of 12月日更

恒源云(GPUSHARE)_【功能更新】实例日志上线,操作一目了然

恒源云

深度学习 算力加速

Kafka之为什么需要消息队列

编程江湖

大数据 kafka

SpringBoot中如何优雅的使用多线程

编程江湖

JAVA开发 springboot

网易云信发布两大元宇宙解决方案,打响进军元宇宙第一枪

网易云信

人工智能 音视频 元宇宙

元宇宙浪潮之下,数字身份至关重要

CECBC

6000字,详解数据仓库明星产品背后的技术奥秘

百度开发者中心

数据库 大数据

Rust 元宇宙 14 —— 创建角色和同步

Miracle

rust 元宇宙

7.《重学JAVA》--运算符

杨鹏Geek

Java 25 周年 28天写作 12月日更

中科柏诚持续推进数字网络技术,蓄力元宇宙布局

联营汇聚

netty系列之:性能为王!创建多路复用http2服务器

程序那些事

Netty 程序那些事 http2 12月日更

主机入侵检测策略之基线检测

网络安全学海

网络安全 信息安全 渗透测试 安全漏洞 暴力猜解

南瓜电影 7 天内全面 Serverless 化实践

Serverless Devs

阿里云 ECS 南瓜电影 SAE

【IT运维】公司内网服务器可以远程桌面连接吗?怎么连接?

行云管家

云计算 运维 IT运维 远程运维

常见杀毒软件及其引擎的特点

喀拉峻

网络安全 病毒扫描

Python代码阅读(第68篇):指定值出现次数

Felix

Python 编程 列表 阅读代码 Python初学者

Kyligence + 亚马逊云科技丨实现云上的精细化运营和数字化指挥

Kyligence

  • 扫码加入 InfoQ 开发者交流群
纽约时报Objective-C编码风格指南_语言 & 开发_Abel Avram_InfoQ精选文章