在程序设计中,缩进风格(indent style)是管理代码块(英语:Block (programming))缩进(英语:Indentation (typesetting))以表达程序结构的一种约定。本条目主要讨论自由形式语言(英语:Free-form language),例如C及其后裔,但这也可以(并经常)适用于大多数其他编程语言(尤其是大括号编程语言(英语:Curly bracket programming language)),其中的空白字符(英语:Whitespace character)则并不重要。缩进风格是代码风格的一个方面。

缩进在大多数编程语言中不是必要条件,而只是作为辅助符号(英语:Secondary notation)。不过,缩进有助于更好地向人类阅读者表达程序的结构。尤其是用于澄清控制流程结构(例如条件或循环)与其内部、外部代码之间的关系。不过,部分语言(例如Python和occam)使用缩进而非大括号或关键词来确定结构,这被称为越位规则。在这种语言中,缩进对编译器或解释器有意义,而不仅仅是清晰度或风格问题。

目录

1 大括号位置

2 制表符、空格及缩进尺寸

3 工具

4 风格

4.1 K&R

4.1.1 变种:1TBS (OTBS)

4.1.2 变种:Java

4.1.3 变种:Stroustrup

4.1.4 变种:Linux内核

4.1.5 变种:BSD KNF

4.2 阿尔曼风格

4.2.1 变种:Allman-8

4.3 Whitesmiths style

4.4 GNU风格

4.5 Horstmann风格

4.6 Pico风格

4.7 Ratliff风格

4.8 Lisp风格

4.9 Haskell风格

5 其他考虑

5.1 丢失块踪迹

5.2 声明的插入

6 参见

7 参考资料

8 外部链接

大括号位置

缩进风格的主要区别在于复合语句的大括号({...})的位置,这通常是为涵盖一个控制声明(if、while、for...)。下表展示了本条目中讨论的所有风格的所在位置。为了一致性,缩进深度(字符数)统一使用4个空格表示,这未考虑各风格中首选的缩进深度。

大括号位置

风格

while (x == y) {

something();

somethingelse();

}

K&R及变种:

1TBS、Stroustrup、Linux内核、BSD KNF

while (x == y)

{

something();

somethingelse();

}

Allman

while (x == y)

{

something();

somethingelse();

}

GNU

while (x == y)

{

something();

somethingelse();

}

Whitesmiths

while (x == y)

{ something();

somethingelse();

}

Horstmann

while (x == y)

{ something();

somethingelse(); }

Pico

while (x == y) {

something();

somethingelse();

}

Ratliff

while (x == y) {

something();

somethingelse(); }

Lisp

制表符、空格及缩进尺寸

缩进的尺寸通常与风格无关。许多早期程序使用制表符来缩进,从而简化输入和节约源代码文件的大小。Unix器通常将制表符视为等同八个字符,而Macintosh和Windows环境将它视作四个字符[来源请求],这使代码在各环境间交换时产生一种混乱。现代的编程器通常可以设置任意的缩进尺寸,并会插入适当的制表符与空格。对Ruby、许多shell脚本语言和某些形式的HTML格式,通常为每个缩进级别使用两个空格。[1]

使用制表符还是空格作为缩进字符是编程界的一项持续争论。杰米·加文斯基等一些程序员认为空格而非制表符有助增加跨平台可移植性。[2]而如WordPress编码规范的作者则认为制表符增加了可移植性。[3]

工具

目前已有许多计算机程序可以自动校正缩进风格(依照程序作者或用户的偏好)以及制表符表示的缩进长度。其中很著名的一个是indent,这个程序包含在许多类Unix操作系统中。

在Emacs中,有多种命令可用于自动解决缩进问题。

Elastic tabstops是一种需要文本器支持的制表风格,当块中的一行的长度改变时,整个文本块将自动对齐。

风格

K&R

K&R风格常在C、C++以及其他大括号编程语言(英语:Curly brace programming language)中使用。在布莱恩·柯林汉与丹尼斯·里奇的《C程序设计语言》一书中也有使用。它起源于Kernighan和Plauger的《编程风格的元素(英语:The Elements of Programming Style)》及软件工具。

变种:1TBS (OTBS)

变种:Java

变种:Stroustrup

变种:Linux内核

变种:BSD KNF

阿尔曼风格

变种:Allman-8

Whitesmiths style

GNU风格

Horstmann风格

Pico风格

Ratliff风格

Lisp风格

Haskell风格

Haskell是一种大括号可选的语言[4],也就是说,下面的两组代码在语义上是相等的:

braceless = do

text

let

firstWord = head $ words text

bigWord = map toUpper firstWord

putStrLn bigWord

braceful = do

{ text

; let

{ firstWord = head $ words text

; bigWord = map toUpper firstWord

}

; putStrLn bigWord

}

通常,procedural do的段落和一般程序文本会省略大括号和分号,但这种风格通常用于由一对括号或大括号组成的列表、记录或其他句法元素,并用逗号或分号分隔。[5]

其他考虑

丢失块踪迹

在某些情况下存在着丢失块边界的轨迹的风险。这通常在包含许多复杂语句的大量代码中看到,这些复合语句嵌套了许多层的缩进。当程序员滚动到一大堆嵌套语句的底部时,他可能已经忘记了哪些控制语句转到哪里。不过,过长的代码也可能有其他原因, 诸如过于复杂,面对这个问题的程序员可能会考虑代码重构以期待它在未来有更好的体验。

for (int i = 0; i < total; i++) {

foo(bar);

} //for (i)

if (x < 0) {

bar(foo);

} //if (x < 0)

声明的插入

在使用标准的Unix行器ed(英语:Ed (text editor))时,K&R风格能防止一个常见的错误。在控制语句与循环块的开启大括号之间错误地插入的语句将使循环体变为单次执行。

for (int i = 0; i < 10; i++)

whoops(bar); /* repeated 10 times, with i from 0 to 9 */

{

only_once(); /* Programmer intended this to be done 10 times */

} //for (i)

K&R风格通过将控制语句和开启括号保持在同一行来避免此问题。

参见

次级符号(英语:Secondary notation)

语法突显

缩进 (排版)#编程中的缩进(英语:Indentation (typesetting)#Indentation in programming)

参考资料

^ Detecting Code Indentation. 2014-09-08.

^ Zawinski, Jamie. Tabs versus Spaces: An Eternal Holy War. 2000 [2016-06-06].

^ WordPress Coding Standards. [2016-06-06].

^ The Haskell 98 Report. [2016-03-03].

^ Lipovača, Miran. Making Our Own Types and Typeclasses. [2016-02-03].

外部链接

C Style: Standards and Guidelines: Defining Programming Standards for Professional C Programmers, Prentice Hall, ISBN 0-13-116898-3 / ISBN 978-0-13-116898-5 (full text is also online). Straker, David (1992).

Contextual Indent

GNU Coding Standards

开放式目录计划中和Source Code Formatters相关的内容

java开发用allman风格_缩进风格相关推荐

  1. 阿里巴巴Java开发规范线程池_阿里巴巴java编程规范.pdf

    阿里巴巴java编程规范 目录 一.编程规约1 (一) 命名规约1 (二) 常量定义3 (三) 格式规约4 (四) OOP 规约6 (五) 集合处理 10 (六) 并发处理 12 (七) 控制语句 1 ...

  2. java开发对学位证_您需要软件学位才能成为成功的开发人员吗

    java开发对学位证 Lately, I have seen an emerging trend online from articles, tweets, and videos where peop ...

  3. 软件架构风格 仓库风格_功能风格–第9部分

    软件架构风格 仓库风格 实用主义 在本系列中,我们进行了一次旋风之旅,浏览了我认为最重要的与函数式编程相关的主题,以及一些我认为很好的相关知识. 我们从基础开始,定义了我认为是FP的本质,并展示了如何 ...

  4. java开发前的准备工作_三、开发java程序前的准备工作

    JDK[Java development kit]:Java开发工具包 JRE[Java runtime environment]:Java运行环境 JVM[Java virtual machine] ...

  5. 此安装程序必须使用 java 开发工具包 (jdk) 执行_彻底搞懂Java开发工具包(JDK)安装及环境变量配置...

    [官方正版]java jdk 9学习笔记 78.4元 包邮 (需用券) 去购买 > 一.Java 和 JDK 是什么 Java:Java是一种优秀的程序设计语言,它有非常多的语言特性,如简单性. ...

  6. java开发第一天上班_从第一天开始,如何成为一名优秀的团队合作伙伴,成为初级开发人员

    java开发第一天上班 One of the many things you might be asking yourself when starting your software developm ...

  7. 武汉java开发工资一般多少_武汉Java开发工资是否还会增长?工资为什么那么高?...

    武汉Java开就业薪资多少?一直是很多学习的人关心的问题,毕竟,大家花费时间和精力学习Java都是希望能收获一份满意的高薪工作.那么,学习武汉Java开发后薪资一般有多少呢?下面,我给大家分析一下. ...

  8. java 开发平台 普元_普元开发平台好不好?

    一. 安装C/C++程序的开发环境 1. sudo apt-get install build-essential //安装主要编译工具 gcc, g++, make 2. sudo apt-get ...

  9. java开发工程师报名费多少_都说Java工程师的薪资比较高,事实真是如此吗?

    作为IT行业中的热门编程语言,Java不仅可以胜任很多工作岗位,在薪资方面也非常具有竞争优势.因此,Java开发是不少人转行的首选.很多想要学习Java的人都会问,在武汉Java学习后能拿多少工资?可 ...

最新文章

  1. 10分钟搭建你的第一个图像识别模型 | 附完整代码
  2. XMLHttpResponse 在项目里面的运用
  3. 命令执行无回显的一些姿势
  4. Python标准模块--logging
  5. [html] H5的Web Storage带来什么好处?
  6. 那个拒绝北大教授,却坚持留在美国做服务员的数学天才,现状如何
  7. java office文件加水印_文档预览加水印——或可一用的防泄密方式
  8. 微信小程序商城搭建小程序服装购物商城+后台
  9. 在竞赛中不断成长--(广油最帅的崽)行走的皮卡丘
  10. Scrum板与Kanban如何抉择?drzdbtbna板与按照exrefp
  11. 计算机PS怎么做地图怎么改色,ps颜色快捷键,ps调整颜色模式和替换改色
  12. 内置函数--inline
  13. Codeforces1196D2
  14. html响应式布局手机屏幕导航条,美图响应式布局导航条效果
  15. 可以替代树莓派4(raspberry pi 4B)的tinker board 2
  16. 沃Phone可否乐成
  17. 利用计算机程序快速得到9*9大小数独的解法
  18. iOS开发脚踏实地学习day01-02-加法计算器和图片移动缩放旋转
  19. boost哪些库需要编译
  20. 生产制造管理系统MES

热门文章

  1. (翻译)色彩饱和度影响用户效率的方式
  2. 洛谷P1710 地铁涨价
  3. Python常用设计模式—创建型模式
  4. 孟丽秋教授当选为慕尼黑工业大学第一副校长
  5. 在Linux上搭建私有云
  6. PS制作三原色叠加效果教程
  7. 模拟电子技术-二极管及其基本电路
  8. TL5000系列可调谐激光器
  9. MacOS-MacAPP使用Main.storyboard启动视图程序踩坑
  10. 用HTML5技术打造跨平台大型网游