如何使用基于GPT-4的Cursor编辑器提升开发效率

news2024/12/27 18:03:24

程序员最恨两件事情:一是别人代码不写文档,二是要让自己写文档。随着 GPT-4 的到来这些都不是问题了,顺带可能连程序员都解决了。。。
之前一直觉得 AI 生成的代码也就写个面试题的水平,小打小闹,现在时代可变了。Cursor 编辑器是 GPT-4 驱动,对接了 GitHub 的 Copilot。本文列举了几个他能完全掌控的场景,就看你慌不慌

文章目录

  • 一、代码审查
  • 二、补充文档
  • 三、补充单测
  • 四、补充定义
  • 五、生成通用代码
  • 六、总结

官网: https://www.cursor.so/
官网

一、代码审查

他能看懂你的代码,并能指出错误!!!也就是说他的编程水平是高于你的!毕竟基于 GitHub 的海量代码训练出来的,Code Review 从此有了个好老师

  • 源码:我们从网上找了个常见的金额处理函数,并删掉一些边界条件看看能不能发现问题
    金额处理
const formatMoney = (money, symbol = "", decimals = 2) => {
  let arr = money.toFixed(decimals).toString().split(".");
  let first = parseInt(arr[0]).toLocaleString();
  let result = [first, arr[1]].join(".");
  return `${symbol} ${money.toFixed(decimals)}`;
};

formatMoney(12341234.246); // 12,341,234.25
formatMoney(12341234.246, "¥", 1); // ¥ 12,341,234.2
  • 输入指令:分析 formatMoney 函数的入参风险,中文回答
  • 效果:询问被修改的函数风险能准确回答,并给出改进方法
    风险
  • 输入指令:分析这个文件并给出优化建议
  • 效果:能清晰的识别 3 个函数的作用,并能给出建议
    cr

二、补充文档

程序员最恨两件事情:一是别人代码不写文档,二是要让自己写文档。现在这都不是问题了,在不写一行中文注释的情况下,生成完整的文档不在话下

  • 输入指令:补充这个文件的中文markdown,包含使用说明、场景说明、注意事项、代码示范等
    生成文档
  • 效果:markdown 渲染效果如下
    使用说明

三、补充单测

  • 输入指令:给上面函数补充完整的单元测试,考虑各种边界条件
    单测
  • 效果:瞬间生成单测,并能覆盖各种边界和极端情况,极大的提高代码质量
test("formatMoney should format money correctly", () => {
  expect(formatMoney(12341234.246)).toBe(" 12341234.25");
  expect(formatMoney(12341234.246, "¥", 1)).toBe("¥ 12341234.2");
  expect(formatMoney(0)).toBe(" 0.00");
  expect(formatMoney(0.1)).toBe(" 0.10");
  expect(formatMoney(0.005)).toBe(" 0.01");
  expect(formatMoney(9999999999.999)).toBe(" 9999999999.99");
});

test("fenToYuan should convert fen to yuan correctly", () => {
  expect(fenToYuan(123456)).toBe("1234.56");
  expect(fenToYuan(0)).toBe("0.00");
  expect(fenToYuan("123456")).toBe("1234.56");
  expect(fenToYuan("0")).toBe("0.00");
});

test("yuanToFen should convert yuan to fen correctly", () => {
  expect(yuanToFen(12.34)).toBe("1234");
  expect(yuanToFen(0)).toBe("0");
  expect(yuanToFen("12.34")).toBe("1234");
  expect(yuanToFen("0")).toBe("0");
});
test("formatMoney should handle negative numbers correctly", () => {
  expect(formatMoney(-1234.5678)).toBe("- 1234.57");
  expect(formatMoney(-1234.5678, "¥", 1)).toBe("-¥ 1234.6");
  expect(formatMoney(-0.1)).toBe("- 0.10");
  expect(formatMoney(-0.005)).toBe("- 0.01");
  expect(formatMoney(-9999999999.999)).toBe("- 9999999999.99");
});

test("fenToYuan should handle negative numbers correctly", () => {
  expect(fenToYuan(-123456)).toBe("-1234.56");
  expect(fenToYuan("-123456")).toBe("-1234.56");
});

test("yuanToFen should handle negative numbers correctly", () => {
  expect(yuanToFen(-12.34)).toBe("-1234");
  expect(yuanToFen("-12.34")).toBe("-1234");
});

四、补充定义

  • 指令:补充formatMoney函数的interface
  • 效果:可快速生成 interface
    interface

五、生成通用代码

  • 目标:我们提前定义一个树状的菜单结构 tree,然后让 AI 根据字段和属性自动生成可投产面包屑组件
  • 指令:生成一个面包屑组件,入参是tree和当前路由
  • 效果:可迅速生成高质量可运行的面包屑组件,自动分析 tree 的数据格式,并生成递归查找路径的函数
    面包屑
const tree = [
    {
        name: '首页',
        route: '/',
    },
    {
        name: '个人中心',
        route: '/home',
        children: [
            {
                name: '我的订单',
                route: '/order',
                children: [
                    {
                        name: '未收货',
                        route: '/undo',
                    },
                    {
                        name: '已收货',
                        route: '/done',
                    }
                ]
            },
            {
                name: '我的地址',
                route: '/address',
                children: [
                    {
                        name: '首页',
                        route: '/',
                    }
                ]
            }
        ]
    }
]
const Breadcrumb = ({ tree, currentRoute }) => {
  const breadcrumbList = [];

  const findRoute = (tree, currentRoute) => {
    for (let i = 0; i < tree.length; i++) {
      const node = tree[i];
      if (node.route === currentRoute) {
        breadcrumbList.push(node.name);
        return true;
      } else if (node.children) {
        if (findRoute(node.children, currentRoute)) {
          breadcrumbList.push(node.name);
          return true;
        }
      }
    }
    return false;
  };

  findRoute(tree, currentRoute);

  return (
    <div>
      {breadcrumbList.reverse().map((item, index) => (
        <span key={index}>
          {item}
          {index !== breadcrumbList.length - 1 && ' > '}
        </span>
      ))}
    </div>
  );
};

<Breadcrumb tree={tree} currentRoute={'/home/order/undo'} />

六、总结

  • 最后来一段视频完整的回顾一下效果

    使用基于GPT-4的Cursor编辑器自动生成代码

  • 本文给出的例子其实都比较简单,真正打开生产环境的复杂业务逻辑代码照样都能分析的头头是道,这里主要是红线问题不能使用业务代码作为示范。

  • 现阶段看起辅助作用是完全没问题的,真正实现了人机结对编程,目测已经可以取代 30% 左右的重复低水平劳动。这还是在没有完整阅读业务仓库代码和 PRD 的基础上做到的,如果以公司粒度投喂更多的业务知识和已有代码,以及后面的技术升级,那能干的活的比例肯定是越来越高的。

  • AI 的奇点真的快来了,有生之年肯定是能看到这样的盛况了,是福是祸只能拥抱变化了吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/426189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

@Conditional四个较常用的派生注解总结

该内容是在学习SpringBoot底层的时候&#xff0c;看到SpringBoot的使用&#xff0c;所以这的做一个简单的总结方便以后复习。可能会有一些问题&#xff0c;还望指出共同学习 Conditional注解&#xff1a; 作用&#xff1a;按照一定的条件进行判断&#xff0c;在满足给定条件后…

如果采用密钥对的形式登录系统后,如何由普通用户切换到root用户

使用xshell工具 采用秘钥的方式进行登录 创建一个新用户并设置密码 切换到新用户之后 su root 想要切换成root用户的时候 输入密码提示 su:Authentication failure su&#xff1a;身份验证失败 使用秘钥之后是不能使用密码再进行登录 我去阿里云查了一下 有一个相同…

stable diffusion 安装xFormers 报错:Couldn‘t install open_clip.

一、No module ‘xformers’. Proceeding without it. 这是因为没有安装xformers导致的。 解决办法&#xff1a; 在webui-user.bat文件这添加一行&#xff1a; set COMMANDLINE_ARGS--xformers如下图所示&#xff1a; 试着点击webui-user.bat&#xff0c;看能否下载&#xff…

17:00面试,17:04就出来了 ,问的实在是太...

从外包出来&#xff0c;没想到算法死在另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内推…

你具备抽离与封装的思想吗?

笔者最近思考了自己参与的分布式系统业务的架构小细节&#xff0c;虽然笔者每天做的是实现部分需求与业务&#xff0c;但是笔者还是拥有很多时间去读底层源码的&#xff0c;加之笔者自身的思考与实践demo的总结&#xff0c;笔者将在本篇文章中提出笔者自己对“抽离”与“封装”…

Nginx编译安装及配置文件详解

写在前面 Centos版本&#xff1a;Centos 7.6 - 64bit Nginx版本&#xff1a;1.20.2 一、什么是Nginx Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。 二、Nginx用在哪些地方 2.1 静态资源服务 动静…

mkv视频文件怎么转成mp4,这3个方法很好用

对于那些电脑不是很精通的小伙伴来说&#xff0c; mkv视频文件怎么转成mp4&#xff1f;小编先来介绍一下mkv视频格式&#xff0c;mkv是一种开放标准的自由的容器和文件格式&#xff0c;是一种多媒体封装格式&#xff0c;能够在一个文件中容纳无限数量的视频、音频、图片或字幕轨…

MVCC底层原理

目录说明MVCC的底层原理隐藏字段undo logRead View说明 在被面试官问面试题的时候&#xff0c;首先它问了Mysql的事务的隔离级别有几种&#xff1f;默认是哪种&#xff1f;他们分别解决了什么问题&#xff1f; 我在一顿回答“巴巴巴巴。。。。”之后&#xff0c;它又继续问题…

追踪项目进展常用的衡量方法

作为项目管理活动&#xff0c;项目中的进度跟踪可以帮助你了解项目实时的完成状态。有了正确的方法、项目管理工具和指标&#xff0c;项目跟踪可以指导你的团队的行动&#xff0c;甚至在问题出现之前向你发出预警。 项目经理使用各种方法、工具和指标来跟踪进度。其中最常见的…

自然语言处理(Natural Language Processing,NLP)简要

自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;简要一、发展状况二、发展优势三、发展瓶颈四、具体研究方向五、自然语言处理工具六、未来发展方向自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是计算机…

(原创)Flutter基础入门:各种常用容器类组件

前言 上篇博客主要讲了Flutter的Shape实现 Flutter基础入门&#xff1a;实现各种Shape效果 今天主要讲下Flutter中常用的一些容器组件 Flutter中组件数量很多&#xff0c;分类方式也各有不同 比如可以分为有态组价和无态组件 又可以分为容器组件、功能组件等 拿功能组件来说 有…

docker网络详解,自定义docker网络

文章目录一、初识docker网络1、docker0虚拟网桥2、docker网络常用基本命令3、docker网络可以解决的问题二、docker网络模式1、四种网络模式2、容器实例内默认网络IP生产规则3、bridge模式4、host模式5、none模式6、container模式五、自定义网络模式1、过时的docker link2、使用…

【英语】大学英语CET考试,词汇语法导学方法论笔记(50h+)

文章目录1、谭剑波-词汇直播课1-2&#xff08;词汇学习3个关键&#xff09;1.1 看不懂句子的原因&#xff08;词汇的重要性&#xff09;1.2 记不住单词的原因&#xff08;死记硬背70%&#xff09;1.3 理解单词的本质&#xff08;词根词缀&#xff0c;26字母&#xff0c;联想辅助…

D3D11和D3D12共享资源

最近碰到个伪需求: 游戏串流。 游戏引擎用D3D12渲染&#xff0c; 再把游戏画面做视频编码&#xff0c; 通过网络发送到远端做解码显示。 第一反应就是走全GPU的流程&#xff0c; 不要用CPU把显存里的数据拷来拷去。 所以先获取渲染完的D3D12的frame buffer&#xff0c; 然后送给…

进程管理 - 银行家算法

文章目录1 概述2 银行家算法2.1 原理2.2 例题1 概述 #mermaid-svg-7QKAqjQpckpStO9Q {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7QKAqjQpckpStO9Q .error-icon{fill:#552222;}#mermaid-svg-7QKAqjQpckpStO9Q .e…

android framework-PackageManagerService(PKMS)包管理服务

一、概述 Android系统启动过程中&#xff0c;会启动一个包管理服务PackageManagerService(PKMS)&#xff0c;这个服务主要负责扫描系统中指定目录&#xff0c;找出里面以apk结尾的文件&#xff0c;通过对这些文件进行解析&#xff0c;得到应用程序的所有信息并完成应用程序的安…

算法学习day59

算法学习day591.力扣503.下一个更大元素II1.1 题目描述1.2 分析1.3代码2.力扣42. 接雨水2.1 题目描述2.2 分析2.3 代码3.参考资料1.力扣503.下一个更大元素II 1.1 题目描述 题目描述&#xff1a; 给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&a…

【大数据Hadoop】HDFS3.3.1-Namenode-租约管理

租约管理前言LeaseManager.LeaseLeaseManager添加租约 - addLease租约检查 - FsNamesystem.checkLease租约更新 - renewLease删除租约 - removeLease租约检查 - Monitor 线程租约恢复 - Monitor 线程发起租约恢复 - 其他方式发起前言 我们知道 HDFS 文件是 write-once-read-man…

CloudCompare插件开发之点云如何创建、保存并显示?

文章目录0.引言1.创建插件工程2.代码编写3.显示点云4.保存点云0.引言 CloudCompaer是一款优秀的开源软件&#xff0c;在点云处理时可以根据实际要求开发合适的插件&#xff0c;在实际使用中&#xff0c;创建点云、保存点云、显示点云的操作较为基础&#xff0c;为了使这些操作得…

施工组织设计合集

34-6 施工组织设计02017-年亲曼旗大镇市政道路及广场公园园林绿化工程(第一.A1-1五中教学楼施工组织设计A2施工组织设计(方案) 报审表hasuploaded-中建施|组织设计 (22P)安徽大包庄125万吨疏铁矿斜坡道施工组织设计 (修改)宝山万科四季花城施T组织设计 (126P)对税信息培训中心装…