赞
踩
以GPT为首的技术,让代码生成成为可能。
如何更好使用它,帮助我们进行编码,是本期文章的主题。
当我们有一些简单的需求时,我们可以直接告诉GPT,让它帮我们生成一些代码,例如:
用户:帮我写一个快速排序的Java代码
ChatGPT:
当然,下面是快速排序的Java实现代码:
public class QuickSort {
public static void main(String[] args) {
int[] arr = {9, 5, 7, 2, 3, 6, 8, 4, 1};
quickSort(arr, 0, arr.length - 1);
System.out.print("Sorted Array: ");
printArray(arr);
}
......省略后面内容......
但是,在实际项目中,我们可能发现,不知道什么时候该用它,怎么用。 这里我提供一种我的编程方式的思路,你可以看看。
通过这种编程方式,我可以更容易写出比较清晰的代码,代码也更少出错。
思想是:“先定大局逻辑,再把细节各个击破”,读了下面的例子,你应该就能理解了
以下是我杜撰的一个示例。
客户需求:
对一个学生成绩的文件做处理,例如:student_grade.txt.【包括:姓名、成绩】
产出:
1. 平均分文件
2. 得分前10名同学 + 成绩的文件
好的,我的做法如下:
思考整体流程是怎样的?【以下是一种可能的思考方式,你可以有不同的思考】
写出整个大的调用流程,把复杂的部分用函数表示,写下函数的简单注释,像伪代码那样:
originalFileName="/tmp/student_grade.txt"
// 第一步:读文件
List<String> studentStrList = readLinesFromFile(originalFileName)
// 第二步:将列表转换为对象,方便后续处理
List<Student> studentList = strListToStudentList(studentStrList)
// 第三步:计算平均分,保存到一个txt文件里
avgFileName="/tmp/avg.txt"
calculateAvgGrade(studentList, avgFileName);
// 第四步:排序后取前10名,保存到一个文件里
top10GradeFileName="/tmp/top10Grade.txt"
top10AvgGrade(studentList, avgFileName);
/**
* 把指定文件的内容,按行读取出来。
* @throws java.io.FileNotFoundException 当不存在该文件时,抛出该异常
*/
public static List<String> readLinesFromFile(String fileName) {
}
/**
* 计算studentList的平均分,保存到文件中,文件命名为avgFileName。
*/
public static void calculateAvgGrade(List<Student> studentList, String avgFileName) {
}
以下是我在开发过程中,可能的询问GPT的一种方式:
用户: 我有个Java函数,请帮我实现该函数: /** * 把指定文件的内容,按行读取出来。 * @throws java.io.FileNotFoundException 当不存在该文件时,抛出该异常 */ public static List<String> readLinesFromFile(String fileName) { } GPT的回复: 当然可以!以下是实现给定函数的代码示例: import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class FileUtil { /** * 把指定文件的内容,按行读取出来。 * @param fileName 文件名 * @return 包含文件每行内容的列表 * @throws java.io.FileNotFoundException 当不存在该文件时,抛出该异常 */ public static List<String> readLinesFromFile(String fileName) throws IOException { List<String> lines = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) { String line; while ((line = reader.readLine()) != null) { lines.add(line); } } return lines; } }
如果你觉得逻辑很复杂,直接生成很难给GPT描述,那么有如下解决方式:
calculateAvgGrade
或 top10AvgGrade
时,你发现,这个函数可以拆分为如下:/**
* 计算studentList的平均分,保存到文件中,文件命名为avgFileName。
*/
public static void calculateAvgGrade(List<Student> studentList, String avgFileName) {
// 计算平均分
List<String> avgGrade = getAvgGrade(studentList)
// 保存到文件里
saveToFile(avgGrade, avgFileName);
}
可以发现,saveToFile
这部分功能比较简单独立,可以交给GPT来生成。方法同样是,给定函数定义,写下注释,让GPT生成。
注:其实,这个已经有现成的工具类可以使用,不需要重新写一个了,修改提示词询问GPT即可。
其他的函数也可以按照这种方式生成。
总的来说,核心就是:“先从大局出发,搞清楚整个流程,再逐个击破。”
由外到内,搞明白整体流程是什么,从大局层面先定下来,细节的部分,可以交给GPT做或者你自己实现。
如果你写代码是:从上到下,也就是在写到readLinesFromFile(originalFileName)
时,就急于去实现该方法,往往容易因小失大,忘记全局的情况
当然,本文给的例子的解决方法不是唯一的,实际思考伪代码时,你可以用各种不同的方式来实现,这都是可以的。并且如果你仔细查看,就会发现我的处理方法不一定高效,甚至有可能是错的。
不过,思想最重要,你要是有更好的想法,欢迎留言或者私信和我交流。
我个人平时会用到的 “生成代码/单元测试” 的 prompt提示词,我也搞了一个文档,各位有需要的可以查看我的这篇文章:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。