防御性編程?這不就來(lái)了
最近程序員界又重新流行起來(lái)了防御性編程這個(gè)概念,早期嘞,這個(gè)概念代表是一種細(xì)致、謹(jǐn)慎的編程方法。
防御性編程的目的是為了開(kāi)發(fā)可靠的軟件,我們?cè)谠O(shè)計(jì)系統(tǒng)中每個(gè)組件的時(shí)候,都需要使其盡可能的 "保護(hù)" 自己。
但是 2023 年以來(lái),國(guó)內(nèi)的互聯(lián)網(wǎng)市場(chǎng)是什么行情,相信大家都清楚,整個(gè)市場(chǎng)環(huán)境都在強(qiáng)調(diào)降本增效、開(kāi)猿節(jié)流。
因此為了體現(xiàn)程序員們?cè)诠敬a中的不可替代性?防止被裁。"防御性編程" 概念又重新流行了起來(lái)。
不過(guò)這次它可不再是保護(hù)程序了,而是保護(hù)廣大程序員群體 ??。
所以我就給大家介紹一下,新時(shí)代背景下的 "防御性" 編程理念,如何實(shí)踐 ??。
本文大綱如下,
圖片
代碼書(shū)寫(xiě)
變量名稱(chēng)使用單一字符
Java 語(yǔ)言里變量名只能由 Unicode 字母、數(shù)字、下劃線(xiàn)或美元符號(hào)組成,并且第一個(gè)字符不能是數(shù)字。
那么對(duì)于單一字符的變量名稱(chēng)來(lái)說(shuō),26 個(gè)字母大寫(xiě)加 26 個(gè)字母小寫(xiě)加下劃線(xiàn)以及美元符一共有 54 種變量名稱(chēng),想一想難道這些還不夠你在單個(gè) Java 文件里給變量命名用嗎?
兄弟這一般夠用了。
使用中文命名
兄弟,大家都是中國(guó)人,肯定看得懂中文咯。
圖片
就問(wèn)你,Idea 支不支持吧,有沒(méi)有提示說(shuō)你變量名不規(guī)范嘛!沒(méi)提示就是規(guī)范。
還有一點(diǎn),兄弟們,還記得上面 Java 語(yǔ)言里變量名組成規(guī)范嗎?中文也在 Unicode 編碼里面,所以其實(shí)我們還可以用中文作為變量名稱(chēng)。
我已經(jīng)幫你查好了,Java 里常用的 utf-8 編碼下,支持的中文字符有 20902 個(gè),所以上面單一字符的變量名稱(chēng)還需要新增 20902 種 ??,簡(jiǎn)直完美。
圖片
使用多國(guó)語(yǔ)言命名
圖片
不多說(shuō),我就問(wèn)你看不看得懂吧,看得懂算你厲害,看不懂算你技術(shù)不行。
你問(wèn)我看不看得懂,我當(dāng)然看的懂,我寫(xiě)的,我請(qǐng)百度翻譯的 ??。
圖片
這些變量名稱(chēng)命名法則,不僅適用與 Java,也適用于 JavaScript,廣大前端程序員也有福了。
CV 大法
不要抽象、不要封裝、不要繼承、不要組合,我只會(huì) CV。
抽象
抽象:我可以讓調(diào)用者只需要關(guān)心方法提供了哪些功能,而不需要知道這些功能是如何實(shí)現(xiàn)的。我的好處是可以減少信息的復(fù)雜度,提高代碼的可讀性和易用性,也方便了代碼的修改和擴(kuò)展,我厲害吧。
我:我只會(huì) CV。
抽象:...
封裝
封裝:我可以把數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起,使其構(gòu)成一個(gè)獨(dú)立的實(shí)體,對(duì)外只暴露有限的訪(fǎng)問(wèn)接口,保護(hù)內(nèi)部的數(shù)據(jù)不被外部隨意訪(fǎng)問(wèn)和修改。我的好處是可以增強(qiáng)數(shù)據(jù)的安全性和一致性,減少代碼的耦合性,也提高了類(lèi)的易用性??匆?jiàn)沒(méi),我比抽象好懂吧。
我:我只會(huì) CV。
封裝:...
繼承
繼承:我可以讓一個(gè)類(lèi)繼承另一個(gè)類(lèi)的屬性和方法,從而實(shí)現(xiàn)代碼的復(fù)用和擴(kuò)展。我可以表示類(lèi)之間的 is-a 關(guān)系,體現(xiàn)了類(lèi)的層次結(jié)構(gòu)和分類(lèi)。我的好處是可以避免代碼的重復(fù),簡(jiǎn)化類(lèi)的定義,也增加了代碼的維護(hù)性。我可是面向?qū)ο笕筇卣髦弧?/p>
我:我只會(huì) CV。
繼承:...
組合
組合:我可以讓一個(gè)類(lèi)包含另一個(gè)類(lèi)的對(duì)象作為自己的屬性,從而實(shí)現(xiàn)代碼的復(fù)用和擴(kuò)展。我可以表示類(lèi)之間的 has-a 關(guān)系,體現(xiàn)了類(lèi)的關(guān)聯(lián)和聚合。我的好處是可以增加類(lèi)的靈活性和可變性,也降低了類(lèi)之間的耦合性。不要用繼承,我可是比繼承更優(yōu)秀的。
我:我只會(huì) CV。
組合:...
不要問(wèn)為什么我只會(huì) CV,因?yàn)槲业逆I盤(pán)只有 CV。
圖片
剛出道時(shí)我們嘲諷 CV,后來(lái)逐漸理解 CV,最后我們成為 CV。
CV 的越多,代碼就越復(fù)雜,代碼越復(fù)雜,同事就越難看懂,同事越難看懂,就越難接手你的代碼,你的不可替代性就越來(lái)越強(qiáng)。
那么我們防御性編程的目的不久達(dá)到了嘛。
兄弟,聽(tīng)我說(shuō),給你的代碼上防御,是為了你好!
產(chǎn)品開(kāi)發(fā)
運(yùn)營(yíng)配置、開(kāi)發(fā)配置、系統(tǒng)配置直接寫(xiě)死,用魔法值,沒(méi)毛病。
產(chǎn)品每次提需求,代碼實(shí)現(xiàn)一定要做到最小細(xì)粒度實(shí)現(xiàn),做到需求里少一個(gè)字,我的代碼里絕不會(huì)多一個(gè)詞,注釋也是不可能有的,我寫(xiě)的代碼只有我看得懂不是防御性編程的基操嗎?
我的代碼我做主。
產(chǎn)品原型不提,我絕對(duì)不會(huì)問(wèn)。要做到這系統(tǒng)有你才能每一次發(fā)版上線(xiàn)都是相安無(wú)事,一旦缺少了你,鬼知道會(huì)發(fā)生什么。
我們能做的就是牢牢把握項(xiàng)目中核心成員的位置。這個(gè)項(xiàng)目組少了你,絕對(duì)不行!
最后聊兩句
2023 全年都在降本增效,節(jié)能開(kāi)猿的浪潮下度過(guò)。
雖然本文是給大家將防御性編程如何實(shí)踐,但是我還是希望每一個(gè)互聯(lián)網(wǎng)打工人都能平穩(wěn)度過(guò)這波寒冬。
積蓄力量,多思考,多元發(fā)展。
在來(lái)年,春暖花開(kāi),金三銀四之月,都能找到自己滿(mǎn)意的工作,得到屬于自己的果實(shí)。