日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

停止使用花哨技巧編寫“優雅”代碼!

來源: 責編: 時間:2024-06-17 17:40:53 250觀看
導讀在技術社區中,經常可以看到一些博客推廣編程語言的各種“高級特性”和“高級模式”,并使用這些特性編寫一些“優雅”的代碼。那么,學習和使用這些東西到底是好是壞呢?本文旨在幫助你做出判斷。技巧的巧妙與智慧的智慧許多

Yzr28資訊網——每日最新資訊28at.com

在技術社區中,經常可以看到一些博客推廣編程語言的各種“高級特性”和“高級模式”,并使用這些特性編寫一些“優雅”的代碼。那么,學習和使用這些東西到底是好是壞呢?本文旨在幫助你做出判斷。Yzr28資訊網——每日最新資訊28at.com

技巧的巧妙與智慧的智慧

許多人以使用語言和框架的晦澀特性為榮,通過利用各種罕見的 API 展示自己對框架的熟悉度。他們認為自己的編程和技術水平高于那些編寫簡單邏輯的學生。這個觀點是否合理?下面通過幾個例子來推導一下:Yzr28資訊網——每日最新資訊28at.com

首先,在招聘開發人員時,有一個有趣的現象:層次越高的應聘者,考察的具體編碼技能越少,而更多考察架構能力、業務理解和工程質量。請注意,理解架構、業務和工程不是指溝通或管理等軟技能,而是工程師的扎實專業能力。Yzr28資訊網——每日最新資訊28at.com

另一方面,在技術社區中,最受歡迎的內容往往是各種框架和庫的“入門指南”。從暢銷的《XXX 從初學者到專家》指南到《一步一步教你如何學習 XXX》,最熱門的內容仍然圍繞如何操作這些 API 和應用某些技術知識模式。Yzr28資訊網——每日最新資訊28at.com

結合這些現象和一些常識,我們可以得出以下三個條件:Yzr28資訊網——每日最新資訊28at.com

  • 程序員的層次越高,其技能樹中技術知識的比例越小。
  • 高級程序員的比例遠小于初級程序員。
  • 在編程社區中,大多數人關心的是技術知識。

根據這些條件,我們可以做出一個松散的推論:那些最關注和癡迷于編程技能的人,很可能是初級程序員中的大多數。這樣,炫耀技巧不一定能表明技術水平高超。Yzr28資訊網——每日最新資訊28at.com

需要明確的是,我們并不認為編程技能不重要。相反,高級程序員對技能的理解遠比初級程序員深刻,許多高超的代碼可以在數量級上優化和解決問題。那么,我們應該如何評價這樣的代碼呢?Yzr28資訊網——每日最新資訊28at.com

能夠應用各種高級特性的學生無疑被認為是“聰明”的。然而,何時何地使用它們需要基于所謂的“智慧”來判斷。這類似于 Facebook 和 Google 的代碼標準中經常看到的說法:Yzr28資訊網——每日最新資訊28at.com

用你最好的判斷力。Yzr28資訊網——每日最新資訊28at.com

雖然聽起來令人愉快,但這是一個非常玄妙的概念。下面我們將進行一些更具體的討論,并提取一些常見的技巧和技術。Yzr28資訊網——每日最新資訊28at.com

常見的技巧和技術

使用危險的語義

許多人在閱讀了《高級程序設計》之類的書后,會將他們對高級特性的理解應用到實際項目中,以炫耀自己的技術水平。在前端領域,這些行為包括但不限于:Yzr28資訊網——每日最新資訊28at.com

  • 了解 == 和 === 的區別,并在不同情況下使用不同的符號進行邏輯判斷。
  • 了解變量提升行為,并利用它實現特殊的代碼執行順序。
  • 理解原型和構造函數,并使用它們實現各種繼承關系。
  • 掌握 this 指向的各種規則,并利用特殊規則綁定上下文。
  • ...

雖然使用這些特性的代碼確實可以運行,但問題在于這些語義都是危險的,或者是語言設計問題造成的糟粕。在已知它們難以使用并且有成熟替代解決方案的情況下,為什么要使用它們來炫耀自己的技術水平?然而在前端社區中,這種行為屢見不鮮。例如,僅僅理解 this 指針的各種規則就足以寫一篇長文(這在許多技術社區中早已成為一個乏味的話題)。而像 == 這樣的特性雖然有無數的陷阱,令人驚訝的是仍有許多人在閱讀博客后“合理”地使用它們。至于變量提升,這種完全反直覺的設計缺陷被一些人用來創造各種花哨的面試題。Yzr28資訊網——每日最新資訊28at.com

當然,這絕不是反對理解這些所謂的“高級特性”如何工作以及為什么它們會導致混亂的行為。對于每一個想要成長的可靠學生來說,學習它們是很重要的。這里給出的建議是:Yzr28資訊網——每日最新資訊28at.com

  1. 至少了解它們一次,達到能夠指出問題所在的水平。
  2. 學習這些特性的替代解決方案,并知道如何避免陷阱。
  3. 除非維護底層庫,否則不要在代碼中使用它們。

應用設計模式

設計模式也是技術文章中非常常見的一個話題。例如,許多文章將《設計模式》中的幾十種模式應用到 JavaScript 中,使用上述的各種“高級特性”模擬和實現這些模式。最后,他們會提升說這些模式都是“優秀程序員必須知道的”,因此在簡歷上加上一行“熟練掌握各種設計模式”顯得很有吸引力!Yzr28資訊網——每日最新資訊28at.com

設計模式的最初目的是彌補靜態語言如 Java 的不足。隨著編程語言的發展,許多“經典”設計模式已經成為語言機制的一部分。例如,export 對單例模式的內置支持,用函數層包裹內容就是工廠模式,yield 也實現了迭代器模式等等。此外,JS 的動態特性使得 JSON 的靈活性遠遠超過 reflection,而函數作為一等公民的設計使得 JS 的回調函數比 Java 的回調接口或 Visitor 模式靈活得多。Yzr28資訊網——每日最新資訊28at.com

許多提倡設計模式的文章并不是因為它們人為地制造了不必要的復雜性,而是因為它們創造了一種誤解,即“如果不使用 XX 模式,說明你的技能不足”。至少從個人閱讀優秀開源項目源碼的經驗來看,我沒有發現機械地應用模式的實例;相反,問題得到了清晰的描述,隨后提供了可讀的抽象。當然,可以事后在其中找到某些實現的模式;然而,我更愿意相信作者在編碼時并沒有“這里需要使用 XX 模式”的心態。然而,許多缺乏辨別能力的初學者可能會因為缺乏閱讀高質量代碼的經驗或受到公司遺留項目中舊代碼的影響,最終固執地遵循這些刻板的方法。在我看來,這相當遺憾。Yzr28資訊網——每日最新資訊28at.com

減少代碼行數

我們都知道,通過復制粘貼生成的冗長和重復的代碼是不好的。然而,大多數復制粘貼發生在時間緊迫、沒有時間進行優化的情況下。考慮到我們的同學們的工作強度,這可以理解。另一方面,還有另一種極端行為,即通過各種非常規手段“簡化”代碼,以實現“最簡潔”的代碼。Yzr28資訊網——每日最新資訊28at.com

例如,剛開始學習函數式編程的學生可能會特別喜歡 a(b(c(d, e(f, g)))) 這樣的代碼,認為深度嵌套函數可以大大減少中間變量,從而節省代碼量;有些學生喜歡用邏輯運算符連接各種條件邏輯,并將它們全部寫在一行,如 a || b && c && d常見的還有實用函數的參數越來越多,直到一次性傳入一行。Yzr28資訊網——每日最新資訊28at.com

再考慮一下,這樣的代碼是否增強了可讀性。深度嵌套的函數調用帶來了許多右括號,如 )))))), 這在 Lisp 中早已備受詬病;單行條件邏輯不利于調試;具有許多參數的函數往往表現復雜,難以調試。Yzr28資訊網——每日最新資訊28at.com

這些編碼習慣可以很容易地以更好可讀性的形式替換,而不會帶來太多麻煩。然而,故意創建這樣的代碼可能會使后續的維護人員感到不適。對于行間斷和縮進的具體實踐,工具如 JavaScript Standard Style 可以自動處理大多數情況。Yzr28資訊網——每日最新資訊28at.com

隱式重寫常識

現代工程框架通常提供許多可定制的接口,允許開發人員輕松修改框架的行為。例如,React 公開了上下文,而 Redux 和 MobX 等庫利用這個接口大大優化了深度 prop 傳遞的體驗。然而,在典型業務代碼中,框架內的許多隱含約定和規范,如果不合理地進行定制,會導致重大挑戰。這些類型的修改通常發生在不起眼的地方,但可能有很大的影響。Yzr28資訊網——每日最新資訊28at.com

例如,在我們之前維護的一個項目中,有一個巧妙的修改,用自己的 XXX.BaseComponent 替換了 React.Component 基類。自定義組件沒有涉及任何與業務邏輯相關的更改,而是添加了一些無法解釋的初始化代碼。結果是關于 React 組件基類的隱含常識失效了。在維護時,乍一看替換的組件看起來很普通;然而,回滾會導致問題。此外,這些“黑魔法”代碼沒有注釋或文檔,不清楚最初引入它們是為了什么問題。對于這種編碼實踐,除了過于聰明之外,似乎沒有其他合理的評價。Yzr28資訊網——每日最新資訊28at.com

另一個例子是這個項目中的另一個“聰明”做法,即根據請求路徑用三四個不同的自定義版本替換 window.fetch(不用擔心——不會告訴你為什么!)。這意味著當維護人員編寫新的 fetch 請求時,不能依賴之前關于 fetch 的任何隱含知識,而必須通過追蹤前任的自定義版本進行調試——這很神奇,不是嗎?Yzr28資訊網——每日最新資訊28at.com

還有一些隱式實踐,問題出在副作用上。例如,當看到 user = getUser(id) 時,可能不會期望這個 getUser 函數不僅查詢用戶,還悄悄顯示提示消息、發送請求并清除當前數據。當然,在前端開發中,管理眾多與 UI 相關的網絡副作用本身增加了復雜性。然而,如果調用一個函數會導致許多連鎖結果,進一步增加復雜性,許多維護人員可能會選擇棄用和重寫。Yzr28資訊網——每日最新資訊28at.com

重新發明輪子

在技術社區中,你經常可以看到“最全面的前端實用函數”之類的合集,并且它們的點贊數往往很高。然而,一個 500 合 1 的小霸王游戲卡比超級馬里奧更有趣嗎?Yzr28資訊網——每日最新資訊28at.com

我有幸讀過一些這樣的文章,發現這些打包的函數往往連固定主題都沒有:左邊是 getCookie,右邊是 deepClone,上面是 isEmail,下面是 scrollTop。每個實現只有幾行相當于將英文函數名翻譯成中文的注釋,沒有測試用例、依賴配置或文檔。它們被稱為“小而美”。Yzr28資訊網——每日最新資訊28at.com

這樣的代碼值得復制到你的項目中重復使用嗎?坦率地說,它們只是滿足“我可以發明輪子”沖動的產品。當然,我完全相信作者可以輕松優雅地編寫一個深拷貝函數。但是項目不是面試;對于一個穩定可靠的輪子庫,除了簡單的實現外,還需要許多與代碼無關的東西。根據布魯克斯定律(《人月神話》)的軟件項目中,實際編碼時間只占 1/6;其余的大部分時間需要用于測試、文檔和溝通。對于具有更高質量要求的庫代碼,匆忙編寫或從網上復制(哦不!讓我們稱之為內聯)代碼能否滿足?Yzr28資訊網——每日最新資訊28at.com

在正式項目中使用庫,如果穩定的現有依賴滿足需求,顯然應首先選擇。如果遇到需要自己重新發明輪子的情況,確保在可靠項目的5/6之外的時間也做好;不要不必要地重復劣質輪子。Yzr28資訊網——每日最新資訊28at.com

追求高層次的抽象

最后一點可能更為小眾,因為對于許多人來說,復制粘貼即可滿足需求,這違反了他們的習慣。然而,正因為如此,這是一種更高級形式的“巧妙”。Yzr28資訊網——每日最新資訊28at.com

[高級] 聽起來像是純粹的圣杯。[高階函數] 和 [高階組件] 似乎是 [高級程序員] 的完美搭配。然而,如果你需要維護這些高階函數,你會怎么想?Yzr28資訊網——每日最新資訊28at.com

() => () => () => () => 123

一個返回 123 的函數,由另一個函數返回,確實很高層次。但是這會不會讓你感到困惑...Yzr28資訊網——每日最新資訊28at.com

結語

在編程中,技巧和智慧是不可或缺的,但僅僅依賴技巧并不能保證代碼質量。通過理解和運用合適的設計模式、提高代碼可讀性以及避免不必要的復雜性,我們可以編寫出既高效又易于維護的代碼。這不僅是對技術能力的證明,也是對團隊合作和項目成功的承諾。Yzr28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-94298-0.html停止使用花哨技巧編寫“優雅”代碼!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 盤點歷屆 Java 語言的關鍵字,一定有你不認識的

下一篇: Node.js 結合 AI 輕松總結音視頻內容

標簽:
  • 熱門焦點
  • 7月安卓手機性能榜:紅魔8S Pro再奪榜首

    7月份的手機市場風平浪靜,除了紅魔和努比亞帶來了兩款搭載驍龍8Gen2領先版處理器的新機之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機廠商修整的時間,進入8月份之
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預警不絕,但處于厄爾尼諾大“烤”之下的除了眾生,還有各大企業發布的ESG報告。ESG是“環境保
  • 疑似小米14外觀設計圖曝光:后置相機模組變化不大

    下半年的大幕已經開啟,而誰將成為下半年手機圈的主角就成為了大家關注的焦點,其中被傳有望拿下新一代驍龍8 Gen3旗艦芯片的小米14系列更是備受大家矚
  • 消息稱小米汽車開始篩選交付中心:需至少120個車位

    IT之家 7 月 7 日消息,日前,有微博簡介為“汽車行業從業者、長三角一體化擁護者”的微博用戶 @長三角行健者 發文表示,據經銷商集團反饋,小米汽車目前
  • 三星推出Galaxy Tab S9系列平板電腦以及Galaxy Watch6系列智能手表

    2023年7月26日,三星電子正式發布了Galaxy Z Flip5與Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板電腦以及三星Galaxy Watch6系列智能手表也同期
  • iQOO 11S評測:行業唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美日韩三级电影在线| 这里只有精品视频在线| 国产午夜精品全部视频播放 | 欧美一区久久| 久久精品青青大伊人av| 欧美成在线视频| 国产精品va在线播放我和闺蜜| 国产人成一区二区三区影院 | 香蕉久久夜色精品国产| 另类综合日韩欧美亚洲| 一区二区视频免费在线观看| 亚洲国产中文字幕在线观看| 中文在线资源观看网站视频免费不卡 | 国产精品亚洲а∨天堂免在线| 激情婷婷欧美| 99在线视频精品| 久久精品国产一区二区三| 欧美精品久久久久久久| 国产日产精品一区二区三区四区的观看方式 | 欧美成人午夜77777| 国产精品亚洲综合色区韩国| 亚洲国产乱码最新视频| 亚洲欧美视频在线观看| 欧美不卡在线| 国产日韩精品久久久| 亚洲国产欧美不卡在线观看| 亚洲欧美久久| 欧美激情精品久久久久久变态| 国产精品伊人日日| 亚洲精品久久嫩草网站秘色| 欧美一区二区三区免费视| 欧美精品一区二| 国内精品伊人久久久久av一坑| 一区二区免费在线观看| 久久综合伊人77777蜜臀| 国产精品乱人伦一区二区 | 久久精品一区二区三区中文字幕 | 揄拍成人国产精品视频| 午夜精品久久99蜜桃的功能介绍| 欧美国产先锋| 伊人久久成人| 午夜视频在线观看一区| 欧美日韩一区二区三区免费看| 伊伊综合在线| 欧美中文在线字幕| 国产精品久久久久毛片大屁完整版| 亚洲国产小视频在线观看| 欧美中文字幕视频| 国产精品久久综合| 99re6热在线精品视频播放速度| 久久久成人精品| 国产精品入口| 亚洲神马久久| 欧美日本中文字幕| 亚洲国产一区二区视频| 久久精品网址| 国产日韩精品在线播放| 亚洲一区在线观看视频| 欧美日韩国产综合一区二区| 亚洲国产日韩精品| 久久中文欧美| 激情欧美一区| 亚洲欧洲av一区二区| 欧美黑人国产人伦爽爽爽| 在线播放国产一区中文字幕剧情欧美| 亚洲一区二区免费视频| 欧美日韩黄色一区二区| 亚洲欧洲美洲综合色网| 香蕉成人伊视频在线观看| 欧美日韩国产美| 亚洲另类自拍| 免费观看成人网| 激情丁香综合| 午夜精品视频在线| 国产精品乱码一区二区三区 | 亚洲人久久久| 久热精品视频在线观看| 国产精品资源在线观看| 宅男在线国产精品| 欧美激情久久久久| 亚洲欧洲日本在线| 久久一区亚洲| 精品动漫3d一区二区三区免费| 欧美在线网站| 国产伦精品一区二区三区在线观看| 亚洲视频高清| 欧美日韩亚洲高清一区二区| 日韩亚洲欧美在线观看| 欧美激情第4页| 亚洲欧洲日韩女同| 欧美大片在线观看一区| 亚洲精品一区在线| 欧美日产一区二区三区在线观看 | 1000精品久久久久久久久| 久久精品国产精品亚洲| 国产亚洲欧美日韩日本| 欧美一区二视频| 国产欧美一区二区白浆黑人| 久久精品论坛| 禁久久精品乱码| 久久久av毛片精品| 在线观看日韩一区| 麻豆9191精品国产| 欧美一区二区三区四区在线观看 | 国产欧美欧美| 欧美在线视频在线播放完整版免费观看 | 欧美久久婷婷综合色| 亚洲精品综合精品自拍| 欧美日产在线观看| 亚洲视频一区在线观看| 国产精品久久久久久av福利软件| 亚洲专区一区二区三区| 国产老女人精品毛片久久| 久久成人免费网| 精品动漫3d一区二区三区免费版 | 亚洲午夜视频在线| 国产精品人成在线观看免费| 欧美一级成年大片在线观看| 国产主播精品| 免费一级欧美在线大片| 亚洲精品影视| 国产精品免费aⅴ片在线观看| 欧美一区二区三区播放老司机| 在线播放豆国产99亚洲| 欧美精品少妇一区二区三区| 中文av字幕一区| 国产欧美一二三区| 久久综合伊人77777蜜臀| 亚洲精品乱码久久久久久黑人| 欧美日韩在线播| 亚洲欧美中文另类| 国模套图日韩精品一区二区| 另类成人小视频在线| 日韩一本二本av| 国产精品一区二区在线观看网站 | 久久精品盗摄| 亚洲精品一区二区三区婷婷月| 国产精品伦子伦免费视频| 久久精品视频导航| 亚洲精品视频二区| 国产区日韩欧美| 欧美大片免费| 亚洲自拍偷拍福利| 激情综合色综合久久| 欧美日韩国产综合久久| 一级日韩一区在线观看| 国产一区二区看久久| 欧美大片在线看免费观看| 一本久道久久综合中文字幕| 国产区亚洲区欧美区| 欧美激情精品久久久| 午夜精品久久久久影视| 亚洲国产你懂的| 国产毛片精品视频| 欧美激情中文不卡| 欧美一区二区三区在线看| 亚洲精品欧美激情| 国产亚洲精品激情久久| 欧美人成网站| 久久久久久电影| 亚洲视频免费在线观看| 在线观看欧美| 国产精品亚洲视频| 欧美激情第1页| 久久在线观看视频| 亚洲欧美日韩爽爽影院| 亚洲欧洲日本mm| 国产亚洲一区二区三区在线播放| 欧美日韩国产首页在线观看| 久久久综合视频| 亚洲女同精品视频| 亚洲乱码国产乱码精品精98午夜| 国语自产精品视频在线看抢先版结局| 欧美日韩理论| 免费黄网站欧美| 久久久另类综合| 亚洲欧美一区二区精品久久久| 亚洲精品一区二区三区四区高清 | 国内精品国产成人| 国产精品久久久久毛片大屁完整版| 欧美大片第1页| 久久全国免费视频| 欧美一区二区三区的| av成人毛片| 亚洲福利视频网| 国内精品久久久久国产盗摄免费观看完整版 | 国产精品国产成人国产三级| 欧美电影专区| 麻豆av一区二区三区久久| 性欧美1819sex性高清| 在线一区视频| 日韩午夜在线| 最近中文字幕日韩精品 | 免费一级欧美片在线观看| 欧美综合77777色婷婷| 亚洲专区免费| 亚洲一级二级在线| 一区二区激情视频| 99精品免费| 9人人澡人人爽人人精品| 亚洲精选成人| 亚洲三级电影全部在线观看高清| 亚洲国产毛片完整版| 亚洲大片在线|