Gemini 程式碼助手 - 程式碼重構



程式碼重構對於保持程式最佳化、可維護性和無錯誤至關重要。Gemini 程式碼助手透過提供智慧建議和直接在您的開發環境中自動執行重構任務來簡化此過程。

在這裡,我們將瞭解用於程式碼重構的不同提示以及專案場景,以便更好地理解程式碼重構的好處。

Gemini Code Assist Code Refactoring

什麼是程式碼重構?

您可以重構當前專案中的任何程式碼,它將使程式碼更緊湊,同時保持簡單和可擴充套件。在這裡,邏輯不會改變,但內部結構會改變,消除冗餘邏輯和不需要的迴圈,並提高可讀性。您進一步修改專案程式碼的任務變得更容易。

Gemini 如何識別重構機會?

Gemini 使用其經過訓練的高階靜態程式碼分析以及依賴關係對映來掃描程式碼庫並建議改進區域。以下是它檢測重構需求的關鍵方法:

  • 靜態程式碼分析 - 識別程式碼邏輯、反模式以及潛在的改進或進一步簡化(如果需要)。
  • 檢測程式碼變數 - 它會標記諸如長方法、深度巢狀和冗餘變數等問題。
  • 與 Lint 工具整合 - Gemini 可以根據樣式指南(例如 Python 中的 PEP8 或 JavaScript 中的 ESLint)建議立即修復。
  • 依賴關係分析 - 透過此功能,Gemini 確保重構不會破壞模組之間的連結或導致專案中出現意外行為。

Gemini 中支援的重構技術

Gemini 自動執行各種重構任務,包括:

  • 重新命名變數/方法 - 確保整個專案中使用有意義的命名約定,並查詢之前使用的變數名稱。
  • 提取方法 - 將複雜邏輯分解成更小、可重用的方法。
  • 內聯重構 - 當不需要這些不必要的程式碼段時,將邏輯從單獨的函式移動到主體中。
  • 簡化控制結構 - 用更清晰的邏輯替換深度 if-else 鏈。
  • 迴圈重構 - 將迴圈轉換為函式式程式碼,例如 map/filter 函式。

使用 Gemini 的程式碼重構示例

讓我們來看一些使用 Gemini 程式碼助手進行程式碼重構的示例:

Python 示例:提取方法

這是一個計算給定數字平均值的簡單函式。

重構前:

def process_data(data):
   result = sum(data) / len(data)
   print(f"The average is {result}")
   print(f"Data has total {len(data)} elements")

process_data([10, 20, 30, 40, 50])

您可以向 Gemini 新增如下提示:“建議對 Python 中的大型函式進行方法提取。”它將使上述程式碼更通用和可擴充套件。

使用 Gemini 建議重構後:

def calculate_average(data):
   return sum(data) / len(data)

def print_data_info(data):
   print(f"The average is {calculate_average(data)}")
   print(f"Data has total {len(data)} elements")

print_data_info([10, 20, 30, 40, 50])

此示例演示了上述函式中的方法提取。最終,它透過將邏輯分解成更小、更集中的方法來促進模組化。

JavaScript 示例:重構控制結構

重構前:

function getUserAccess(role) {
   if (role === 'admin') {
      return 'Full Access';
   } else if (role === 'editor') {
      return 'Edit Content';
   } else {
      return 'View Only';
   }
}

向 Gemini 新增如下建議:“使用基於物件的模式簡化 if-else 條件。”這種重構使用物件對映來簡化條件邏輯並提高可讀性。

重構後:

function getUserAccess(role) {
   const access = {
      admin: 'Full Access',
      editor: 'Edit Content',
   };
   return access[role] || 'View Only';
}

Java 示例:使用流進行迴圈重構

重構前:

int sum = 0;
for (int i = 1; i <= 10; i++) {
   sum += i;
}
System.out.println("Sum: " + sum);

使用如下提示:“將 Java 中的迴圈重構為函式式流。”它將簡化並用函式式流替換迴圈,以提高可讀性和效能。

重構後:

int sum = IntStream.rangeClosed(1, 10).sum();
System.out.println("Sum: " + sum);

您可以使用 Gemini 重構任何程式語言中的任何程式碼,它適用於不同的平臺、框架和多種型別的個性化專案。

使用 Gemini 程式碼助手的重構自動化

  • 即時建議 - 此功能直接整合到 IDE 中,以提供即時反饋,即使它用作輕量級擴充套件時也是如此。
  • 批次重構 - 正確的提示將自動執行整個專案中多個檔案的重新命名函式和方法提取。
  • 版本控制整合 - 跟蹤更改以避免協作開發期間發生衝突。
  • 回滾機制 - 當代碼發生不需要的重構時,它會安全地將更改恢復到原始程式碼,尤其是在遇到任何問題或可擴充套件性錯誤時。

為重構後的程式碼生成完美的測試用例

重構後,測試對於確保功能保持完整至關重要。它可以根據重構後的程式碼自動生成測試用例,以驗證所有可能的結果。

Gemini 掃描程式碼並識別關鍵輸入和輸出。它確保所有程式碼路徑(包括邊緣情況)都包含在測試中。依賴項檢查會為邊緣情況生成測試用例,幷包括函式中的任何互動元件。

示例:在 Python 中生成測試用例

重構後的函式:

def multiply(a, b):
   return a * b

提示 - “使用 pytest 為 Python 中的乘法生成引數化測試。”

使用 Pytest 的測試用例:

import pytest
pytest.mark.parametrize("a, b, expected", [(2, 3, 6), (0, 5, 0), (-1, 4, -4)])
def test_multiply(a, b, expected):
   assert multiply(a, b) == expected

示例:在 JavaScript (Jest) 中生成測試用例

重構後的函式:

function add(a, b) {
   return a + b;
}

提示 - “為附加函式建立具有多個輸入的 Jest 測試用例。”

使用 Jest 的測試用例:

test.each([
   [2, 3, 5],
   [0, 0, 0],
   [-1, 4, 3]
])('adds %i and %i to give %i', (a, b, expected) => {
   expect(add(a, b)).toBe(expected);
});

真實場景:重構 Web 應用程式以最佳化效能

讓我們考慮一個用於管理組織中員工記錄的 Python-Django Web 應用程式。最初,程式碼編寫時最佳化程度很低,導致效能問題,例如資料庫查詢緩慢和冗餘邏輯。

Gemini 程式碼助手有助於逐步重構專案以提高效能、可讀性和可維護性。

初始問題:未最佳化的程式碼結構

原始程式碼從資料庫中檢索員工資料,手動對其進行篩選,然後將其呈現到前端。

重構前:

Un-optimized Code Structure 1

Un-optimized Code Structure 2

上述函式從資料庫中檢索所有員工並手動執行篩選。但是,檢視函式中的邏輯可以提取到服務層以供重用。

重構資料庫查詢

提示 - “我可以最佳化這些 Django ORM 查詢以篩選薪資超過 50,000 的員工嗎?”

Gemini 的程式碼建議:

Refactoring Database Queries 1

Refactoring Database Queries 2

在這裡,諸如篩選、按薪資排序、索引、快取、分頁和查詢最佳化等因素都得到了應用,並提供了一個重構後的程式碼,該程式碼可以建立一個更有效、更可擴充套件的 Django 應用程式,用於篩選薪資超過 50000 的員工。

將邏輯提取到服務層

提示 - “將員工篩選邏輯提取到單獨的函式中以實現更好的程式碼重用。”

Gemini 的程式碼建議:

Extracting Logic into a Service Layer

這種重構透過將邏輯封裝到單獨的函式中來提高程式碼可重用性,以便您可以在應用程式的其他部分中應用此邏輯。

為重構後的程式碼生成測試用例

提示 - “生成 pytest 測試用例以驗證員工篩選邏輯。”

Gemini 的測試用例建議:

Generating Test Cases for Refactored Code

測試用例驗證 filter_high_earners 函式並確保篩選邏輯與資料庫中的員工一起正常工作。

使用 Gemini 進行效能測試

提示 - “分析重構後函式的效能並提出改進建議。”

Gemini 的建議:

如果涉及外部索引鍵,請使用 select_related() 來減少查詢次數。

對頻繁訪問的資料應用快取以進一步提高效能。

重構對專案效能的影響

以下是重構對專案效能的影響:

  • 提高效率
  • 更好的可維護性
  • 減少技術債務
  • 增強協作

使用 Gemini 程式碼助手的重構最佳實踐

以下是使用 Gemini 程式碼助手進行重構的最佳實踐:

  • 分步重構 - 避免一次進行多次更改。
  • 定期提交 - 使用版本控制來增量跟蹤更改。
  • 頻繁執行測試 - 確保每次更改後所有功能都完好無損。
  • 監控程式碼指標 - 跟蹤圈複雜度並維護程式碼質量。
  • 團隊審查 - 與團隊成員合作以驗證重構工作。

結論

總的來說,您在專案應用程式中編寫的邏輯必須準確且最終。Gemini 將檢視您編寫的此邏輯並建議對程式碼進行小片段重構。這些程式碼建議開發人員很容易理解,並且本質上具有很強的可擴充套件性。您需要做的就是編寫完美的提示並獲得完美的輸出,而無需新增過多的不必要資訊。這不僅可以提高生產力,還可以減少構建更最佳化、更可靠的可擴充套件應用程式所需的時間。

廣告