1. 程式人生 > >編寫超級可讀程式碼的15個最佳實踐

編寫超級可讀程式碼的15個最佳實踐

譯者:蔣宇捷(轉載請標明出處-http://blog.csdn.net/hfahe)

一月兩次,我們重溫Nettuts歷史上讀者最喜歡的文章。

       程式碼可讀性是一個計算機程式設計世界的普遍主題。它是我們作為開發者第一件學習的事情。這篇文章將闡述編寫可讀性程式碼十五個最重要的最佳實踐。

1 – 註釋和文件

整合開發環境IDE在過去的短短几年裡走過了很長的路。它使得註釋程式碼比以前更加有用。依照特定標準書寫的註釋允許IDE和其他工具通過不同的方式來使用它們。

考慮如下示例:

我在函式定義中新增的註釋可以在呼叫它的地方看到,即便是在其他檔案中。

這裡是我另外一個從第三方庫中呼叫函式的例子:

在這些特殊的例子中,使用的註釋(或者文件)型別基於IDE

2 – 一致的排版

我假定你已經知道了你必須要縮排你的程式碼。然而,保持排版樣式一致仍然是一個好主意。

這裡有不止一種方式來進行程式碼排版。

第一種:

 

第二種:

 

第三種:

 

我曾經使用第二種樣式但是最近換為第一種。但是這僅僅只代表了一種偏愛。這裡並沒有每個人必須要遵守的“最好的”樣式。事實上,最佳的樣式,就是一致的樣式。如果你是一個小組的一部分或者你在為一個專案貢獻程式碼,你必須依照這個專案之前使用的樣式。

排版的樣式總不是完全和另外一個不同。有時,它們混合了多種不同的規則。例如,按照,前括弧“{”和控制結構在同一行上,但是在功能定義後放在第二行上。

PEAR樣式:

 

同時注意它們使用4個空格而不是Tab來縮排。

這裡有一個維基百科的文章,裡面有許多不同排版樣式的例子。

3 – 避免顯而易見的註釋

為程式碼添加註釋是效果顯著的;但是,它可能太過或者只是多餘的文字。像如下例子:

  

       如果註釋內容都是顯而易見的,它們並沒有提高工作效率。如果你必須要註釋這些程式碼,你可以簡單的把它們合併在一行:

 

4 – 程式碼分組

確定的任務多半需要多行程式碼。使用一些空白將這些任務的程式碼分隔為幾段是一個好主意。

這是一個簡單的示例:

 

在每一段之前添加註釋也增強了視覺上的分隔。

5 – 命名的一致性

       PHP有些時候在遵守命名一致性方面有很大問題:

  • strops()str_split()
  • imagetypes()image_type_to_extension()

       首先,這些命名必須有單詞的分界線。有兩種流行的選擇:

  • 駱駝命名法:除了第一個單詞外,每個單詞的第一個字元大寫。
  • 下劃線命名法:單詞間採用下劃線,例如mysql_real_escape_string()

       像我之前提到的一樣,採用不同的命名選擇會建立和排版樣式類似的情形。如果一個已有的專案遵照一個確定的習慣,你必須遵守它。同時,某些語言平臺傾向於使用特定的命名規則。例如Java裡,大多數程式碼使用駱駝命名法;在PHP裡大多采用下劃線命名法。

它們也可以混用。一些開發者喜歡在程式函式和類名上使用下劃線命名,但是在類方法名上使用駱駝命名。

 

所以,沒有明顯的“最好的”樣式,只需要保持一致。

6 – DRY原則

DRY即不要重複你自己。也被稱為DIE:重複是惡魔。

這個原則規定:

“在一個系統裡每一個知識的片段必須有一個單一、明確、權威的表現。”

大多數應用程式(或者通常的計算機)的目的是讓重複的任務自動化。這個原則在所有的程式碼,即使Web程式中也應該保持。程式碼的相同片段不應該多次重複。

例如,大多數Web程式由許多頁面組成。這些頁面很可能包含相同的元素。頁頭和頁尾經常符合這個條件。複製和貼上這些頁頭和頁尾到每一個頁面中不是一個好主意。這是Jeffrey Way解釋如何在CodeIgniter裡建立模版的連結

 

7 – 避免過深的巢狀

太多層的巢狀會造成程式碼閱讀和跟蹤困難。

 

為了可讀性,通常需要修改程式碼來減少巢狀的層數。

 

8 – 減少行的長度

我們的眼睛對於閱讀高和窄的文字列更感覺舒適。這就是為什麼報紙文章看起來像如下樣子的原因:

避免在一行上編寫過長的程式碼是一個最佳實踐。

 

同時,如果任何人想要在例如Vim這樣的終端視窗中閱讀程式碼,限制每一行的長度在80個字元以內是一個好主意。

9 – 程式碼結構

理論上,你可以將整個應用程式碼寫在一個檔案裡。但是對於閱讀和維護來說是一個噩夢。

在我的第一個程式設計專案中,我知道建立“包含檔案”的含義。但是,我並沒有好好進行組織。我建立了一個“inc”資料夾,放置了兩個檔案:db.phpfunctions.php。當程式變大時,functions檔案也變得越來越大並難以維護。

最好的方法之一是採用框架或者模仿它們的資料夾結構。下面是CodeIgniter的檔案結構:

10 – 統一的臨時變數名

通常,變數名應該是描述性的並且包含一個或者更多的單詞。但是,這對臨時變數來說並不是必須的。它們可以短到只有一個單獨字元。

最佳實踐是:對於有同樣職責臨時變數採用統一的命名。這裡有一些我傾向於在程式碼裡使用的例子:

 

11 – SQL關鍵詞大寫

資料庫互動對於大多數Web應用來說是很大一個組成部分。如果你正在編寫SQL查詢,儘量保持它們可讀。

即使SQL關鍵詞和函式名是大小寫無關的,大寫來將它們從表名和列名中區分出來是一個通用的實踐。

 

12 – 程式碼和資料分離

這是另外一個對於所有環境下的絕大多數程式語言都適用的原則。在Web開發中,資料通常意味著HTML輸出。

PHP許多年前第一次釋出時,它最開始被看作是一個模版引擎。在巨大的HTML檔案裡插入一些PHP程式碼行是非常普通的。但是,這些年來,事情發生了改變:網站變得越來越動態化和功能化。程式碼已經是Web程式的一個很大的部分,將它們和HTML合併在一起並不是一個好的實踐。

你可以在你的程式中應用這個原則,或者你可以使用一個第三方工具(模版引擎、框架或者CMS系統)或者依照它們的習慣。

       流行的PHP框架:

       流行的模版引擎:

       流行的CMS系統:

  • Joomla
  • Drupal

13 – 模版內的交替格式

你可以選擇不使用一個奇特的模版引擎,取而代之的是在模版檔案裡使用純內聯的PHP程式碼。這不是必須要違反“資料和程式碼分離“,只是內聯程式碼是直接和輸出相關的,並且可讀。在這種情況下你可以考慮使用交替格式來控制結構。

這是一個示例:

 

這讓你避免了許多大括號。同時代碼看起來和HTML的結構和排版相似。

14 – 面向物件 vs 面向程式

面向物件程式設計可以幫助你建立結構化程式碼。但是這不代表你完全排除程式化程式設計。事實上建立兩者混合的風格是非常棒的。

描述資料,通常是資料庫裡的資料,必須使用物件。

 

程式化方法常用於可以獨立執行的特定任務。

 

15 – 閱讀開原始碼

開源專案是許多開發者一起構建的。這些專案必須保持高度的程式碼可讀性,以便他們可以儘可能高效的協同工作。

因此,通讀這些專案的原始碼來觀察這些開發者是如何工作的是非常棒的方法。

16 – 程式碼重構

當你“重構“,你在不改變功能的情況下調整程式碼。你可以把它看作是“清理”,為了改進程式碼質量和可讀性。

這並不包括bug的修復或者新增新功能。你可以重構你之前編寫的程式碼,當它們在你頭腦你還保持新鮮的時候,以便於你兩個月以後有可能回顧程式碼時更加可讀和可重用。就像那句格言所說的一樣:“儘早重構,經常重構“。

你可以在重構期間應用以上任何關於程式碼可讀性的“最佳實踐“。我希望你喜歡這篇文章!我遺忘了什麼?請通過回覆告知我。

相關推薦

編寫超級程式碼15最佳實踐

譯者:蔣宇捷(轉載請標明出處-http://blog.csdn.net/hfahe) 一月兩次,我們重溫Nettuts歷史上讀者最喜歡的文章。        程式碼可讀性是一個計算機程式設計世界的普遍主題。它是我們作為開發者第一件學習的事情。這篇文章將闡述編寫可讀性程

15最佳的 JavaScript 表單驗證庫

就是 www. 信用卡 號碼 大型 端口 共享 魯棒性 max 客戶端驗證在任何項目都是不夠的,因為 JavaScript 可以直接忽略,人們可以提交請求到服務器。 然而這並不意味著客戶端驗證都沒必要了,很多時候我們需要在用戶提交到服務器之前給予提示。JavaScript

編寫 Node.js Rest API 的 10 最佳實踐

Node.js 除了用來編寫 WEB 應用之外,還可以用來編寫 API 服務,我們在本文中會介紹編寫 Node.js Rest API 的最佳實踐,包括如何命名路由、進行認證和測試等話題,內容摘要如下: 正確使用 HTTP Method 和路由 正確的使用 HTTP 狀態碼 使用 HTTP H

編寫 Dockerfile 的五最佳實踐

此文適合Docker初學入門讀者,大師請繞行!,遵守最佳實踐可少踩坑、提升效能體驗及可移植性,期望對讀者有所幫助! 什麼是Dockerfile Dockerfile 是一個文字檔案,裡面包含了打包Docker映象所需要用到的命令。Docker 可以通

Ubuntu上使用的15桌面環境

  Linux下桌面環境很多,Ubuntu之家給大家總結了比較常用的15個桌面環境,並附上Ubuntu 12.10(Linux Mint 14)的安裝方式。對於其他的版本也可以使用該方式進行安裝,但不能保證能成功安裝,請放心即使不能安裝也不會出現問題。以下列舉的圖片均來自

每個程式設計師都應該知道的 15 最佳 PHP 庫

1. PChart PChart是一個令人印象深刻的PHP庫,可以以一種視覺化圖表的形式生成文字資料。資料可以展示為柱狀圖,餅狀圖,以及其他格式。使用SQL查詢可以幫助PHP指令碼建立令人驚歎的圖表和圖形。 2. PHP CAPTCHA PHP CAPTCHA是另一個偉

MySQL性能優化的21最佳實踐 和 mysql使用索引

oct 靜態 state zid 希望 lte 適合 實踐 打開 今天,數據庫的操作越來越成為整個應用的性能瓶頸了,這點對於Web應用尤其明顯。關於數據庫的性能,這並不只是DBA才需要擔心的事,而這更是我 們程序員需要去關註的事情。當我們去設計數據庫表結構,對操作數據庫時(

MySQL性能優化的21最佳實踐

明顯 架構 crash 其它 string 簡單的 nts arch 網絡 當我們去設計數據庫表結構,對操作數據庫時(尤其是查表時的SQL語句),我們都需要註意數據操作的性能。這裏,我們不會講過多的SQL語句的優化,而只是針對MySQL這一Web應用最多的數據庫。 1. 為

完美CSS文檔的8最佳實踐

風格 產品經理 sta war support display 主題 ucd 發生 在css的世界,文檔沒有被得到充分的利用。由於文檔對終端用戶不可見,因此它的價值常常被忽視。另外,如果你第一次為css編寫文檔,可能很難確定哪些內容值得記錄,以及如何能夠高效完

數據湖是一種方法 數據湖的四最佳實踐

發出 就是 arc 而不是 程序集 image new 裏的 子郵件 轉載自:http://bigdata.chinabyte.com/311/13871811.shtml數據湖聽起來很簡單:把數據或信息匯集到一個結合處理速度和存儲空間的大數據系統――Hadoop集群或內存

Java 中處理異常的 9 最佳實踐

lan method 永遠 是否 res ati 是你 dex mes 在本文中,作者介紹了9個處理異常的最佳方法與實踐,以舉例與代碼展示結合的方式,讓開發者更好的理解這9種方式,並指導讀者在不同情況下選擇不同的異常處理方式。 以下為譯文: Java中的異常處理不是一個簡單

[譯] Node.js 高效能和擴充套件應用程式的最佳實踐 [第 2/3 部分]

原文地址:Good practices for high-performance and scalable Node.js applications [Part 2/3] 原文作者:virgafox 譯文出自:掘金翻譯計劃 本文永久連結:github.com/xitu/gold

[譯] Node.js 高效能和擴充套件應用程式的最佳實踐 [第 1/3 部分]

原文地址:Good practices for high-performance and scalable Node.js applications [Part 1/3] 原文作者:virgafox 譯文出自:掘金翻譯計劃 本文永久連結:github.com/xitu/gold

Java 程式設計中關於異常處理的10最佳實踐

        異常處理是Java 開發中的一個重要部分。它是關乎每個應用的一個非功能性需求,是為了處理任何錯誤狀況,比如資源不可訪問,非法輸入,空輸入等等。Java提供了幾個異常處理特性,以try,catch 和 finally 關鍵字的形式內建於語言自

有效資料湖攝取的5最佳實踐

在不斷波動的技術環境和客戶市場政策的世界中,資料已成為最大的商業資產之一。它加強並提高了組織在競爭中取得領先地位的能力。因此,它是一個關鍵的價值創造者,其管理,定期維護和儲存對於規劃未來持續成功的企業來說非常重要。多年來技術的進步在資料建立和儲存方面都是有利的,但它們永遠不足以進行有效的資料管理。有時,企

Java異常處理的9最佳實踐

無論你是新手還是資深程式設計師,複習下異常處理的實踐總是一件好事,因為這能確保你與你的團隊在遇到問題時能夠處理得了它。 在 Java 中處理異常並不是一件易事。新手覺得處理異常難以理解,甚至是資深開發者也會花上好幾個小時來討論是應該丟擲拋異常還是處理異常。 這就是為何大多

程式碼評審的最佳實踐

        沒有人否認code review(程式碼評審、複查) 對提高程式碼質量的作用,但是如何進行code review? 這裡 確實存在一些方法和技巧。方法不當,會浪費大量時間、造成低效率;流程過緊,會大大降低生產力,流程過鬆,很難知道code review的效果,

規模化敏捷開發的10最佳實踐(上)

【編者按】軟體開發和採購人員經常會對現有軟體開發方法、技巧和工具產生一些疑問。針對這些疑問,Kevin Fall 整理了五個軟體方面的話題:Agile at Scale,Safety-Critical Systems,Monitoring Software-In

Java中處理異常的9最佳實踐

【譯者注】在本文中,作者介紹了9個處理異常的最佳方法與實踐,以舉例與程式碼展示結合的方式,讓開發者更好的理解這9種方式,並指導讀者在不同情況下選擇不同的異常處理方式。 以下為譯文:Java中的異常處理不是一個簡單的話題。初學者很難理解,甚至有經驗的開發人員也會

極限程式設計(XP)12最佳實踐

現場客戶 ( On-site Customer ) 程式碼規範 ( Code Standards ) 每週40小時工作制 ( 40-hour Week ) 計劃博弈 ( Planning Game ): 要求結合專案進展和技術情況,確定下一階段要開發與釋出的系統範圍。 系統隱喻 ( System Meta