java开发用allman风格_缩进风格
在程序設(shè)計(jì)中,縮進(jìn)風(fēng)格(indent style)是管理代碼塊(英語:Block (programming))縮進(jìn)(英語:Indentation (typesetting))以表達(dá)程序結(jié)構(gòu)的一種約定。本條目主要討論自由形式語言(英語:Free-form language),例如C及其后裔,但這也可以(并經(jīng)常)適用于大多數(shù)其他編程語言(尤其是大括號編程語言(英語:Curly bracket programming language)),其中的空白字符(英語:Whitespace character)則并不重要。縮進(jìn)風(fēng)格是代碼風(fēng)格的一個(gè)方面。
縮進(jìn)在大多數(shù)編程語言中不是必要條件,而只是作為輔助符號(英語:Secondary notation)。不過,縮進(jìn)有助于更好地向人類閱讀者表達(dá)程序的結(jié)構(gòu)。尤其是用于澄清控制流程結(jié)構(gòu)(例如條件或循環(huán))與其內(nèi)部、外部代碼之間的關(guān)系。不過,部分語言(例如Python和occam)使用縮進(jìn)而非大括號或關(guān)鍵詞來確定結(jié)構(gòu),這被稱為越位規(guī)則。在這種語言中,縮進(jìn)對編譯器或解釋器有意義,而不僅僅是清晰度或風(fēng)格問題。
目錄
1 大括號位置
2 制表符、空格及縮進(jìn)尺寸
3 工具
4 風(fēng)格
4.1 K&R
4.1.1 變種:1TBS (OTBS)
4.1.2 變種:Java
4.1.3 變種:Stroustrup
4.1.4 變種:Linux內(nèi)核
4.1.5 變種:BSD KNF
4.2 阿爾曼風(fēng)格
4.2.1 變種:Allman-8
4.3 Whitesmiths style
4.4 GNU風(fēng)格
4.5 Horstmann風(fēng)格
4.6 Pico風(fēng)格
4.7 Ratliff風(fēng)格
4.8 Lisp風(fēng)格
4.9 Haskell風(fēng)格
5 其他考慮
5.1 丟失塊蹤跡
5.2 聲明的插入
6 參見
7 參考資料
8 外部鏈接
大括號位置
縮進(jìn)風(fēng)格的主要區(qū)別在于復(fù)合語句的大括號({...})的位置,這通常是為涵蓋一個(gè)控制聲明(if、while、for...)。下表展示了本條目中討論的所有風(fēng)格的所在位置。為了一致性,縮進(jìn)深度(字符數(shù))統(tǒng)一使用4個(gè)空格表示,這未考慮各風(fēng)格中首選的縮進(jìn)深度。
大括號位置
風(fēng)格
while (x == y) {
something();
somethingelse();
}
K&R及變種:
1TBS、Stroustrup、Linux內(nèi)核、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
制表符、空格及縮進(jìn)尺寸
縮進(jìn)的尺寸通常與風(fēng)格無關(guān)。許多早期程序使用制表符來縮進(jìn),從而簡化輸入和節(jié)約源代碼文件的大小。Unix器通常將制表符視為等同八個(gè)字符,而Macintosh和Windows環(huán)境將它視作四個(gè)字符[來源請求],這使代碼在各環(huán)境間交換時(shí)產(chǎn)生一種混亂。現(xiàn)代的編程器通常可以設(shè)置任意的縮進(jìn)尺寸,并會插入適當(dāng)?shù)闹票矸c空格。對Ruby、許多shell腳本語言和某些形式的HTML格式,通常為每個(gè)縮進(jìn)級別使用兩個(gè)空格。[1]
使用制表符還是空格作為縮進(jìn)字符是編程界的一項(xiàng)持續(xù)爭論。杰米·加文斯基等一些程序員認(rèn)為空格而非制表符有助增加跨平臺可移植性。[2]而如WordPress編碼規(guī)范的作者則認(rèn)為制表符增加了可移植性。[3]
工具
目前已有許多計(jì)算機(jī)程序可以自動校正縮進(jìn)風(fēng)格(依照程序作者或用戶的偏好)以及制表符表示的縮進(jìn)長度。其中很著名的一個(gè)是indent,這個(gè)程序包含在許多類Unix操作系統(tǒng)中。
在Emacs中,有多種命令可用于自動解決縮進(jìn)問題。
Elastic tabstops是一種需要文本器支持的制表風(fēng)格,當(dāng)塊中的一行的長度改變時(shí),整個(gè)文本塊將自動對齊。
風(fēng)格
K&R
K&R風(fēng)格常在C、C++以及其他大括號編程語言(英語:Curly brace programming language)中使用。在布萊恩·柯林漢與丹尼斯·里奇的《C程序設(shè)計(jì)語言》一書中也有使用。它起源于Kernighan和Plauger的《編程風(fēng)格的元素(英語:The Elements of Programming Style)》及軟件工具。
變種:1TBS (OTBS)
變種:Java
變種:Stroustrup
變種:Linux內(nèi)核
變種:BSD KNF
阿爾曼風(fēng)格
變種:Allman-8
Whitesmiths style
GNU風(fēng)格
Horstmann風(fēng)格
Pico風(fēng)格
Ratliff風(fēng)格
Lisp風(fēng)格
Haskell風(fēng)格
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的段落和一般程序文本會省略大括號和分號,但這種風(fēng)格通常用于由一對括號或大括號組成的列表、記錄或其他句法元素,并用逗號或分號分隔。[5]
其他考慮
丟失塊蹤跡
在某些情況下存在著丟失塊邊界的軌跡的風(fēng)險(xiǎn)。這通常在包含許多復(fù)雜語句的大量代碼中看到,這些復(fù)合語句嵌套了許多層的縮進(jìn)。當(dāng)程序員滾動到一大堆嵌套語句的底部時(shí),他可能已經(jīng)忘記了哪些控制語句轉(zhuǎn)到哪里。不過,過長的代碼也可能有其他原因, 諸如過于復(fù)雜,面對這個(gè)問題的程序員可能會考慮代碼重構(gòu)以期待它在未來有更好的體驗(yàn)。
for (int i = 0; i < total; i++) {
foo(bar);
} //for (i)
if (x < 0) {
bar(foo);
} //if (x < 0)
聲明的插入
在使用標(biāo)準(zhǔn)的Unix行器ed(英語:Ed (text editor))時(shí),K&R風(fēng)格能防止一個(gè)常見的錯(cuò)誤。在控制語句與循環(huán)塊的開啟大括號之間錯(cuò)誤地插入的語句將使循環(huán)體變?yōu)閱未螆?zhí)行。
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風(fēng)格通過將控制語句和開啟括號保持在同一行來避免此問題。
參見
次級符號(英語:Secondary notation)
語法突顯
縮進(jìn) (排版)#編程中的縮進(jìn)(英語: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
開放式目錄計(jì)劃中和Source Code Formatters相關(guān)的內(nèi)容
總結(jié)
以上是生活随笔為你收集整理的java开发用allman风格_缩进风格的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 固态硬盘架构
- 下一篇: FFmpeg av_dump_forma