如何撰寫不易維護的程式碼

25個實用的技巧,讓你寫出最不易維護的程式碼。 在這篇教學中,我想說明如何撰寫不易維護的程式碼。 透過撰寫不易維護的程式碼,你可以確保自己永遠不會被解雇,因為你將是唯一能理解程式碼做了什麼,以及更重要的是為什麼這麼做的人。 請注意:本文章帶有諷刺的意味。 為你的變數、函數和物件取奇怪、幻想和隨便的名字。名字與該項目的功能或行為應無相關性。 偏好縮寫和首字母縮略詞,不要使用描述性的名字。一個字母的變數很棒。 在程式碼中儘量重複使用變數。在迴圈中始終使用「i」。 使用你自己的語言給名字。畢竟,沒有必要只使用英文。 同樣適用於註釋。隨意使用你懂的任何語言寫註釋,誰在乎下一位開發者來自其他國家呢? 關於註釋,我正在開玩笑。不要寫任何註釋。 如果你真的想寫註釋,那就不用麻煩去更新描述該程式碼的註釋,當你更改該程式碼時。 偏好使用全局變數而不是過於聰明的作用域。 永遠不要測試你的程式碼。你很牛,你的程式碼也很牛。 偏好使事情過於複雜而不是過於簡單。沒人會因為建立一個複雜且自我實現的架構而火速導致一個已經運作完美的程式碼重新編寫3個月而被解雇。 以巧妙的方式優化任何你可以的地方。電腦很慢,我們應該避免讓它過熱並幫助對抗氣候變化。將程式碼改寫成組合語言通常是個好主意。 相對不知名的語言和框架總是比經受過考驗的流行解決方案更好。在所有人都使用的解決方案之上,選擇它們。 更好的做法是自己創建框架。 永遠不要使用第三方庫。 過度使用第三方庫。 使用你讀過的每種設計模式,並試著將其納入你的設計中,即使它實際上並不適合。 使用大公司建立的工具,因為他們更了解,你的一個人的新創公司一定會受益於成千上萬的人力資源的投入。如果它們非常難以使用並具有自己聰明聽起來的命名慣例,則額外加分。 不要使用版本控制,甚至完全不版本化程式碼。畢竟,程式的版本只有一個正確的版本。你可以輕鬆記住你所做的所有更改,最重要的是記住更改的原因,無需在外部存儲庫中跟踪它。 在不了解之前,可以自由地從Stack Overflow或隨機部落格中複製貼上程式碼。 縮排一點也不重要。完全沒關係。縮排空格和縮排制表符混用也沒關係。 自由地過度使用抽象。抽象很棒。讓所有東西都可重複使用,過度思考事情就像國王一樣。 也許你將在未來20年中在每個專案中重複使用這個庫,誰知道呢?最好先考慮所有可能的邊緣情況。 總是實現你所有的好點子。 2000行的函數是個好點子。 假設一位10倍工程師正在看著你編碼。

如何確保上傳的圖片大小小於特定大小

我有一個表單,其中包含一個文件輸入框,讓用戶上傳圖片: <input name='image' type='file' accept='image/\*' 我需要這個圖片的大小小於3MB。 因此,我將以下代碼添加到React應用程序中的onChange事件中,以實現此要求: <input name='image' type='file' accept='image/\*' onChange={(event) => { if (event.target.files && event.target.files[0]) { if (event.target.files[0].size > 3 \* 1000 \* 1024) { alert('最大允許的大小為3MB') return false } setImage(event.target.files[0]) setImageURL(URL.createObjectURL(event.target.files[0])) } }} />

如何確保您的輸入欄位僅能上傳圖片

我有一個需要使用檔案上傳圖片的需求,所以我添加了一個小小的 input type="file" 欄位: <input type="file"> 我只希望使用者能夠上傳圖片。 這是一個常見的需求,但我總是忘記如何實現。 使用 accept 屬性,將 image/* 傳遞進去以允許上傳所有圖片: <input type="file" accept="image/*"> 或者使用 image/png 只允許上傳 PNG 圖片: <input type="file" accept="image/png"> 同樣的語法也可以用於只允許上傳視頻: <input type="file" accept="video/*"> 或者音頻: <input type="file" accept="audio/*"> 或者它們的組合: <input type="file" accept="image/*,audio/*,video/*"> 當然,這只是在客戶端進行的驗證,當接收到檔案時,您也應該在伺服器端驗證媒體類型。

如何確保樹莓派始終有相同的IP地址

這是一個逐步指南,介紹了如何設置路由器,在局域網中為樹莓派分配一個靜態DHCP IP地址。 最近,我買了一台樹莓派來進行測試並實現一些我構想的項目,並在安裝了專為樹莓派設計的Linux版本Debian(即Raspbian)後,我遇到了一個問題。 我使用HDMI線將樹莓派連接到電視上,並連接了一個USB鼠標和USB鍵盤來安裝操作系統並進行連接。 然後,我設置了在Mac上從樹莓派連接的VNC服務器。 當我斷開所有這些電纜,只讓樹莓派連接到電源線時,我意識到一旦重新啟動樹莓派,分配給它的IP地址將會變化。 這是因為WiFi路由器使用的是DHCP協議,它不會為每個連接的設備分配固定的IP地址,而是會不斷更改IP地址。 有時是 192.168.1.2。 有時是 192.168.1.30。 有時是 192.168.1.43。 我真的不想每次都花時間去尋找樹莓派的IP地址,對吧?這很煩人。 因此,我發現可以通過識別其MAC地址為特定設備分配一個固定的IP地址。MAC地址(又稱媒體訪問控制地址)是一個唯一的識別符。每個設備的MAC地址都不同。 因此,我連接到我的WiFi路由器,它在本地網絡上運行在IP 192.168.1.1上,然後我進入DHCP Server菜單。 在那裡,我點擊了“Static DHCP”,並且能夠將特定的IP地址分配給我的樹莓派的MAC地址: 我如何找到樹莓派的MAC地址呢? 我知道IP地址,因為樹莓派的VNC服務器面板顯示了它: 然後,我使用我的MacBook Air使用以下命令掃描網絡: ifconfig | grep broadcast | arp -a 這將打印出連接到網絡的所有設備的IP地址和MAC地址,包括我感興趣的樹莓派: ? (192.168.1.42) at dc:a6:32:60:20:81 on en0 ifscope [ethernet]

如何編譯和運行 Go 程式

本教程延續我們在《如何建立你的第一個 Go 程式》中所做的內容。 在 hello 資料夾中打開終端機並使用以下命令運行程式: go run hello.go 我們的程式成功運行並在終端機上輸出了「Hello, World!」。 go run 工具首先編譯程式,然後運行指定的程式。 你可以使用 go build 建立一個可執行的二進制檔案: go build hello.go 這將建立一個 hello 檔案,這是一個可執行的二進制檔案: 在前言中我提到過,Go 是可攜的。 現在你可以分發這個二進制檔案,每個人都可以直接執行,因為這個二進制檔案已經打包好了,可供執行。 程式將在與建立時相同的架構上運行。 我們可以使用 GOOS 和 GOARCH 環境變數為不同的架構創建不同的二進制檔案,如下所示: GOOS=windows GOARCH=amd64 go build hello.go 這將為 64 位元的 Windows 機器創建一個 hello.exe 執行檔: 64 位元 macOS(Intel 或 Apple Silicon)的設定為 GOOS=darwin GOARCH=amd64,而 Linux 的設定為 GOOS=linux GOARCH=amd64。 這是 Go 的最佳特點之一。

如何調試 JavaScript 代碼

一個關於如何使用調試來解決任何 JavaScript 問題的教程 調試是一個很好的技能,它可以幫助你解決 JavaScript 代碼中的每個問題。 每天早上我們起床,吃美味的早餐,坐在電腦前寫完美的代碼,這個夢想是理想的,不是嗎?但這只是一個夢想而已。 無論你有多好,無法寫出沒有缺陷的代碼。代碼總是有缺陷的,這是它的定義。 當你開始寫代碼時,你可能沒有見過或預料到錯誤。錯誤可能只有在你將程序發佈給用戶之後才會被發現,這是最糟糕的情況。 錯誤可能由你自己在測試程序時發現,甚至可能在某些事情正常運作時就突然出現故障,只因為你改變了一行代碼。 這些被稱為回歸錯誤。 作為開發人員,錯誤是我們日常工作的一部分,但我們的工作是盡可能地將它們減少到最低。 當你知道有錯誤時,你如何解決它呢? 嗯,最難的部分始終是確定錯誤發生在哪裡。 然後,第二個最困難的部分是找出為什麼會發生這個錯誤。 一旦你知道了上述所有問題的答案,解決錯誤通常就很容易了。 通常我們可以做兩件事來解決錯誤。 一種技術是非常基本的,涉及嘗試找出狀態(變量的內容)和程序流程的值,並將這些變量打印到日誌或程序的輸出中。 找出錯誤可能出現的地方 調試是一種對程序員活動非常核心的技能。 有時候我們盡力工作,但程序卻不能正常工作,例如,它崩潰了,只是運行得很慢,或者它打印了錯誤信息。 當你寫的程序不像你預期的那樣運行時,你會怎麼做? 你開始調試它。 第一步始終是觀察發生了什麼,並嘗試確定問題來自哪裡。 它是環境中的問題嗎? 它是你給程序的輸入中的問題嗎? 它是由於內存使用過多而導致的一次性崩潰嗎? 還是每次運行它都會發生? 這些都是在解決問題時開始朝著正確方向前進的重要信息。 一旦你對錯誤的來源有了一些想法,你就可以開始檢查該特定程式碼的部分了。 最簡單的調試方式,至少在工具方面而言,是讀出你所寫的代碼。大聲讀出來。 如果你讀的是一個字符串或一個數字,那麼聽起來沒有任何魔力。 然而,有時我們可以通過這種方式發現問題。 在這一步之後,就是使用一些工具的時候了。 你第一次接觸 alert() 和 console.log() 如果閱讀代碼對你來說毫無意義,那麼下一個合乎邏輯的步驟就是開始在代碼中添加幾行代碼,以幫助你找到問題所在。 在 JavaScript 前端代碼中,你通常會使用 alert() 和 console.log()。 考慮以下代碼行: const a = calculateA() const b = calculateB() const result = a + b 出於某種原因,我們不知道代碼的最終結果計算不正確,所以我們在計算結果之前添加 alert(a) 和 alert(b)。 當瀏覽器執行代碼時,它會打開兩個警告對話框: const a = calculateA() const b = calculateB() alert(a) alert(b) const result = a + b 如果你將 alert() 傳遞的是一個字符串或一個數字,這種方法是行得通的。...

如何調試一個React應用程序

當你遇到問題時,可以使用一些工具來調試React應用程序 調試React應用程序的最佳工具是使用 React開發者工具。這是一個瀏覽器擴展,可以輕鬆地檢查和分析React應用程序。 我寫了一篇完全專門介紹React開發者工具的博客文章,請查看: React開發者工具。 除了React開發者工具之外,這對於構建Next.js應用程序至關重要,我還想強調兩種調試Next.js應用程序的方法。 首先當然是 console.log() 和其他 Console API 工具。Next應用程序的工作方式將使日誌語句在瀏覽器控制台或使用 npm run dev 啟動Next的終端中工作。 特別是,如果頁面從服務器加載,當您將URL指向它時,或者點擊刷新按鈕(cmd/ctrl-R),任何控制台日誌都會在終端中發生。 透過點擊鼠標導致的後續頁面轉換將使所有控制台日誌在瀏覽器內發生。 只要記住,如果你對於缺少日誌感到驚訝。 另一個不可或缺的工具是 debugger 語句。將此語句添加到組件中將暫停瀏覽器渲染頁面: 關於如何使用這些工具的最好建議在我的 JavaScript調試指南 中。真是太棒了,因為現在您可以使用瀏覽器調試器檢查值並逐行運行應用程序 如果您使用的是Next.js,您還可以使用 VS Code 調試器調試服務器端代碼。我在 此教程 中提到了這種技術和設置方法。

如何學習多種語言?

在我發送第一封電子報宣告新的SwiftUI系列時,有人問我這個問題:“你是如何學習多種語言的呢?” 好問題! 在過去,我學過Pascal、C、Java、PHP、JavaScript、Objective-C、Go、Python和Swift。我想我列出了我使用過的所有語言。 並非所有語言都是一樣的。有些比其他更“平等”(引用)。 我認為上述的所有語言非常相似。一旦你學會了其中一種,很容易學習其他語言。變數、函數、迴圈、物件。 當然,不同的語言都有一些獨特的特性,比如Go的協程或者C是非常低級的。但是底層基礎是相同的。 有些語言非常非常不同,比如Haskell、Elixir或者Lisp。我希望有一天能夠學習它們,但目前還沒有機會。 現在,我嘗試專注於受歡迎的初學者友好語言,有一個很好的原因。原因是你不會用Haskell開始你的職業生涯。當你去學它時,你已經是一個經驗豐富的程序員,我不需要教你任何東西。 不管怎樣,我稍微偏離了主題。 “你是如何學習多種語言的呢?” 我選擇一種新的語言,長時間專注學習它。 我用這種語言來建立東西。 我不斷練習,以初學者的心態,好奇並開放於這種語言應該如何運行。 有些語言很無聊,有些非常令人興奮。這完全取決於你需要做什麼。如果你夢想著機器學習,Python對你來說可能非常令人興奮。如果你的夢想是構建一個被世界各地數百萬用戶使用的iOS應用程序,Swift就是你的選擇。 我覺得在你的職業生涯中並不只學習一個編程語言。除非是特殊情況,事物會不斷變化。 20年後我不會繼續使用JavaScript。JavaScript要麼會完全不同於現在(就像你將現在的JavaScript與10年前的JavaScript比較),要麼它將會是一種古老的語言。 這就是為什麼我不標榜自己是一個“JavaScript開發者”或任何其他標籤。我只是一個開發者,這就是全部。 語言只是工具。 學習一門新語言並不是一個終點,而是一個冒險的開始。

如何學習程式設計

從這裡開始,如果你想成為一個程式設計師 嗨,我是一個程式設計師。我是那種整天坐在電腦前,讓它執行「事情」的酷人之一。 我們的生活相當不錯。天氣不好也沒問題,我們在室內工作。世界上任何地方都有很多工作機會。而且我們可以遠程工作,因為程式設計是在電腦上進行的。 我能理解你想成為一個程式設計師的原因,而且我想幫助你。 首先,你應該弄清楚你將要工作的領域。或者你想要工作的領域。 這取決於你的目標、傾向,以及在該領域找到好工作的可能性。 因為不只有「程式設計」或「軟體開發」這樣的概念。有不同種類的程式設計。你可能想學程式設計來: 創建一個網站 為你的智能手機創建一個移動應用程式 創建一個遊戲 使用 Arduino 自動化家庭 或者你可能想深入研究複雜的領域,如數據科學、機器學習、人工智能等等。 這些領域彼此之間非常不同。每個領域都有一種不同的程式語言作為它們的「主要語言」。 我們有無數不同的程式語言。有些語言比其他語言更複雜。有些語言對初學者更友好。有些語言非常專業化,有些是通用程式語言。有些非常流行,有些則是冷門和專業語言。有些是老語言,有些則是比較新的。 通常,你選擇的語言取決於你想要從事的領域: 想要創建實用工具並自動化工作任務嗎?學習 Python 想要從事網頁開發嗎?學習 HTML、CSS 和 JavaScript 想要使用 Arduino 和嵌入式設備嗎?學習 C/C++ 想要創建下一個 Linux 或者性能優越的命令行應用程式嗎?學習 Rust 想要創建遊戲嗎?學習 C# 和/或 C++ 想要從事機器學習和數據科學,或者一般的「數字處理」工作嗎?學習 Python、R、Julia 你可以用任何語言開始學習程式設計。只是要知道一些特殊化的專業領域只屬於一個語言。例如,iOS開發只能使用 Swift,而不是C#。而Android使用 Kotlin 或 Java,而不是 Python 或 PHP。前端 Web 開發主要是 JavaScript 的範疇。 每個專業領域都有它適合的程式語言。 學習程式設計的主要問題是動機。如果你有一個有抱負的目標,例如創建你想要的程式或遊戲,你為了實現夢想而努力學習,這對你的學習會大有幫助。 這種方式比一個普通的「學習程式設計」的目標更容易,後者可能太過一般化,缺乏動力。 動機不僅僅是建立自己的軟體和遊戲的夢想-也可能是在工作中變得更好,當然。 學習程式設計需要大量練習、嘗試與錯誤、耐心和堅持。 如果你不知道從哪一種語言開始,除非你的領域被一種特定的程式語言所支配,而且每個人都在使用該語言執行你想要的任務。 如果你想成為一個 Web 程式設計師,從 JavaScript 開始吧,因為你將在整天使用它。 否則,如果你想要開始並希望有人告訴你應該選擇哪種語言,我認為每個人都應該學習 Python。 Python 是一種通用的程式設計語言,容易學習且非常靈活。一旦你知道如何創建 Python 程式,你將可以將這些知識應用於任何地方。 下面是如何開始: 如果你的選擇是 Python 或 JavaScript,今天就從 freeCodeCamp 開始。這個以實踐為基礎的課程將幫助你快速入門。...

如何選擇博客的專業領域

選擇一個專業領域是定義你的網絡角落內容的一種方式。 它可以是關於你自己,你的愛好、熱情和故事。但這樣不會吸引太多人。也許一篇文章能解決他們的問題,但他們還會回來嗎?可能不會。 因為你的博客不是關於你,而是關於你的讀者。 選擇一個專業領域。一個小的主題。 比如說你是一個程序員。你可以寫一個關於C++編程語言的博客,每週寫兩篇文章,20年都寫不完題目。甚至這個專業領域可能還太廣了,並不是一個真正的專業領域。 一個更好的專業領域可以是C++嵌入式設備編程,或者使用C++建立遊戲。 然後再對這一群人進行進一步的過濾。比方說使用C++構建2D遊戲引擎。 你也可以從這個專業領域寫幾年的內容,但這一次如果有人對這個主題感興趣,他們會收藏你的網站,下載你的所有東西,因為你是專家(或者至少比他們更專業),他們可以從你這裡獲得很多價值。