文章編號:11669時間:2024-10-01人氣:
全局變量是一種在程序的任何地方都可以訪問和修改的變量。雖然它們在某些情況下很有用,但濫用全局變量會給代碼帶來一系列問題,包括代碼異味和維護難題。
為了避免全局變量的陷阱,有以下一些最佳實踐:
全局變量是一種有價值的工具,但它們也可能帶來一系列問題。通過遵循這些最佳實踐,您可以避免全局變量的陷阱,編寫更健壯、更易維護的代碼。
對,你沒看錯,本文就是教你怎么寫出讓同事無法維護的代碼。
一、程序命名
容易輸入的變量名。比如:Fred,asdf
單字母的變量名。比如:a,b,c, x,y,z(如果不夠用,可以考慮a1,a2,a3,a4,….)
有創意的拼寫錯誤。 比如:SetPintleOpening, SetPintalClosing。 這樣可以讓人很難搜索代碼。
抽象。 比如:ProcessData, DoIt, GetData… 抽象到就跟什么都沒說一樣。
縮寫。比如:WTF,RTFSC …… (使用拼音縮寫也同樣給力,比如:BT,TMD,TJJTDS)
隨機大寫字母。比如:gEtnuMbER..
重用命名。 在內嵌的語句塊中使用相同的變量名有奇效。
使用重音字母。比如:int ínt(第二個 ínt不是int)
使用下劃線。 比如:_, __, ___。
使用不同的語言。 比如混用英語,德語,或是中文拼音。
使用字符命名。比如:slash, ASTerix, comma…
使用無關的單詞。比如:god, superman, iloveu….
混淆l和1。 字母l和數字1有時候是看不出來的。
二、偽裝欺詐
把注釋和代碼交織在一起。
total += array[j+0 ];
total += array[j+1 ];
total += array[j+2 ]; /* Main body of
total += array[j+3]; * loop is unrolled
total += array[j+4]; *forgreater speed.
total += array[j+5]; */
total += array[j+6 ];
total += array[j+7 ];
代碼和顯示不一致。比如,你的界面顯示叫postal code,但是代碼里卻叫 zipcode.
隱藏全局變量。 把使用全局變量以函數參數的方式傳遞給函數,這樣可以讓人覺得那個變量不是全局變量。
使用相似的變量名。 如:單詞相似,swimmer 和 swimner,字母相似:ilI1| 或 oO08。 parselnt 和 parseInt, D0Calc 和 DOCalc。 還有這一組:xy_Z, xy__z, _xy_z, _xyz, XY_Z, xY_z, Xy_z。
重載函數。 使用相同的函數名,但是其功能和具體實現完全沒有關系。
操作符重載。 重載操作符可以讓你的代碼變得詭異,感謝CCTV,感謝C++。 這個東西是可以把混亂代碼提高到一種藝術的形式。 比如:重載一個類的 ! 操作符,但實際功能并不是取反,讓其返回一個整數。 于是,如果你使用 ! ! 操作符,那么,有意思的事就發生了—— 先是調用類的重載 ! 操作符,然后把其返回的整數給 ! 成了 布爾變量,如果是 !!! 呢?呵呵。
三、文檔和注釋
在注釋中撒謊。 你不用真的去撒謊,只需在改代碼的時候不要更新注釋就可以了。
注釋里面寫廢話。比如:/* add 1 to i */
只注釋是什么,而不是為什么。
不要注釋秘密。 如果你開發一個航班系統,請你一定要保證每有一個新的航班被加入,就得要修改25個以上的位置的程序。 千萬別把這個事寫在文檔中。
注重細節。 當你設計一個很復雜的算法的時候,你一定要把所有的詳細設計都寫下來,沒有100頁不能罷休,段落要有5級以上,段落編號要有500個以上,例如:1.2.4.6.3.13 – Display all impacts for activity where selected mitigations can apply (short pseudocode omitted). 這樣,當你寫代碼的時候,你就可以讓你的代碼和文檔一致,如:Act1_2_4_6_3_13()千萬不要注釋度衡單位。 比如時間用的是秒還是毫秒,尺寸用的是像素還是英寸,大小是MB還是KB。 等等。 另外,在你的代碼里,你可以混用不同的度衡單位,但也不要注釋。
Gotchas 。 陷阱,千萬不要注釋代碼中的陷阱。
在注釋和文檔中發泄不滿。
四、程序設計
Java Casts。 Java的類型轉型是天賜之物。 每一次當你從Collection里取到一個object的時候,你都需要把其轉回原來的類型。 因些,這些轉型操作會出現在N多的地方。 如果你改變了類型,那么你不一定能改變所有的地方。 而編譯器可能能檢查到,也可能檢查不到。
利用Java的冗余。 比如:Bubblegum b = new Bubblegom(); 和 swimmer = swimner + 1; 注意變量間的細微差別。
從不驗證。 從不驗證輸入的數據,從不驗證函數的返回值。 這樣做可以向大家展示你是多么的信任公司的設備和其它程序員
不要封裝。 調用者需要知道被調用的所有的細節。
克隆和拷貝。 為了效率,你要學會使用copy + paste。 你幾乎都不用理解別人的代碼,你就可以高效地編程了。
巨大的listener。 寫一個listener,然后讓你的所有的button類都使用這個listener,這樣你可以在這個listener中整出一大堆if…else…語句,相當的刺激。
使用三維數組。 如果你覺得三維還不足夠,你可以試試四維。
混用。 同時使用類的get/set方法和直接訪問那個public變量。 這樣做的好處是可以極大的挫敗維護人員。
包裝,包裝,包裝。 把你所有的API都包裝上6到8遍,包裝深度多達4層以上。 然后包裝出相似的功能。
排列和阻礙。 把drawRectangle(Height, width) 改成 drawRectangle(width, height),等release了幾個版本后,再把其改回去。 這樣維護程序的程序員們很快就不明白哪一個是對的。
把變量改在名字上。 例如,把setAlignment(int alignment)改成,setLeftAlignment, setRightAlignment, setCenterAlignment。
保留你所有的沒有使用的和陳舊的變量,方法和代碼。
Final你所有的子結點的類,這樣,當你做完這個項目后,沒有人可以通過繼承來擴展你的類。不也是這樣嗎?
避免使用layout。 這樣就使得我們只能使用絕對坐標。 如果你的老大強制你使用layout,你可以考慮使用GridBagLayout,然后把grid坐標hard code.
環境變量。 如果你的代碼需要使用環境變量。 那么,你應該把你的類的成員的初始化使用環境變量,而不是構造函數。
使用全局變量。 1)把全局變量的初始化放在不同的函數中,就算這個函數和這個變量沒有任何關系,這樣能夠讓我們的維護人員就像做偵探工作一樣。 2)使用全局變量可以讓你的函數的參數變得少一些。
配置文件。 配置文件主要用于一些參數的初始化。 在編程中,我們可以讓配置文件中的參數名和實際程序中的名字不一樣。
膨脹你的類。 讓你的類盡可能地擁有各種臃腫和晦澀的方法。 比如,你的類只實現一種可能性,但是你要提供所有可能性的方法。 不要定義其它的類,把所有的功能都放在一個類中。
使用子類。 面向對象是寫出無法維護代碼的天賜之物。 如果你有一個類有十個成為(變量和方法)你可以考慮寫10個層次的繼承,然后把這十個屬性分別放在這十個層次中。 如果可能的話,把這十個類分別放在十個不同的文件中。
混亂你的代碼。 使用XML。 XML的強大是無人能及的。 使用XML你可以把本來只要10行的代碼變成100行。 而且,還要逼著別人也有XML。 (參看,信XML得永生,信XML得自信)
分解條件表達式。如:把 a==100分解成,a>99 && a<101
學會利用分號。如:if ( a );else;{ int d; d = c;}
間接轉型。如:把double轉string,寫成new Double(d)() 而不是 (d)
大量使用嵌套。 一個NB的程序員可以在一行代碼上使用超過10層的小括號(),或是在一個函數里使用超過20層的語句嵌套{},把嵌套的if else 轉成 [? :] 也是一件很NB的事。
長代碼行。 一行的代碼越長越好。 這樣別人閱讀時就需要來來回回的
不要過早的return。 不要使用break,這樣,你就需要至少5層以上的if-else來處理錯誤。
不要使用{}。 不要在if else使用{},尤其是在你重量地使用if-else嵌套時,你甚至可以在其中亂縮進代碼,這樣一來,就算是最有經驗的程序員也會踩上陷阱。
瑣碎的封裝。比較封裝一個bool類,類里面什么都做,就是一個bool.
循環。千萬不可用for(int i=0; i
五、測試
從不測試。 千萬不要測試任何的出錯處理,從來也不檢測系統調用的返回值。
永遠不做性能測試。 如果不夠快就告訴用戶換一個更快的機器。 如果你一做測試,那么就可能會要改你的算法,甚至重設計,重新架構。
不要寫測試案例。 不要做什么代碼覆蓋率測試,自動化測試。
測試是懦夫行為。 一個勇敢的程序員是根本不需要這一步的。 太多的程序太害怕他們的老板,害怕失去工作,害怕用戶抱怨,甚至被起訴。 這種擔心害怕直接影響了生產力。 如果你對你的代碼有強大的信心,那還要什么測試呢?真正的程序員是不需要測試自己的代碼的。
六、其他
你的老板什么都知道。 無論你的老板有多SB,你都要嚴格地遵照他的旨意辦事,這樣一來,你會學到更多的知識以及如何寫出更加無法維護的代碼。
顛覆Help Desk。 你要確保你那滿是bug的程序永遠不要被維護團隊知道。 當用戶打電話和寫郵件給你的時候,你就不要理會,就算要理會,讓用戶重做系統或是告訴用戶其帳號有問題,是標準的回答。
閉嘴。 對于一些像y2k這樣的大bug,你要學會守口如瓶,不要告訴任何人,包括你的親人好友以及公司的同事和管理層,這樣當到那一天的時候,你就可以用這個bug掙錢了。
忽悠。 你會學會忽悠,就算你的代碼寫得很爛,你也要為其掛上GoF設計模式的標簽,就算你的項目做得再爛,你也要為其掛上敏捷的標簽,讓整個團隊和公司,甚至整個業界都開始躁動,這樣才能真正為難維護的代碼鋪平道路。
總之,我們的口號是—— Write Everywhere, Read Nowher
轉自:
Java 中的全局變量 (也稱為靜態變量) 是在類中定義的,并且可以被該類的所有對象共享。 它們可以通過類名加上變量名來訪問。
全局變量有以下作用:
全局變量可以幫助維護類的狀態,并且可以在不同的方法之間共享信息。 但是,全局變量也有一些缺點,例如容易導致命名沖突,并且不利于代碼的封裝和重用。 因此,在設計類時應謹慎使用全局變量。
在Java中,盡管不存在全局變量的概念,但可以通過創建引用類或常量類來實現類似功能。 這種方法可以幫助在多個類或方法之間共享和訪問全局值,同時保持代碼結構的清晰性和可維護性。 全局變量的缺點之一是可能引發命名沖突和維護問題。 當多個位置都引用相同的變量時,可能出現混淆,如變量名可能被誤解為在不同上下文中具有不同含義。 而在Java中,通過將相關變量和方法封裝在類中,可以避免這些問題。 創建一個引用類,例如`Reference`類,可以將多個全局值集中在一個位置,這樣可以在其他代碼片段中輕松訪問這些值。 這種方法有助于保持代碼的組織性和可讀性。 當需要使用常量值時,可以使用`final`關鍵字聲明變量,并通過`get`方法提供訪問途徑,從而確保這些值在程序運行時保持不變。 這種方法確保了代碼的穩定性和減少潛在的錯誤。 另一種實現全局值共享的方式是在應用程序中定義常量類,這些類包含一組經常使用的不可變值。 通過這種方式,可以在整個程序中通過類的公共訪問者輕松訪問這些值,從而提高代碼的可維護性和可讀性。 總之,在Java中模擬全局變量需要采取其他策略,如創建引用類或常量類,以實現代碼的清晰性、可維護性和避免潛在的命名沖突問題。 最終,是否使用這些策略取決于項目的具體需求和團隊的編程實踐。
global是計算機編程中的一個關鍵字。
在計算機編程中,global關鍵字主要用于聲明一個變量是全局變量。 全局變量在整個程序的執行過程中都是可見的,并且可以在程序的任何位置被訪問和修改。 這意味著無論在哪個函數或代碼塊中,只要知道全局變量的名稱,就可以對其進行操作。 這對于在不同函數或代碼塊之間共享數據非常有用。 但在使用時要注意,過多使用全局變量可能導致代碼難以維護和理解,因為全局變量的修改可能會影響整個程序的行為。 因此,應該謹慎使用全局變量。 它們通常在某些特定場景下才需要被使用。 除此之外,為了避免命名沖突,通常會采用特定的命名規則來標識全局變量。 總的來說,global關鍵字是編程中用于聲明全局變量的一個重要工具。
全局變量的應用有其特定的考慮因素:
首先,全局變量可能會占用額外的內存,由于其生命周期較長,特別是在內存資源有限的過去,這可能是個問題。但在現代計算機配置中,除非涉及大型對象,否則內存占用影響不大,盡量減少其使用。其次,盡管在程序運行時,全局變量可以減少內存分配的開銷,但實際上,這種速度提升在今天已經微不足道。
局部變量的名字空間污染是另一個需關注的點。在變量使用不多的情況下,可以通過合理規劃避免這種沖突。當全局和局部變量重名時,通常局部變量會優先生效,全局變量會被掩蓋。此外,全局變量的聲明可以使用extern關鍵字,使其在聲明處至文件結束范圍內有效。 這在需要跨函數訪問全局變量時很有用。
總的來說,盡管全局變量在某些情況下是可用的,但在使用時需謹慎。 應確保變量名清晰易懂,避免過短,以減少名字空間的混亂。 同時,盡量避免使用大型對象作為全局變量,以維護代碼的高效和清晰。
例如,全局變量的聲明方式如下:
extern Global y As String內容聲明:
1、本站收錄的內容來源于大數據收集,版權歸原網站所有!
2、本站收錄的內容若侵害到您的利益,請聯系我們進行刪除處理!
3、本站不接受違法信息,如您發現違法內容,請聯系我們進行舉報處理!
4、本文地址:http://m.sycxjdsbhs.com/article/80238cd05d98a0c8baad.html,復制請保留版權鏈接!
在當今快節奏的商業環境中,有效管理聯系人對于成功至關重要,Contactsprovider是一款功能強大的聯系人管理系統,旨在簡化這一流程,幫助您建立和維護強大的商業關系,Contactsprovider的主要功能中央聯系人數據庫,在單一平臺上集中存儲和管理所有聯系人,高級搜索和過濾,快速輕松地找到您需要的信息,使用多種搜索和過濾選項...。
互聯網資訊 2024-09-30 16:42:06
引言在Python中,迭代器是一種對象,它允許我們按順序訪問其元素,迭代器被廣泛用于各種操作,例如遍歷列表、元組和字典等集合結構,理解迭代器的內部機制對于充分利用它們至關重要,迭代器的原理一個迭代器本質上是一個雙指針系統,它包含兩個指向底層集合中的元素的指針,當前指針和下一個指針,當我們調用next,方法時,當前指針移動到下一個元素...。
技術教程 2024-09-27 12:05:35
簡介JSP,JavaServerPages,是一種基于Java的服務器端技術,用于開發動態的Web頁面,它允許開發人員在HTML中嵌入Java代碼,從而創建交互式和動態的Web應用程序,為了深入理解JSP編程的底層原理,分析源代碼至關重要,文章將通過源代碼示例逐行分析JSP的工作原理,幫助你掌握其核心技術原理,源代碼分析示例JSP頁面...。
本站公告 2024-09-24 11:39:22
簡介Menustrip控件是一個Windows窗體應用程序中常用的GUI元素,它提供了一種組織和展示菜單命令的分層方式,它允許用戶通過單擊菜單項來執行應用程序中的各種操作,本文將提供一個全面的指南,指導您如何自定義和實現WinForms應用程序中的Menustrip控件,包括菜單項的添加、刪除、啟用和禁用,以及處理菜單事件,創建Men...。
本站公告 2024-09-23 05:25:19
前言多線程是一種并發編程技術,它允許一個程序同時執行多個任務,在C語言中,多線程可以通過使用C11標準中引入的線程庫來實現,本篇文章將介紹如何使用C語言庫中的多線程功能來創建和管理線程,創建線程要在C語言中創建線程,可以使用`pthread,create`函數,該函數需要三個參數,線程ID指針,用于存儲新創建線程的ID,線程屬性,用于...。
本站公告 2024-09-12 15:06:09
隨機數函數是現代游戲中必不可少的工具,它為游戲玩法帶來了不可預測性和令人興奮的可能性,不可預測性隨機數函數可以為游戲注入不可預測性,使其更具挑戰性和吸引力,例如,在,王者榮耀,中,每次攻擊都會觸發隨機數計算,這會影響攻擊的傷害輸出,這意味著即使是最有經驗的玩家也無法準確預測每次攻擊的結果,增加了游戲的興奮感,興奮感隨機數函數還能夠通過...。
本站公告 2024-09-11 09:31:08
圖像處理技術在醫療保健領域發揮著越來越重要的作用,為提高診斷和治療效果提供了強大的工具,圖像處理的作用提供更清晰的圖像,圖像處理可以去除圖像中的噪點和偽影,從而產生更清晰、更準確的圖像,增強對比度和亮度,圖像處理可以增強圖像中的對比度和亮度,使診斷更容易,分割圖像,圖像處理可以將圖像分割成不同的區域,便于分析和識別異常情況,提取特征,...。
技術教程 2024-09-10 09:53:48
百度是中國最大的搜索引擎,也是全球最大的搜索引擎之一,它每天處理數十億次搜索請求,并向用戶提供廣泛的信息和服務,為了有效地使用百度搜索,了解其背后的規則非常重要,這些規則有助于確定搜索結果的順序和相關性,10條必知的百度搜索規則關鍵詞相關性,百度會優先顯示與搜索詞高度相關的網頁,網站權威性,百度會給來自權威網站的網頁更高的排名,例如政...。
最新資訊 2024-09-09 18:22:52
前言淘寶導航是淘寶網為用戶提供便捷購物入口的導航工具,通過自定義導航的CSS樣式,我們可以提升導航的美觀性和實用性,為用戶帶來更好的使用體驗,基礎語法要自定義淘寶導航的CSS,我們需要了解一些基礎的CSS語法,以下是幾個常用的CSS屬性,color,設置文本顏色background,color,設置背景顏色font,size,設置字體...。
互聯網資訊 2024-09-09 04:44:41
堅持實用導向本書是一本以實用性為導向的Java學習指南,旨在幫助讀者掌握Java語言并將其應用到實際項目中,它包含了豐富的代碼示例和演練,使讀者能夠動手實踐,學以致用,豐富的代碼示例,本書附有大量詳盡的代碼示例,涵蓋了Java語言的各個主要概念和技術,這些示例易于理解,并且提供了清晰的解釋,讓讀者能夠深入理解代碼的含義和用法,循序漸進...。
最新資訊 2024-09-06 11:48:57
完全匹配一個字符串正則表達式中,要完全匹配一個字符串,可以使用和符號,表示字符串的開始,表示字符串的末尾,例如,要匹配字符串Hello,可以使用以下正則表達式,```^Hello$```這個正則表達式將匹配字符串Hello,但不會匹配HelloWorld或Hello,這是因為和符號確保了正則表達式只匹配與目標字符串完全匹配的字符串,...。
本站公告 2024-09-05 23:01:55
在科學與迷信的界限上,1982年發生的安陽靈異事件引發了一場激烈的爭論,這一事件不僅震驚了中國,也引起了國際社會的廣泛關注,并引發了人們對迷信與科學關系的深入思考,安陽靈異事件1982年3月9日,河南省安陽市郊的一間農舍里發生了離奇的事件,據目擊者稱,這間農舍時常出現奇怪的響動、物體自行移動、玻璃破碎等現象,更有甚者,一些目擊者還聲稱...。
互聯網資訊 2024-09-03 05:54:47