JAVA代碼走查重構常用prompt

代碼重構prompt:

## 主題:

代碼重構

## 角色扮演:

你是軟件開發大師Martin Fowler,精通代碼重構、面向對象編程、Clean Code和設計模式,且熟練掌握《重構,改善既有代碼的設計》這本書中的重構思想和各種重構方法。

## 背景

以下是一段<函數代碼>:

"""

//待重構代碼

****

****

"""

## 任務描述:

參考但不限于重構條目中的靶點對背景中提供的<函數代碼>進行代碼重構,以提高代碼的可理解性、可擴展性

## 重構條目:

- 神秘命名(Mysterious Name):函數、模塊、變量和類應該有合適的命名,使它們能夠清晰地表明自己的功能和用法

- 重復代碼(Duplicates Code):對于出現的相同代碼應設法將它們合而為一

- 過長函數(Long Function):很長、難以理解的大函數應該分解成易于理解的獨立小函數,并以其用途命名

- 過長參數列表(Long Parameter List):函數不應該有過長的參數列表

- 發散式變化(Divergent Change):每當要對某個上下文做修改時,只需要理解這個上下文,而不必操心另一個

- 數據泥團(Data Clumps):總是綁在一起出現的數據應該擁有屬于它們自己的對象

- 重復的switch(Repeated Switches):對于重復出現的switch語句,應當以多態的方式進行取代

- 循環語句(Loops):嘗試用Stream流來取代循環

- 冗贅的元素(Lazy Element):刪除不必要存在的冗余元素

- 臨時字段(Temporary Field):消除令人迷惑的臨時字段

- 過大的類(Large Class):單個類做了太多事情,應對其進行拆分

- 注釋(Comments):當代碼足夠清晰地表達其做的事情,注釋變得多余

## 完成步驟:

- 首先閱讀程序代碼,理解<函數代碼>實現的功能。

-?參考但不限于重構條目中的靶點,檢查代碼,并給出重構修改意見

- 給出重構后的代碼

-?如果可以使用設計模式改善代碼,給出使用設計模式的意見

?代碼走查:

##任務:

你是一個具有20年JAVA開發經驗的資深程序員,熟讀并深刻理解了《代碼簡潔之道》中的精髓,請對下面的<函數代碼>進行走查,給出優化建議和優化后的代碼

##輸入:?

<函數代碼>

"""

//待走查代碼

"""

##期望的輸出:

對<函數代碼>的優化建議和優化后的代碼

##代碼語言:Java

##代碼簡潔之道的原則:

1、命名清晰:變量名,方法名應明確表達其用途,盡可能避免歧義。特定類型的變量和函數應有一致的命名規則。

2、函數簡單:函數盡量做一件事,保持簡單短小(不超過30行)。函數的參數盡量少(不超過3個),避免副作用

3、錯誤處理:代碼應該有適當的錯誤處理,并且所有的異常都應該被恰當地處理。

4、格式一致:遵循一致的代碼格式和風格,使代碼更易讀。

5、簡潔性:代碼不應該有冗余或無用的部分,重復代碼提取公共函數。

6、避免深度嵌套:避免代碼中深度嵌套的邏輯(循環嵌套次數不大于3,if 語句的嵌套層數不要大于3),使得代碼更容易理解。

##符合《代碼簡潔之道》的示例:

"""

public class ProductManager {

? ? private ProductService productService;

? ? public ProductManager(ProductService productService) {

? ? ? ? this.productService = productService;

? ? }

? ? // 使用清晰的函數名和參數名,避免歧義。

? ? public Product getProductDetails(int productId) {

? ? ? ? try {

? ? ? ? ? ? // 調用簡單的函數,達到避免函數內部過于復雜的目的

? ? ? ? ? ? Product product = this.fetchProductById(productId);

? ? ? ? ? ? if (product == null) {

? ? ? ? ? ? ? ? throw new ProductNotFoundException("Product with id " + productId + " not found.");

? ? ? ? ? ? }

? ? ? ? ? ? return product;

? ? ? ? } catch (Exception e) {

? ? ? ? ? ? // 處理錯誤,防止異常泄露

? ? ? ? ? ? handleProductException(e);

? ? ? ? }

? ? }

? ? // 函數名稱清晰,易于理解其功能

? ? private Product fetchProductById(int productId) {

? ? ? ? return productService.getProductById(productId);

? ? }

? ? // 錯誤處理函數,用于處理Product相關的異常

? ? private void handleProductException(Exception e) {

? ? ? ? System.out.println("Failed to fetch product: " + e.getMessage());

? ? ? ? e.printStackTrace();

? ? }

}

"""

在這個示例中, ProductManager 類有清晰的命名規則,方法名明確并且簡單(做一件事情)。每個方法都小于30行,并且參數沒有超過3個。此外,所有可能的錯誤都被正確處理。代碼的格式和風格保持一致,沒有冗余的部分。最后,代碼沒有深度嵌套的邏輯,使其更易于理解。

##不符合《代碼簡潔之道》的示例:

"""

public class BadCode {

? ? int a, b, c, d, e;

? ? public int func(int x1, int x2, int x3, int x4, int x5, int x6, int x7) {

? ? ? ? a = x1;

? ? ? ? b = x2;

? ? ? ? c = x3;

? ? ? ? d = x4;

? ? ? ? e = x5;

? ? ? ? int f = a + b + c + d + e;

? ? ? ? int g = a - b - c - d - e;

? ? ? ? int h = a * b * c * d * e;

? ? ? ? int i = a / b / c / d / e;

? ? ? ? int j = a % b % c % d % e;

? ? ? ? try {

? ? ? ? ? ? int k = f + g + h + i + j;

? ? ? ? ? ? if (k > 0) {

? ? ? ? ? ? ? ? if (k > 10) {

? ? ? ? ? ? ? ? ? ? if (k > 100) {

? ? ? ? ? ? ? ? ? ? ? ? if (k > 1000) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? if (k > 10000) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return k;

? ? ? ? ? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return k + 1;

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? ? ? return k + 2;

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? return k + 3;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? return k + 4;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? return k + 5;

? ? ? ? ? ? }

? ? ? ? } catch (Exception ex) {

? ? ? ? ? ? ex.printStackTrace();

? ? ? ? }

? ? ? ? return 0;

? ? }

}

"""

在這個示例中,

變量命名不清晰,如a, b, c, d, e, f, g, h, i, j, k,不能明確表示其用途

函數過于復雜,并且參數過多,超過了3個,有副作用

錯誤處理不恰當,只是簡單地打印堆棧信息,并未對異常進行處理

格式不一致,例如變量和運算符之間沒有統一的空格風格

冗余性,例如冗余的變量以及冗余的else聲明

深度嵌套過多,if語句的嵌套層數大于3,使得代碼難以理解。

##逐步思考

1、請先逐行讀懂<函數代碼>中的每一行代碼含義并對整個代碼邏輯進行理解,解釋<函數代碼>實現的功能

2、開始使用《代碼簡潔之道》原則優化代碼

?TodoList生成提示詞模板:

# 主題:

TDD測試用例文字描述(todolist)生成

## 需求描述:

xxxxxxxx

### 流程圖

### 接口輸入

### 接口輸出

## 角色扮演:

你是一個20年工作經驗的資深java語言編碼專家,擅長TDD、Java核心語法、面向對象編程、Java集合框架、多線程編程、網絡編程、數據庫連接、代碼重構、設計模式、架構模式、分層架構、微服務架構等技能

## 任務描述:

熟悉需求描述、接口輸入和接口輸出,按照完成步驟,輸出符合格式要求的測試用例的文字描述,不需要輸出代碼

## 完成步驟:

-首先需求描述

-然后根據需求描述、按照格式要求生成測試用例的文字描述,測試用例包括正常場景用例和異常場景用例,對于每個用例包括輸入和輸出

## 格式要求:

-用例名稱使用given-when-then格式

-用例名稱不能有非法字符

## 示例

正常場景:

-xxxx

異常場景:

- xxxx

## 限制

讓我們逐步思考

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71355.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71355.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[數據結構]紅黑樹,詳細圖解插入

目錄 一、紅黑樹的概念 二、紅黑樹的性質 三、紅黑樹節點的定義 四、紅黑樹的插入&#xff08;步驟&#xff09; 1.為什么新插入的節點必須給紅色&#xff1f; 2、插入紅色節點后&#xff0c;判定紅黑樹性質是否被破壞 五、插入出現連續紅節點情況分析圖解&#xff08;看…

STM32 HAL庫USART串口DMA IDLE中斷編程:避坑指南

HAL_UART_Receive接收最容易丟數據了,STM32 HAL庫UART查詢方式實例 可以考慮用中斷來實現,但是HAL_UART_Receive_IT還不能直接用,容易數據丟失,實際工作中不會這樣用,STM32 HAL庫USART串口中斷編程&#xff1a;演示數據丟失, 需要在此基礎優化一下. STM32F103 HAL庫USART串口…

sql注入中information_schema被過濾的問題

目錄 一、information_schema庫的作用 二、獲得表名 2.1 sys.schema_auto_increment_columns 2.2 schema_table_statistics 三、獲得列名 join … using … order by盲注 子查詢 在進行sql注入時&#xff0c;我們經常會使用information_schema來進行爆數據庫名、表名、…

Jenkins 給任務分配 節點(Node)、設置工作空間目錄

Jenkins 給任務分配 節點(Node)、設置工作空間目錄 創建 Freestyle project 類型 任務 任務配置 Node 打開任務-> Configure-> General 勾選 Restrict where this project can be run Label Expression 填寫一個 Node 的 Label&#xff0c;輸入有效的 Label名字&#x…

Electron:使用electron-react-boilerplate創建一個react + electron的項目

使用 electron-react-boilerplate git clone --depth 1 --branch main https://github.com/electron-react-boilerplate/electron-react-boilerplate.git your-project-name cd your-project-name npm install npm start 安裝不成功 在根目錄加上 .npmrc文件 內容為 electron_…

數控機床設備分布式健康監測與智能維護系統MTAgent

數控機床設備分布式健康監測與智能維護系統MTAgent-v1.1融合了目前各種先進的信號處理以及信息分析算法以算法工具箱的方式&#xff0c;采用了一種開發的、模塊化的結構實現信號各種分析處理&#xff0c;采用Python編程語言&#xff0c;滿足不同平臺需求(包括Windows、Linux)。…

FPGA VIVADO:axi-lite 從機和主機

FPGA VIVADO:axi-lite 從機和主機 TOC在這里插入代碼片 前言 協議就不詳細講解了&#xff0c;直接看手冊即可。下面主要如何寫代碼和關鍵的時序。 此外下面的代碼可以直接用于實際工程 一、AXI-LITE 主機 數據轉axi lite接口&#xff1a; 讀/寫數據FIFO緩存 仲裁&#xff1a…

1. 對比 LVS 負載均衡群集的 NAT 模式和 DR 模式,比較其各自的優勢 。2. 基于 openEuler 構建 LVS-DR 群集。

DR 模式 * 負載各節點服務器通過本地網絡連接&#xff0c;不需要建立專用的IP隧道 原理&#xff1a;首先負載均衡器接收到客戶的請求數據包時&#xff0c;根據調度算法決定將請求發送給哪個后端的真實服務器&#xff08;RS&#xff09;。然后負載均衡器就把客戶端發送的請求數…

ollama server啟動服務后如何停止

要停止 Ollama 服務器服務&#xff0c;取決于如何啟動該服務的。以下是幾種常見的啟動方法和相應的停止服務的步驟&#xff1a; 1. 直接在命令行中啟動 如果是在命令行中直接啟動 Ollama 服務器的&#xff0c;例如使用以下命令&#xff1a; ollama serve 可以通過以下方式停…

【設計模式】03-理解常見設計模式-行為型模式(專欄完結)

前言 前面我們介紹完創建型模式和創建型模式&#xff0c;這篇介紹最后的行為型模式&#xff0c;也是【設計模式】專欄的最后一篇。 一、概述 行為型模式主要用于處理對象之間的交互和職責分配&#xff0c;以實現更靈活的行為和更好的協作。 二、常見的行為型模式 1、觀察者模…

mapbox基礎,使用geojson加載line線圖層,實現純色填充、圖片填充、虛線和漸變效果

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言1.1 ??mapboxgl.Map 地圖對象1.2 ??mapboxgl.Map style屬性1.3 ??line線圖層樣式二、??使用geojson加載…

深入淺出:CUDA是什么,如何利用它進行高效并行計算

在當今這個數據驅動的時代&#xff0c;計算能力的需求日益增加&#xff0c;特別是在深度學習、科學計算和圖像處理等領域。為了滿足這些需求&#xff0c;NVIDIA推出了CUDA&#xff08;Compute Unified Device Architecture&#xff09;&#xff0c;這是一種并行計算平臺和編程模…

LNMP+Zabbix安裝部署(Zabbix6.0 Lnmp+Zabbix Installation and Deployment)

LNMPZabbix安裝部署&#xff08;Zabbix6.0&#xff09; 簡介 LNMP&#xff08;Linux Nginx MySQL PHP&#xff09;是一種流行的Web服務器架構&#xff0c;廣泛用于搭建高性能的網站和應用程序。Zabbix 是一個開源的監控軟件&#xff0c;可以用來監控網絡、服務器和應用程序…

Docker 部署 Dify:輕松集成 Ollama 和 DeepSeek

1 Ollama的安裝及使用 1.1 什么是Ollama&#xff1f; Ollama 是一個用于本地部署和運行大型語言模型的框架。 Ollama 的作用包括&#xff1a; 本地模型運行&#xff1a;Ollama 允許在本地機器上運行大型語言模型&#xff08;如 LLaMA、DeepSeek 等&#xff09;&#xff0c;無…

C++筆記之標準庫中用于處理迭代器的`std::advance`和`std::distance`

C++筆記之標準庫中用于處理迭代器的std::advance和std::distance code review! 文章目錄 C++筆記之標準庫中用于處理迭代器的`std::advance`和`std::distance`一.`std::advance`函數原型參數說明使用場景示例代碼示例 1:移動 `std::vector` 的隨機訪問迭代器示例 2:移動 `st…

工業制造能耗管理新突破,漫途MTIC-ECM平臺助力企業綠色轉型!

在工業制造領域&#xff0c;能源消耗一直是企業運營成本的重要組成部分。隨著“雙碳”目標的推進&#xff0c;如何實現高效能耗管理&#xff0c;成為制造企業亟待解決的問題。漫途MTIC-ECM能源能耗在線監測平臺&#xff0c;結合其自研的硬件產品&#xff0c;為工業制造企業提供…

C語言——深入理解指針(2)(數組與指針)

文章目錄 數組名的理解使用指針訪問數組一維數組傳參的本質冒泡排序二級指針指針數組指針數組模擬二維數組 數組名的理解 之前我們在使用指針訪問數組內容時&#xff0c;有這樣的代碼&#xff1a; int arr[10]{1,2,3,4,5,6,7,8,9,10}; int* p&arr[0];這里我們使用&ar…

在Windows系統中安裝Open WebUI并連接Ollama

Open WebUI是一個開源的大語言模型&#xff08;LLM&#xff09;交互界面&#xff0c;支持本地部署與離線運行。通過它&#xff0c;用戶可以在類似ChatGPT的網頁界面中&#xff0c;直接操作本地運行的Ollama等大語言模型工具。 安裝前的核心要求&#xff1a; Python 3.11&#…

Day4:強化學習之Qlearning走迷宮

一、迷宮游戲 1.環境已知 迷宮環境是定義好的&#xff0c;障礙物位置和空位置是已知的&#xff1b; # 定義迷宮 grid [[0, 0, 0, 1, 0],[0, 1, 0, 1, 0],[0, 1, 0, 0, 0],[0, 0, 0, 1, 0],[0, 1, 1, 1, 0] ] 2.獎勵方式已知 如果碰到障礙物則得-1&#xff0c;如果到終點則…

家里WiFi信號穿墻后信號太差怎么處理?

一、首先在調制解調器&#xff08;俗稱&#xff1a;貓&#xff09;測試網速&#xff0c;網速達不到聯系運營商&#xff1b; 二、網線影響不大&#xff0c;5類網線跑500M完全沒問題&#xff1b; 三、可以在臥室增加輔助路由器&#xff08;例如小米AX系列&#xff09;90~200元區…