fbpx
维基百科

缩进风格

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

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

花括号位置 编辑

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

花括号位置 风格
while (x == y) {  something();  somethingelse(); } 
K&R及变种:

1TBSStroustrupLinux内核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编辑器通常将制表符视为等同八个字符,而MacintoshWindows环境将它视作四个字符[來源請求],这使代码在各环境间交换时产生一种混乱。现代的编程编辑器通常可以设置任意的缩进尺寸,并会插入适当的制表符与空格。对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 <- getContents  let  firstWord = head $ words text  bigWord = map toUpper firstWord  putStrLn bigWord 
braceful = do  { text <- getContents  ; 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时,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) <-- This comment is no longer valid, and is very misleading! 

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

参见 编辑

  • 次级符号英语Secondary notation
  • 語法突顯
  • 缩进 (排版)#编程中的缩进英语Indentation (typesetting)#Indentation in programming

参考资料 编辑

  1. ^ Detecting Code Indentation. 2014-09-08 [2017-07-28]. (原始内容于2020-11-12). 
  2. ^ Zawinski, Jamie. Tabs versus Spaces: An Eternal Holy War. 2000 [2016-06-06]. (原始内容于2018-06-12). 
  3. ^ WordPress Coding Standards. [2016-06-06]. (原始内容于2021-03-24). 
  4. ^ The Haskell 98 Report. [2016-03-03]. (原始内容于2021-04-11). 
  5. ^ Lipovača, Miran. Making Our Own Types and Typeclasses. [2016-02-03]. (原始内容于2021-04-13). 

外部链接 编辑

缩进风格, 本條目存在以下問題, 請協助改善本條目或在討論頁針對議題發表看法, 此條目翻譯自其他語言維基百科, 需要相關領域的編者協助校對翻譯, 如果您精通本領域, 又能清楚地將來源語言翻譯為中文, 歡迎您協助校訂翻譯, 原文参见维基数据, 此條目可参照外語維基百科相應條目来扩充, 若您熟悉来源语言和主题, 请协助参考外语维基百科扩充条目, 请勿直接提交机械翻译, 也不要翻译不可靠, 低品质内容, 依版权协议, 译文需在编辑摘要注明来源, 或于讨论页顶部标记, href, template, translated,. 本條目存在以下問題 請協助改善本條目或在討論頁針對議題發表看法 此條目翻譯自其他語言維基百科 需要相關領域的編者協助校對翻譯 如果您精通本領域 又能清楚地將來源語言翻譯為中文 歡迎您協助校訂翻譯 原文参见维基数据 此條目可参照外語維基百科相應條目来扩充 若您熟悉来源语言和主题 请协助参考外语维基百科扩充条目 请勿直接提交机械翻译 也不要翻译不可靠 低品质内容 依版权协议 译文需在编辑摘要注明来源 或于讨论页顶部标记 a href Template Translated page html title Template Translated page Translated page a 标签 此條目需要精通或熟悉相关主题的编者参与及协助编辑 請邀請適合的人士改善本条目 更多的細節與詳情請參见討論頁 在程序设计中 缩进风格 indent style 是管理代码块缩进以表达程序结构的一种约定 本条目主要讨论自由形式语言 例如C及其后裔 但这也可以 并经常 适用於大多数其他编程语言 尤其是花括号编程语言 英语 Curly bracket programming language 其中的空白字符则并不重要 缩进风格是代码风格的一个方面 缩进在大多数编程语言中不是必要条件 而只是作为辅助符号 英语 Secondary notation 不过 缩进有助於更好地向人类阅读者表达程序的结构 尤其是用於澄清控制流程结构 例如条件或循环 与其内部 外部代码之间的关系 不过 部分语言 例如Python和occam 使用缩进而非花括号或关键词来确定结构 这被称为越位规则 在这种语言中 缩进对编译器或解释器有意义 而不仅仅是清晰度或风格问题 目录 1 花括号位置 2 制表符 空格及缩进尺寸 3 工具 4 风格 4 1 K amp 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 amp R及变种 1TBS Stroustrup Linux内核 BSD KNFwhile x y something somethingelse Allmanwhile x y something somethingelse GNUwhile x y something somethingelse Whitesmithswhile x y something somethingelse Horstmannwhile x y something somethingelse Picowhile x y something somethingelse Ratliffwhile x y something somethingelse Lisp制表符 空格及缩进尺寸 编辑缩进的尺寸通常与风格无关 许多早期程序使用制表符来缩进 从而简化输入和节约源代码文件的大小 Unix编辑器通常将制表符视为等同八个字符 而Macintosh和Windows环境将它视作四个字符 來源請求 这使代码在各环境间交换时产生一种混乱 现代的编程编辑器通常可以设置任意的缩进尺寸 并会插入适当的制表符与空格 对Ruby 许多shell脚本语言和某些形式的HTML格式 通常为每个缩进级别使用两个空格 1 使用制表符还是空格作为缩进字符是编程界的一项持续争论 傑米 加文斯基等一些程序员认为空格而非制表符有助增加跨平台可移植性 2 而如WordPress编码规范的作者则认为制表符增加了可移植性 3 工具 编辑目前已有许多计算机程序可以自动校正缩进风格 依照程序作者或用户的偏好 以及制表符表示的缩进长度 其中很著名的一个是 a href Indent UNIX html title Indent UNIX indent a 这个程序包含在许多类Unix操作系统中 在Emacs中 有多种命令可用于自动解决缩进问题 Elastic tabstops是一种需要文本编辑器支持的制表风格 当块中的一行的长度改变时 整个文本块将自动对齐 风格 编辑K amp R 编辑 K amp 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 lt getContents let firstWord head words text bigWord map toUpper firstWord putStrLn bigWord braceful do text lt getContents let firstWord head words text bigWord map toUpper firstWord putStrLn bigWord 通常 procedural do的段落和一般程序文本会省略花括号和分号 但这种风格通常用于由一对括号或花括号组成的列表 记录或其他句法元素 并用逗号或分号分隔 5 其他考虑 编辑丢失块踪迹 编辑在某些情况下存在着丢失块边界的轨迹的风险 这通常在包含许多复杂语句的大量代码中看到 这些复合语句嵌套了许多层的缩进 当程序员滚动到一大堆嵌套语句的底部时 他可能已经忘记了哪些控制语句转到哪里 不过 过长的代码也可能有其他原因 诸如过于复杂 面对这个问题的程序员可能会考虑代码重构以期待它在未来有更好的体验 for int i 0 i lt total i foo bar for i if x lt 0 bar foo if x lt 0 声明的插入 编辑在使用标准的Unix行编辑器ed时 K amp R风格能防止一个常见的错误 在控制语句与循环块的开启花括号之间错误地插入的语句将使循环体变为单次执行 for int i 0 i lt 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 lt This comment is no longer valid and is very misleading K amp R风格通过将控制语句和开启括号保持在同一行来避免此问题 参见 编辑次级符号 英语 Secondary notation 語法突顯 缩进 排版 编程中的缩进 英语 Indentation typesetting Indentation in programming 参考资料 编辑 Detecting Code Indentation 2014 09 08 2017 07 28 原始内容存档于2020 11 12 Zawinski Jamie Tabs versus Spaces An Eternal Holy War 2000 2016 06 06 原始内容存档于2018 06 12 WordPress Coding Standards 2016 06 06 原始内容存档于2021 03 24 The Haskell 98 Report 2016 03 03 原始内容存档于2021 04 11 Lipovaca Miran Making Our Own Types and Typeclasses 2016 02 03 原始内容存档于2021 04 13 外部链接 编辑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相关的内容 取自 https zh wikipedia org w index php title 缩进风格 amp oldid 78506150, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。