」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 理解乾淨的程式碼:物件和資料結構⚡

理解乾淨的程式碼:物件和資料結構⚡

發佈於2024-08-24
瀏覽:308

Understanding Clean Code: Objects and Data Structures⚡

理解物件和資料結構之間的差異對於編寫乾淨的程式碼至關重要。

兩者在軟體設計中都有自己的地位,但服務於不同的目的,並且最適合各種場景。

在本文中,我們將深入探討物件和資料結構之間的差異,並探討何時使用它們,並使用 JavaScript 範例來說明概念。


?什麼是對象?

物件是物件導向程式設計(OOP)的基礎。

它們封裝了資料和行為,這意味著它們不僅保存訊息,還提供與該資訊互動的方法。

物件背後的核心思想是將資料與操作該資料的函數捆綁在一起,確保物件的內部狀態只能透過其方法進行操作。

物件範例:

class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }

  getArea() {
    return this.width * this.height;
  }

  getPerimeter() {
    return 2 * (this.width   this.height);
  }
}

const myRectangle = new Rectangle(5, 10);
console.log(myRectangle.getArea());       // Output: 50
console.log(myRectangle.getPerimeter());  // Output: 30

在本例中, Rectangle 類別是封裝了寬度和高度資料的對象,以及 getArea() 和 getPerimeter() 方法。

內部資料(寬度和高度)受到保護,只能透過這些方法存取或修改。


?什麼是資料結構?

相較之下,資料結構是沒有任何關聯行為的資料集合。

它們專注於公開數據而不是保護數據,使外部函數可以對其進行操作。

資料結構更多的是以一種易於檢索和修改的方式儲存和組織資料。

資料結構範例:

const rectangle = {
  width: 5,
  height: 10
};

function getArea(rectangle) {
  return rectangle.width * rectangle.height;
}

function getPerimeter(rectangle) {
  return 2 * (rectangle.width   rectangle.height);
}

console.log(getArea(rectangle));       // Output: 50
console.log(getPerimeter(rectangle));  // Output: 30

這裡,矩形是一種資料結構。它直接公開其數據,並且函數 getArea() 和 getPerimeter() 對此公開的數據進行操作。

與物件不同,沒有封裝性,資料可以被任何外部函數自由存取和修改。


?何時使用對象

當您想要將行為與資料一起封裝時,物件是理想的選擇。

這種封裝可讓您控制資料的存取和修改方式,提供一層保護。

物件也非常適合不同類型的物件需要透過明確定義的介面相互互動的情況。

⚡ 在下列情況下使用物件:

  • 你需要保護內部狀態並確保它只能透過特定的方法改變。
  • 您想要定義與數據密切相關的行為。
  • 您正在使用一個複雜的系統,其中封裝和抽象非常重要。

?何時使用資料結構

當您需要簡單地儲存和組織資料而不附加行為時,資料結構非常有用。

它們允許輕鬆直接地存取數據,這在效能和簡單性至關重要的場景中非常有用。

⚡ 在下列情況下使用資料結構:

  • 您需要直接公開資料以供外部函數操作。
  • 您希望保持設計簡單明了。
  • 行為與資料分離,可以在外部函數中實現。

要點?

  • 物件封裝資料和行為,保護內部狀態並透過方法提供受控存取。
  • 資料結構直接暴露數據,允許外部函數對其進行操作而無需任何封裝。
  • 當您需要封裝並希望將行為與資料捆綁在一起時,請使用物件。
  • 當您需要儲存資料而不附加行為,且簡單性和直接存取是優先考慮時,請使用資料結構。

理解物件和資料結構之間的差異對於編寫乾淨、可維護的程式碼至關重要。

透過根據應用程式的需求選擇正確的方法,您可以創建高效且易於理解的系統。

快樂編碼!

版本聲明 本文轉載於:https://dev.to/alisamir/understanding-clean-code-objects-and-data-structures-j4f?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-07-23
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-07-23
  • 如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求模擬瀏覽器行為,以及偽造的用戶代理提供了一個用戶 - 代理標頭一個有效方法是提供有效的用戶式header,以提供有效的用戶 - 設置,該標題可以通過browser和Acterner Systems the equestersystermery和操作系統。通過模仿像Chro...
    程式設計 發佈於2025-07-23
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-07-23
  • 您如何在Laravel Blade模板中定義變量?
    您如何在Laravel Blade模板中定義變量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配變量對於存儲以後使用的數據至關重要。在使用“ {{}}”分配變量的同時,它可能並不總是最優雅的解決方案。 幸運的是,Blade通過@php Directive提供了更優雅的方法: $ old_section =...
    程式設計 發佈於2025-07-23
  • Go語言如何動態發現導出包類型?
    Go語言如何動態發現導出包類型?
    與反射軟件包中的有限類型的發現能力相反,本文探討了在運行時發現所有包裝類型(尤其是struntime go import( “ FMT” “去/進口商” ) func main(){ pkg,err:= incorter.default()。導入(“ time”) ...
    程式設計 發佈於2025-07-23
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-07-23
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-07-23
  • 如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    在Visual Studio 2012 儘管已安裝了MySQL Connector v.6.5.4,但無法將MySQL數據庫添加到實體框架的“ DataSource對話框”中。為了解決這一問題,至關重要的是要了解MySQL連接器v.6.5.5及以後的6.6.x版本將提供MySQL的官方Visual...
    程式設計 發佈於2025-07-23
  • PHP陣列鍵值異常:了解07和08的好奇情況
    PHP陣列鍵值異常:了解07和08的好奇情況
    PHP數組鍵值問題,使用07&08 在給定數月的數組中,鍵值07和08呈現令人困惑的行為時,就會出現一個不尋常的問題。運行print_r($月)返回意外結果:鍵“ 07”丟失,而鍵“ 08”分配給了9月的值。 此問題源於PHP對領先零的解釋。當一個數字帶有0(例如07或08)的前綴時,PHP將...
    程式設計 發佈於2025-07-23
  • 將圖片浮動到底部右側並環繞文字的技巧
    將圖片浮動到底部右側並環繞文字的技巧
    在Web設計中圍繞在Web設計中,有時可以將圖像浮動到頁面右下角,從而使文本圍繞它纏繞。這可以在有效地展示圖像的同時創建一個吸引人的視覺效果。 css位置在右下角,使用css float and clear properties: img { 浮點:對; ...
    程式設計 發佈於2025-07-23
  • Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    程式設計 發佈於2025-07-23
  • 如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    程式設計 發佈於2025-07-23
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-07-23
  • 如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解決方案: args)拋出異常{ 日曆cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    程式設計 發佈於2025-07-23

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3