程式碼樣式的另類風格!開眼
有許多優秀,整潔的程式碼風格指南。這些標準包括縮排,空格,行長度,命名約定等。一些著名的例子是:
流行風格也有很多資訊,歷史,工具等。是否受夠了他們?讓我們來看看一些鮮為人知的候選方案!
Bournegol
讓我們從最著名的替代程式碼風格開始吧!Bournegol是Steven Bourne在sh原始碼中使用的C編碼風格。它使C看起來更像Algol,有些人認為它具有更好的語法。以下是
main.c:
/* command loop */
LOOPtdystak(0);
stakchk(); /* may reduce sbrk */
exitset();
IF (flags&prompt) ANDF standin->fstak==0 ANDF !eof
THENIF mailnod.namval
ANDF stat(mailnod.namval,&statb)>=0 ANDF statb.st_size
ANDF (statb.st_mtime != mailtime)
ANDF mailtime
THENprs(mailmsg)
FI
mailtime=statb.st_mtime;
prs(ps1nod.namval); alarm(TIMEOUT); flags |= waiting;
FI
trapnote=0; peekc=readc();
IF eof
THENreturn;
FI
alarm(0); flags &= ~waiting;
execute(cmd(NL,MTFLG),0);
eof |= (flags&oneflg);
POOL
看起來沒有大括號!這是一個非常好的例子,說明了如何使用C前處理器來看似修改C的語法。所有sh原始檔都可以在 這裡 找到 。
對於任何希望在自己的程式碼中使用此程式碼樣式的人來說,其實現的巨集程式碼在 mac.h中 。提取如下:
#define LOCALstatic
#define PROCextern
#define TYPEtypedef
#define STRUCTTYPE struct
#define UIO/">NIONTYPE union
#define REGregister
#define IFif(
#define THEN){
#define ELSE} else {
#define ELIF} else if (
#define FI;}
詩歌
程式碼可以是一種藝術形式。雖然函式通常放在程式碼中的形式之前,但是打破趨勢併產生本身很美的原始碼並沒有什麼壞處。形式最簡單,程式碼詩可以是具有對齊的程式碼,用於產生類似詩歌的效果。例如 @mraleph的 這條推文:
格式化程式碼的新創新方式:程式設計是一門藝術,每個節目都是一首詩。另一個應用於我的專案( c-calculator )中心對齊的例子:
// splits the expression into tokens (a makeshift linked list structure)
// returns a pointer to the list, or NULL if tokenizing failed
linked_list * tokenize(char exp[], const double * const last_answer,
const double * const memory) {
// setup variables
linked_list * tokens_head = new_linked_list();
bool first = true; // true while at first token
token previous = {NOTHING, 0};
token temp_token = {NOTHING, 0};
// insert a token if there was a last answer,
//and the first thing is an operator.
if (last_answer != NULL) {
switch (exp[0]) {
case '-':
case '+':
case '*':
case '/':
case '^':
case '#':
temp_token.type = LITERAL;
temp_token.value = *last_answer;
previous = add_token(tokens_head, temp_token);
first = false;
break;
}
}
相當令人愉悅!好訊息是這種風格也容易在Vim中自動應用。假設你遵守標準的80字元行限制,可以簡單地執行
:%center 40 就能
格式化整個檔案啦。
詩歌程式碼造型並不止於此!人們可以融入更多的詩意元素來製作真正的藝術作品。 code-poetry.com 包含一些傑作。
斐波那契縮排
縮排縮排一直是熱門話題。標籤或空格?兩個,四個,甚至八個空格?讓我們新增一個新選項!歡迎來到Fibonacci縮排數量。
@RichardWestenra 在推特上宣傳斐波那契縮排風格:
摘錄
就個人而言,就個人而言,我更喜歡按照Fibbonaci序列增加的縮排空格: pic.twitter.com/x5lPd4M5Mk
當代碼深度巢狀時,這種風格特別好,產生一個很好的曲線效果。甚至還有一個用於自動享受斐波那契縮排樂趣的 vim外掛 !下面是來自儲存庫的截圖,顯示了它的整潔程度。

大括號 - > Python風格
Python有一個乾淨的語法,沒有所有那些凌亂的分號和大括號。如果您的眼球無法處理所有額外的標點符號,這種程式碼風格適合您。這裡介紹一種很簡單的風格:只需在語法結束行之前新增空格,直到它們超過允許的最大行長度。來源是來自 reddit的 帖子,這表明,即使Java可以合適的款式看起來很漂亮。
下面一個具有這種風格的一些Rust程式碼的快速示例。Rust是一種語法繁重的語言,很明顯,程式碼現在更清晰,更易於閱讀。也就是說,如果忽略超過80個字元行長度限制的所有內容...;)
fn run() -> io::Result<()>{
let mut args = env::args();
let _procname = args.next();
let ifname: String = match args.next(){
Some(arg) => match arg.as_ref(){
"--help" | "-h"=>{
help();
return Ok(());}
s=>
s.to_owned(),},
None=>{
".".to_owned()}};
let ft = fs::metadata(&ifname)?.file_type();
if ft.is_dir(){
process_dir(ifname)}
else{
process_file(ifname)}}
混淆Obsfucation
我想這可以合法地稱為風格。有趣的是,它可能是迄今為止使用最廣泛的程式碼風格。大量生產性Javascript程式碼被縮小,程式碼變得徹底混淆了。當然,這種至簡風格確實不適合由人類直接編輯。除非你進入逆向工程。在 國際混淆C程式碼 競賽等競賽中,競爭對手也使用了它作為一種風格,陰謀?例如,您能猜出這段程式碼的作用嗎?char O,o[];main(l){for(;~l;O||puts(o))O=(O[o]=~(l=getchar())?4<(4^l>>5)?l:46:0)?-~O&printf("%02x ",l)*5:!O;}
這獲得了IOCCC 2018年度最佳單線獎。( 來源 )其他參賽作品非常棒,值得一試,特別是如果你是C程式員。
結論
約束有助於提供創造力。嚴肅地說,這些風格是在程式語言語法和語義的約束下構建的真正創造性作品的絕佳例子。結果可能是有用的,漂亮的,有趣的,或徹頭徹尾的恐怖。