在過去的7年半時間裡,我帶過的軟體實習生超過一打,也看到數以百計的學生和畢業生的檔案。我發現很多事情他們都需要學習。或許你會說,我說的不就是某種特定的技術、演算法、數學,或是其他特定形式的知識嗎?沒錯,這的確是需要學習的,但卻不是最重要的事。他們需要學習的最重要的東西是「自我規範」。這些規範就是:盡可能寫出最簡潔的程式碼;如果程式碼後期會因為改動而變得凌亂不堪就得重構;盡量刪除沒用的程式碼,並添加註解。
我花了很多時間來敦促這些實習生去學習這些內容。我常常問他們,怎麼樣才能成為優秀的php程式設計師,他們也通常會回答說,程式碼應該要清晰易懂易於維護。這的確是我想聽到的聲音,但是很少有年輕的程式設計師真的能夠始終如一地貫徹這一點。
請謹記這一點,要懂得“自我規範”,也不能一旦代碼“起效了”就立刻置之腦後。如果所有的變數都命名錯誤,但是程式碼依然可以完美地運行,那麼這些程式碼絕對亂糟糟得讓人不忍直視。將功能代碼改進為簡潔代碼可能在短期內是看不到回報的:代碼原本就可以工作,在清潔之後依然可以工作。這就是為什麼你需要「自我規範」這一步驟了。這也是為什麼實習工作是如此必要:一個好的上司是相當注重程式碼品質的(即使所謂「好程式碼」的定義對於每個程式設計師都不一樣),從而迫使實習生和初級程式設計師不得不反覆修改。
下面我舉的一些例子都是新手程式設計師寫程式碼的時候常出現的:
名不副實的函數/變數/類別
這些函數、類別和變數所做的名字表達的含義並不一致。片面看名字是正確的,但是聯繫實際的話,有的甚至是毫不相關的。
舉個例子,我上一期的實習生寫了兩個類別:EditorGUI和EditorObjectCreatorGUI。用於處理編輯介面的程式碼。讓我哭笑不得的是,用來建立新物件的是EditorGUI,而EditorObjectCreatorGUI只能透過處理不同的物件來導覽。兩者的意義居然是截然相反的!即使程式碼還算相對簡單,但我還是花了相當長的一段時間用來理解它,因為一開始我是在一個完全相反的假設基礎上來理解的。這種情況的解決方案非常簡單:重新命名EditorObjectCreatorGUI為EditorObjectNavigationGUI即可,這樣就易於理解多了。
這種情況我看到很多。之所以會發生這種情況是因為程式碼在工作過程中發生了演變。在選擇名字的時候可能還是正確的,但到了寫完程式碼的那一刻,就名不副實了。關鍵是要時時銘記命名法則。你得明白你添加的東西是否依然符合函數和類別的名稱。
混亂的類別
另一個問題是類很亂:類做了很多不相關的事情。新功能的添加很簡單,但是慢慢的,你會發現你的程式碼變得臃腫不堪,各種不相關的功能隨處可見。有時候,臃腫與否也不指的是類別的大小:某個類別可能只有幾百行,但依然囊括了不屬於它的程式碼。
為什麼會發生這種情況呢?舉個例子:假設因為某些原因,某個GUI類別需要分析什麼樣的紋理可行(可能是有按鈕要用來選擇紋理)。如果這個GUI類別是唯一需要這個分析結果的類別,那麼在GUI類別中這樣做是有意義的。然而,由於某種原因,一個完全無關的gameplay類別也需要這些資訊。所以你需要將這些紋理查詢的資訊從GUI類別傳給gameplay類別。這時候,其實這個GUI類別已經變大了:因為它裡面其實還包含了TextureAnalyser類別。解決方法也簡單:將TextureAnalyser類別分割為一個單獨的類,GUI類別和gameplay類別都可以使用它。
關於這一條經驗法則很多人提出質疑:要是我添加的功能仍然適合原來這個類的名字呢?如果的確不適合,那麼我就必須重命名,或者將其分割成單獨的類,抑或用代碼寫成一個不同的類嗎?
如果你不能為你的類別想出一個合適的名字,給人的感覺就會不舒服。如果你不能在類別的名字中描述它的目的,那麼就會顯得亂七八糟。有時候我們還需要將某個臃腫的類別分割成幾個部分,並各自取一個恰當的名字。
過於龐大的類
分割一個已經長得很大的類其實是相當枯燥的。這也會成為一個挑戰,如果類別中的程式碼高度交織在一起的話。再加上它已經在工作,修復時不能添加新功能,這樣一來,我不得說,分割一個過於龐大的類,不能嚴格地自我規範是不行的。
根據在Ronimo的普遍經驗,類別保持在500行程式碼以下、函數保持在50行程式碼以下是最適合的。不過有時候,這樣做反而不可行,也不明智。但是一般說來,一旦類別或函數超出了那個界限我們就可以想辦法重構,並將之分割為更小更易於管理的片段了。
關於程式碼註解
幾乎的程式碼都會包含註解好了的程式碼片段,而不說明為什麼。這段程式碼需要修復嗎?舊的程式碼是否已經被取代了?為什麼那兒要寫這些程式碼?大家都知道沒有註解的程式碼常常不知所言,但不知何故,很多人都會忘記在自己的程式碼上註解。
平行邏輯和程式碼重複
例如,我們可以從紋理這個名稱知道它大概的目標對象,比如說是「TreeBackground.dds」。為了知道紋理是否可以用於tree,我們檢查了檔案名稱以便知道它是不是以「tree」開的頭。可能使用SDK的話我們用filename.beginsWith(「tree」)可以很快地偵測出來。只是這句程式碼這麼短,我們往往會選擇哪個地方需要,就直接複製貼上。當然這樣就是程式碼重複了,而正如每個人都知道的,我們應該避免重複程式碼,但如果複製的程式碼是如此之短,我們往往會忘記這一點,很自然地就直接copy了。這裡我們面對的問題也是顯而易見的:也許後面我們檢查某個紋理是否適合tree的方法就得變了,然後我們就不得不實行「霰彈槍式修改」(即到處修改)策略,一處一處地修復。 此處的一般規律是,如果是非常具體的程式碼,那就不要複製,即使原本的程式碼超級之短,呼叫函數甚至比直接寫入需要更多的程式碼,也應該封裝成函數。 上面討論的這些內容已經講得非常透徹了。很多內容甚至你在大學就學過。但是現在要面臨的挑戰是你需要一步一步地從被動遵守到主動銘記於心養成一種習慣。這也是為什麼Ronimo中的實習生最重要的不是學習知識,而是學會自我規範。
免費領取兄弟連IT教育原創php教學光碟/《細說PHP》精要版,詳情諮詢官網客服:http://www.lampbrother.net
學PHP、Linux、HTML5、UI、Android等影片教學(課件筆記影片)!聯絡Q2430675018
參加活動領取兄弟連原創視訊教學光碟合集:http://www.lampbrother.net/newcd.html
|

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

HTTP緩存頭的關鍵玩家包括Cache-Control、ETag和Last-Modified。 1.Cache-Control用於控制緩存策略,示例:Cache-Control:max-age=3600,public。 2.ETag通過唯一標識符驗證資源變化,示例:ETag:"686897696a7c876b7e"。 3.Last-Modified指示資源最後修改時間,示例:Last-Modified:Wed,21Oct201507:28:00GMT。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP是一種服務器端腳本語言,用於動態網頁開發和服務器端應用程序。 1.PHP是一種解釋型語言,無需編譯,適合快速開發。 2.PHP代碼嵌入HTML中,易於網頁開發。 3.PHP處理服務器端邏輯,生成HTML輸出,支持用戶交互和數據處理。 4.PHP可與數據庫交互,處理表單提交,執行服務器端任務。

PHP在過去幾十年中塑造了網絡,並將繼續在Web開發中扮演重要角色。 1)PHP起源於1994年,因其易用性和與MySQL的無縫集成成為開發者首選。 2)其核心功能包括生成動態內容和與數據庫的集成,使得網站能夠實時更新和個性化展示。 3)PHP的廣泛應用和生態系統推動了其長期影響,但也面臨版本更新和安全性挑戰。 4)近年來的性能改進,如PHP7的發布,使其能與現代語言競爭。 5)未來,PHP需應對容器化、微服務等新挑戰,但其靈活性和活躍社區使其具備適應能力。

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

WebStorm Mac版
好用的JavaScript開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中