2026年11月08日 欢迎访问 读到
首页 / 小说书库 / AI辅助编程实战 / 正文
点评
第8章 编写代码

本章将结合AI工具深入探索一系列高效的编程技巧:从编程的基本要素开始——深入挖掘函数和类的潜力;接着着手进行代码重构,将那些杂乱无章的代码片段转换为流畅、高效的代码结构。本章还将展示数据的处理与创建方法,末尾将介绍一系列AI工具,这些工具能够在开发者轻松单击之后,自动生成令人印象深刻的前端界面。

AI辅助编程工具的确令人赞叹,它们为编程带来了前所未有的便利。但我们也应该实事求是,它们不是万能钥匙,并不能解决所有的编程难题。这些工具在某种程度上类似于那些仅依赖公开笔记来学习的开发者。它们通过互联网上的代码进行训练,而这些代码的质量参差不齐,并非所有都是实践的典范。因此,由这些工具生成的代码有时可能过于冗长,难以维护。在某些情况下,它们生成的代码可能存在错误,无法满足具体需求。更令人担忧的是,这些代码可能无意中为黑客提供了可乘之机,消耗了宝贵的网络资源。

以下示例揭示了ChatGPT生成的一段不怎么完美的代码。如图8-1所示,这段代码旨在展示如何将两个已排序的列表合并为一个新的列表。这段代码确实正确地合并了两个列表,但它采用了一种烦琐的方法:分别处理空列表的情况,然后使用两个额外的while循环来追加每个列表中剩余的元素。

这正是你的编程智慧真正发挥作用的地方。你必须了解基础知识,并且需要知道在事情不太对劲时应该问什么问题以及对哪里进行探究。

图8-2展示了一种更好的对已排序列表进行合并的方法。

▲图8-1 当被要求合并两个已排序的列表时,ChatGPT创建了一些混乱的代码

▲图8-2 在开发者的帮助下,AI实现了一种对已排序列表进行合并的更好方法

因此,当你听到那些关于机器人将取代开发者工作的悲观预言时,大可不必感到忧虑。的确,AI模型正在不断地进化和学习,但它们远未达到能够完全掌握编程艺术的程度,也绝不可能成为技术的终结者。开发者仍然是软件开发领域不可或缺的主角。

AI辅助编程工具的效用不容小觑,但它们的作用是辅助而非替代。它们无法取代软件工程师所具备的深厚智慧和精湛技艺。

在与AI辅助编程系统合作时,请时刻记住一点:开发者与AI辅助编程系统之间是伙伴关系,而非进行权力的交接。保持你的敏锐洞察力和无尽好奇心,审慎地审视AI辅助编程工具所提供的每一个建议。它们是我们的助手和合作伙伴,但绝非我们依赖的英雄。

在某些情况下,亲自动手编程可能比依赖AI辅助编程工具更为直接和简单。毕竟想让AI准确理解需求,可能需要进行多次尝试和调整。然而,随着对AI辅助编程工具使用的深入,你将逐渐学会判断何时该利用它们的帮助,何时更适合独立完成任务。

以MY.GAMES的首席软件工程师Dmitrii Ivashchenko的亲身体验为例。MY.GAMES是一家总部设立在阿姆斯特丹的游戏公司,其游戏产品在全球的注册用户数量超过10亿。Dmitrii分享了他的见解:

例如,使用提示“用Python编写一个方法,为日期时间对象添加默认时区”。但是,你需要做好心理准备:很多细节可能会被忽略。你可能需要自己处理极端情况,或者与ChatGPT进行较为漫长的沟通,以纠正其错误。在做决策时,一个关键点是初步评估——比较解释一项任务给AI所需的时间与亲自实现它所需的时间。

利用ChatGPT等工具学习新的编程语言、框架或库,可以极大地提升学习效率。相较于传统的学习方式,如参加培训课程、不断在线搜索或观看大量网络视频,ChatGPT提供的个性化和即时反馈可能更为高效。

可以通过ChatGPT快速掌握代码的基础知识和语法要点。如果倾向于通过实践来学习,可以请求ChatGPT提供代码示例,直观地展示如何综合应用概念。如果已经熟悉某种编程语言,ChatGPT则能通过比较学习法,帮助你更快掌握新的编程语言。例如,如果你精通Python并希望学习JavaScript,ChatGPT将使用Python中的术语来解释两者的主要差异。如果你需要更多的资源,ChatGPT则会在互联网上搜索并向你推荐一些值得信赖的学习材料。

下面是一些实用的提示范例。

提示:对于Python初学者,应该首先学习哪些内容?

提示:哪些适合初学者的项目可以帮助我提高React技能?

提示:推荐一些学习高级SQL查询的资源。

提示:如何用Python和JavaScript分别实现一个简单的“待办事项列表”应用程序,以突出这两种编程语言之间的差异?

提示:我熟悉如何在C++中使用循环。你能通过比较来告诉我循环在Python中是如何工作的吗?

提示:查找5个有助于学习Rust的网络视频。

让我们来看看Ivashchenko是如何利用ChatGPT来加速学习的。Ivashchenko分享了自己的心得:

要想迅速掌握一种新的编程语言或框架,可以直接用ChatGPT创建一个新项目。比如学习Django,可以选择一个Django项目,如构建一个在线商店。首先询问ChatGPT如何用Django开发新项目,它会指导你需要安装哪些依赖项,如何设置项目配置,以及需要掌握哪些技术。然后,逐步深入地提一些更具体的问题,如“如何在Django中组织模型?”“如何在管理面板中添加新部分?”以及“如何进行数据库迁移?”。通过这种方式,我仅用一个周末就高效地掌握了Django。

你还可以让ChatGPT创建有用的学习指南。如下是提示范例。

提示:为初学者创建JavaScript学习指南。

然后用以下提示跟进。

提示:请为我制定一份学习计划表。我应该学习哪些主题?有哪些练习或测验?遇到编程问题如何处理?有哪些资源链接?

ChatGPT甚至可以帮助你记住新概念(使用缩略语等记忆工具)。例如,假设你想记住DevOps的关键要素,其中包括持续集成、持续交付、微服务和基础设施即代码。以下是ChatGPT的建议。

ChatGPT:CI-CD-MI(发音为“Ci-Ci-D-Mi”)。

最后,ChatGPT还能在你准备LeetCode面试题时提供帮助。想象一下,在面试中,你可能需要在白板上或笔记本电脑上解决一个算法或数据结构问题。这不仅考查你编写代码的能力,更是对你思维速度、解释想法的能力和解决问题风格的综合考量。如下是提示范例。

提示:建议3道常见的LeetCode面试题。

ChatGPT随后可能会提出一些挑战性问题,如“两数之和”“无重复字符的最长子串”“有效的括号”。你可以进一步深入研究,获取更长的解释或示例。

在紧张的项目截止日期的压力下,开发者有时会忽略编写代码注释,甚至完全不加注释。然而,AI辅助编程工具可以轻松解决这一问题。这些工具能够提供已经包含注释的代码建议,帮助提升代码的可读性和可维护性。

随着AI技术的不断进步,依赖传统的注释方式可能显得有些落伍。面对难以理解的代码段,直接利用工具进行解析和注释,无疑是一种高效的解决方案。

更有趣的是,撰写提示正在演变成一种新的注释形式。许多工具已经开始在注释中嵌入有用的提示,以指导开发者更好地理解和使用代码。

如果想给某些代码添加注释,可以使用如下这个简单的提示。

提示:根据最佳编程实践添加清晰的注释。

是否编写注释并没有一成不变的规则,这取决于开发者和团队的具体要求及偏好。但可以肯定的是,利用AI辅助编程工具在代码中添加注释是一项可以轻松完成的任务。

模块化编程是高效软件开发的基石。通过模块化编程,代码将变得更加有序、易于理解,并且能够灵活适应变化。这种编程方式还能简化团队协作,每位成员都能在自己的模块内工作,而相互不干扰。此外,模块的可复用性不仅让开发者节省了大量时间,还有助于保持代码的一致性,降低出错的概率。

模块化编程的优势同样适用于AI辅助编程的实践。Private Market Labs的联合创始人兼首席产品官Titus Capilnean分享了自己的体会:

自从采用AI工具,我能够专注于问题本身及其解决方案,而不必深陷于编写代码的细节。面对技术难题,我会先将它分解成更小的部分,并确保每一部分的输入和输出都清晰明确。进行这种分解的原因是,我使用的AI工具的上下文窗口有限,无法一次性提供一个完整的解决方案。我发现,如果只要求模型提供支持简单输入、单一功能、可验证输出的代码片段,调试和构建过程将变得更加顺畅。如果我对中间结果不满意,我会向ChatGPT描述我的问题,并尝试运行它所提供的更新代码。一旦我对解决方案感到满意,我就会添加额外的处理步骤,比如在现有函数中增加逻辑,或者进一步细化前一步的输出,以使其更接近最终目标。

AI工具还极大提升了我的工作效率。在将代码发送给编译器、部署到云函数或检查错误和资源消耗之前,我可以利用这些工具检查代码片段的正确性:只需要将代码粘贴到ChatGPT窗口中,并询问它们是否正确即可。前提是我已经初始化了运行代码的环境或提供了正确的上下文信息,如必要的导入语句、变量、常量和自定义函数等。这样我便能够生成更高效、更优化的解决方案。

在编程项目的初期,开发者常常会面临所谓的“冷启动问题”或“空白页难题”。想象一下,你眼前是一片空白的屏幕,没有代码,也没有数据,更没有明确的行动方向。这种情况听起来足以令人感到迷茫。启动项目时,面临的首要难题便是确定项目的架构、设计模式和技术栈。这些决策至关重要,因为你将与它们长期相伴,从项目伊始就应该做出明智的选择。

同时,我们也不能忽视人的因素。要确保整个团队达成共识、找到高效的沟通方式、零基础建立起工作流程——这些沟通上的挑战与技术难题一样考验人。这不仅仅是编写第一行代码那么简单,而是要为项目未来的成功打下坚实的基础。启动一个项目需要精心的规划、扎实的技术知识和团队间的默契合作。

AI辅助编程工具在这一过程中可以发挥巨大的作用。它们能够帮助你快速搭建应用程序的基础框架,并根据你的愿景提供一个定制化的起点。这些工具能够让你绕过烦琐的初始设置阶段,直接进入项目中更富有创造性的部分。

你只需要提出具体的任务需求,然后让LLM为你生成模板或初始代码即可。例如以下提示。

提示:为Web应用程序生成启动代码,该应用程序旨在将用户的社交媒体信息从多个平台聚合到一个单一的仪表板界面上。对于编程语言和框架的选择,你有何建议?通用的文件结构又应该是怎样的?

根据以上提示,ChatGPT首先建议使用React来创建流畅的单页面应用程序。它还建议使用Redux来维护强样式且可重复使用的组件。对于后端,它建议使用Node.js运行应用程序,并利用Express.js构建API端点。对于用户认证,它推荐使用Passport.js。而对于数据库和模型的构建,它推荐使用MongoDB和Mongoose。至于通用文件结构,可以参考图8-3。

图8-3 ChatGPT建议的Web应用程序的通用文件结构

当你深入代码区,为不同的时间单位逐一设定常量时,像Copilot这样的工具便有了用武之地。Copilot能够提供智能的自动填充功能,简化你的编程工作。

以创建响应式应用程序为例,你需要为CSS-in-JS风格(在JavaScript中编写CSS)的组件库设置断点常量。这通常意味着重复编写多行相似的代码。你可以这样开始。

breakpoints={

    'xs':'320px',#极小屏幕设备

接下来在内联聊天中使用以下提示来请求Copilot的协助。

提示:为其他屏幕尺寸创建常量。

结果如图8-4所示。Copilot提供了具有类似样式的其他屏幕尺寸和常量。

图8-4 Copilot为不同屏幕尺寸推荐了不同的常量

最后,Copilot可以通过查看项目中打开的文件来帮助进行自动填充。

Capilnean分享了自己的体会:

我发现,当代码的某些部分与数据结构相似时,Copilot会特别管用。如果你已经在另一个文件中定义了一个对象,而该文件又是你正在使用的代码库的一部分,那么,当你试图定义另一个类似的对象时,Copilot就能在你输入时可靠地预先填充代码。例如,Sendgrid电子邮件等常用API调用的对象在这里就很好用。

不过,一不小心,自动填充功能就会出现问题。例如,在导入时,它并不总是能正确地找到文件夹结构,尤其在你设计了自己的代码形状,或者你使用的框架相当新且还没有完善文档的情况下。在这种情况下,必须手动检查组件的来源,以及Copilot建议的目录是否正确。

在软件开发中,重构就如同对代码进行一次大扫除。重构的核心目的不在于增添新功能或修补缺陷,而在于梳理、调整甚至美化现有代码。

通过重构,我们能够维持代码库的简洁与健康,减少混乱,提升直观性。这意味着,当你或其他开发者在未来回顾代码时,将更容易理解代码的逻辑,减少因代码复杂性带来的困扰和沮丧。而且整洁的代码往往更加高效,错误率更低,这使得重构成为一项对所有参与者都有利的活动。

重构是AI辅助编程工具展现其强大功能的重要领域之一。借助简单的提示,这些工具能够深入解析代码的复杂性,去除冗余,提炼出既实用又优雅的代码结构。在AI的辅助下,重构代码变得不再烦琐,而是成为一种保持技术领先的秘密武器。

接下来展示一些具体的重构示例。

将忍者代码比作动作电影中的特技场面颇为恰当。它们华丽而复杂,令人不禁惊叹:“这究竟是怎么做到的?”然而,等到最初的敬畏感消退后,理解它们背后的逻辑就会变得异常困难。想象一下,代码如此晦涩难懂、错综复杂,以致连编写它们的开发者在“忍者”阶段过后也难以厘清头绪。虽然完成“忍者”动作的那一刻确实令人震撼,但是,当你或其他开发者需要回头修改代码时,那种兴奋感就会迅速转变为沮丧。

实际上,忍者代码可能展示了一些卓越的编程技巧,但它们往往与良好的编程实践相悖。良好的编程实践应该是保持代码整洁、简洁且易于理解。

幸运的是,忍者代码虽然普遍存在,但AI辅助编程工具可以帮助我们对其进行重构。下面是一个示例。

console.log((function(n, a = 0, b = 1) { while (--n) [a, b] = [b, a + b]; 

return a; })(10));

以上代码的目的可能需要花大量时间才能弄清楚。所以,为什么不让ChatGPT来完成这项工作呢?

提示:请逐步解释这段代码的工作原理。另外,你能否以一种更简单、更易于维护的方式重构这段代码?

ChatGPT确认这是一个计算第n个斐波那契数的函数。它以6个步骤详细描述了整个过程,然后提供了一个简化的版本,如图8-5所示。

图8-5 ChatGPT提供的简化版本

ChatGPT:在简化版本中,calculateFibonacci函数清晰地展示了斐波那契数列的迭代过程。虽然这个版本可能稍显冗长,但它更易于理解和维护,特别是对未来可能阅读这段代码的其他开发者来说。

面对一个冗长的函数或方法,提炼函数是一种常用的重构技巧。这项技术涉及从现有代码中识别出一段执行特定任务的代码,如进行数据验证或特定计算,然后将这段代码抽取出来,形成一个新的函数或方法。

提炼函数的作用远不止于美化代码,它还增强了代码的可读性和可理解性,使得代码更易于维护。当你需要再次执行相同的任务时,便可以简单地调用这个新的函数或方法,而无须重复编写相同的代码。此外,如果出现问题,已经被分解成小块的代码相对更容易定位和修复缺陷。提炼函数不仅简化了开发过程,还有助于保持代码整洁和有序。

以下是提炼函数的一些提示范例。

提示:在函数式编程语言中使用提炼函数时,有哪些常见的陷阱应当避免?

提示:我附上了一些C#代码。请问哪些部分适合使用提炼函数进行重构?

提示:请比较原始函数和使用提炼函数后的重构版本,哪个效率更高?

分解条件表达式是一种将庞大、错综复杂的if-then-else语句拆解成易于理解的小段代码的技巧。

设想一个if语句,其中包含一个需要检查多个变量或调用其他函数的复杂条件。与其每次都去解读这个复杂的条件,不如将其提炼到一个具有描述性名称的方法中,从而清晰地表达条件检查的目的。例如,可以将if (user.isActive() && user.hasSubscription() && !user.isBlocked())这样的条件重构为一个名为canUserAccessContent的方法。这样的重构不仅使主方法更加简洁,而且使代码的意图一目了然。

类似地,将if语句中的then和else代码块也分别提炼到不同的方法中,可以让程序的主流程更加清晰易读。读者不必深陷于一行行代码的具体逻辑,而应该从更高层次上把握程序的走向:如果条件成立,则执行一系列操作,否则,执行另一系列操作。程序逻辑的每个部分都被封装在具有清晰名称的方法中,这不仅便于单独测试,也便于修改。

以下是两个提示范例。

提示:如何分解Java代码中的条件表达式,从而提升其可读性?

提示:如何使用分解条件表达式技术分解复杂的if-then-else语句?

虽然重命名函数、变量和类看似小事一桩,但是对提升代码的可读性和可维护性至关重要。随着代码的不断演进,原有的名称可能不再能够精确反映函数、变量和类的功能,这时对它们进行重命名显得尤为重要。例如,一个最初被命名为processData的方法,如果其功能逐渐变得更加单一,那么给它起一个更具描述性的名称(如filterInvalidEntries),将能够立即让人理解其实际作用。

以下是一些提示范例。

提示:在我的SQL脚本中,用于存储数据库中用户总数的变量应该怎么命名?

提示:下面是我的JavaScript代码片段。请检查变量名和方法名,并提出改进建议。

提示:我对我的Java类中的命名不太确定是否足够直观。你能否建议更好的名称,使其更加清晰易懂?

在使用Copilot这样的AI工具时,需要格外小心,因为不当的重命名可能导致现有代码中使用旧名称的部分出现问题。

顾名思义,无用代码并不提供任何功能,它们是那些被遗忘的代码。由于功能的废弃或更新,程序的某些部分变得不再必要,最终成为无用代码。

清除项目中的无用代码不仅能让项目变得更加整洁、易于管理,还能减少项目新成员的困惑。当某些代码看起来没有明显作用时,清除它们可以避免无谓的猜测。

以下是一些有助于识别和处理无用代码的提示范例。

提示:你能帮我识别JavaScript代码片段中潜在的无用代码吗?

提示:这是某Python项目中的一段代码。请指出其中未被使用或看起来多余的代码。

提示:请检查以下SQL存储过程,确认是否有代码可以安全移除。

然而,使用AI辅助编程工具来删除无用代码可能伴随着风险。有时,看似被遗忘的代码实际上可能对处理罕见情况至关重要。此外,移除程序的某个部分可能会引发连锁反应,干扰依赖于这部分的其他代码,特别是在涉及复杂逻辑或配置的情况下。因此,务必谨慎行事。

另外,生成式AI可能未能完全理解代码之间的依赖关系。在AI辅助编程工具变得更加成熟之前,应避免使用它们来彻底清除无用代码。

在处理无用代码时,使用专门的工具可能是更好的选择。linter工具就是其中的代表,此类工具是“代码的清洁工”。例如,JavaScript开发者可以使用ESLint,Python开发者可以使用Pylint,而Ruby开发者可以选择RuboCop。这些工具能够高效地识别出恼人的语法错误、潜在的bug,以及那些悄悄存在却无所作为的代码。

此外,还有一类更全面的检查工具——静态代码分析工具,市场上的顶级供应商包括SonarQube、Code Climate和Coverity。这些工具就像侦探一样,不需要运行代码就能通过深入挖掘,发现复杂的、未来可能成为问题的模式,包括无用代码。

函数是编程中的面包和黄油,无论使用哪种编程语言,它们在所有类型的计算机程序中都发挥着巨大作用。函数是大段的代码,也是代码复用的利器,它们让开发者能够轻松重用代码段,有助于保持程序的整洁和可读性。此外,函数能够将复杂任务分解为更小、更易于管理的部分。这使得开发者在处理复杂软件时,尤其是在修复错误、进行更新或理解代码逻辑时,能够更加得心应手。

编写函数的关键在于从设计之初就明确函数的功能。确保函数正常运作是基础,但同样重要的是,它们还要能够与周边代码无缝协作。要使函数清晰、易用且高效,应考虑以下要素:如何调用函数以发挥其功能,如何定义函数,如何处理输入输出数据,以及如何应对异常情况。

以下是一些有助于高效使用函数的指导原则。

单一职责原则

单一职责原则有利于我们更简单地理解函数的作用,检查函数是否工作正常,并在函数工作不正常时对其进行修复。

命名清晰

为函数选择一个能够准确描述其功能的名称,比如,当一个函数的功能是计算总价时,可以将其命名为calculateTotalPrice,以增强代码的可读性。

简短精悍

理想的函数应当简短到不需要滚动屏幕即可一览无余。简短精悍的函数更易于管理和维护。

参数很关键

通过参数接收输入,并通过返回值提供输出,确保函数的可预测性和独立性。

保持一致

遵循编程语言或项目中的代码规范和风格指南,以维护代码的一致性,便于他人阅读。

基于以上指导原则,我们可以为函数设计一些高效的提示,以请求ChatGPT提供帮助。以下是一些提示范例。

提示:编写一个名为calculate_area的Python函数,它接收长度和宽度两个整型参数,并返回矩形的面积。请包含docstring来解释这个函数的目的,并确保该函数能通过引发TypeError来处理非整数输入。

提示:编写一个名为filterAndTransform的JavaScript函数。它的输入为对象数组,其中的每个对象包含姓名(字符串)和年龄(数字)属性。该函数应返回一个新的数组,其中包含18岁及以上年龄人士的大写姓名。请在代码中包含注释,对代码逻辑进行解释。

提示:编写一个名为efficientSort的C++函数,用于对整数数组进行升序排列。该函数应针对时间复杂性进行优化。请在该函数中提供注释,解释所选的排序算法及其时间复杂度。

提示:编写一个名为safeDivide的Java函数,它接收两个double类型的参数——分别代表分子和分母,返回它们的商。该函数应处理分母为零的情况,并返回自定义的错误提示信息。请在Javadoc注释中解释该函数及其错误处理机制。

面向对象编程是一种以“对象”为概念来设计和构建计算机程序的方法。可以将面向对象编程想象为创造一系列独立的容器,其中每个容器都装有特定的工具和信息。这些容器在面向对象编程中被称为“类”,它们就像用来塑造不同对象的蓝图。类定义了对象的结构和行为。基于类,我们可以创建具有独特属性但遵循相同基本架构的独立对象。

探索面向对象编程的世界,就像进入一个由抽象、继承、封装和多态等复杂概念构成的迷宫。这些概念初看可能像是用外星语言写的,令人费解。

此时,ChatGPT的“翻译”功能可以大显身手。它能够将这些复杂的概念分解成易于理解的小块。如果你对封装的真正含义感到困惑,只需要进行简单的提问,就能得到一个清晰易懂的解释,而不是通篇的技术术语。

以下是一些有助于你理解面向对象编程概念的提示范例。

提示:能否用<你的首选编程语言>创建一个简单的类来演示封装的概念?

提示:在编程中,封装有哪些实际应用案例?

提示:用日常生活中的类比来解释面向对象编程中的抽象。

提示:你能举例说明编程中的继承是如何工作的吗?

提示:在面向对象编程中,继承如何促进代码重用?

提示:多态如何增强程序的灵活性?

提示:多态在哪些场景下特别有用?请举例说明。

AI辅助编程工具还能帮助开发者设计类的初始结构。以下是一些设计类的提示范例。

提示:设计一个包含员工姓名(employeeName)、员工ID(employeeID)和部门等属性的Employee类。请实现一个方法来显示员工的详细信息,并包含一个构造函数来初始化这些属性。

提示:请用Java设计一个名为BankAccount的类,其中应包含余额和账户等私有属性。请为存款、取款和查询余额添加相应的方法,并确保它们能够安全地修改或访问这些属性。

提示:请用C#创建一个名为Vehicle的类,然后创建一个继承了Vehicle类的Truck类。确保其中包含车轮和燃料类型等属性,并展示不同访问修饰符的用法。

提示:在C++中编写一个FileHandler类,在构造函数中打开文件,并在析构函数中关闭文件。此外,请包含写入文件和从文件中读取的方法。

在软件开发的世界中,如果没有框架和库,就好比在没有食谱或配料的情况下从头开始制作蛋糕。这样做不仅难度极高,而且耗时漫长。框架和库是让开发者工作更加轻松的法宝。无论是进行网络请求还是操作DOM元素,都可以直接利用现有的工具,而无须重复造轮子。

在探索软件框架和库的过程中,AI辅助编程工具无疑可以提供巨大的帮助。它们不仅可以帮助我们快速掌握基本功能和工作流程,还能指导我们在特定情况下选择最合适的框架或库。

然而,在接受这些工具的帮助时,我们应保持谨慎。Capilnean分享了自己的体会:

鉴于React以及其他框架和库更新频繁,以及我们使用的是特定版本的框架,我必须向我的ChatGPT实例提供最新的系统提示,以优化ChatGPT生成的结果。有时,ChatGPT提供的解决方案可能更偏向于学术性而非生产实践,因此我更倾向于与经验丰富的开发者合作解决更复杂的问题。对于React,我更多的是让ChatGPT检查语法错误和处理特定数据类型的方法,而不是让它构建完整的功能。

Node.js的情况也类似。在向ChatGPT请求某个功能的代码片段之前,我必须考虑其内部API和数据处理方式。如果我能够清晰地描述一个函数的输出,并将其作为正在构建的功能的输入,ChatGPT就很可能提供稳定的代码。如果输出结果不理想或存在错误,我也会采用相同的方法,向ChatGPT说明问题所在,并指导它更新代码,朝着正确的方向前进。

数据是每个应用程序的核心命脉。数据赋予应用程序生命力,正如血液中的氧气和养分可以维持我们身体的功能一样,数据在应用程序中流动,提供其所需的信息和洞察力,使其发挥效用。

然而,创建样本数据可能是一项棘手的任务。想象一下,当你渴望测试新的应用程序时,你需要大量数据来模拟现实世界的运行情况。你开始手动输入一行行的数据——姓名、日期、数字,无一例外。然后,你一遍又一遍地输入测试数据。

但你必须谨慎行事,以确保测试数据既足够真实以反映有效性,又不至于过于烦琐,避免每个条目都复杂得像一本小说。如果你需要一个庞大的数据集,怎么办?这基本上等同于参与一场复制、粘贴、调整并重复检查的马拉松。

AI辅助编程工具可以巧妙地解决这个问题。首先,你需要选择一种数据库并创建数据库模式和表。然后向这些工具描述表之间的关系。一旦配置和设置完成,AI辅助编程工具就可以提供帮助了。

以下是一些获取数据库评估的提示范例。

提示:哪种类型的数据库最适合处理<特定数据类型或功能,如用户交互、产品库存等>?

提示:对于预期<高/低>流量且具有<数据类型,如图像、文本、实时数据>的应用程序,我应该考虑哪种数据库?

提示:我的预算有限。你能否为小型<应用程序类型,如本地快递服务应用程序>推荐一种经济的数据库解决方案?

提示:我对数据库管理不太熟悉。对于初学者,哪些数据库既用户友好又易于维护?

以下是一些获取数据库模式的提示范例。

提示:请为<应用程序类型(如在线商店、博客)>设计一个基本的数据库模式。我需要知道应该创建哪些表以及它们之间的主要关系。

提示:在关系型数据库中管理<特定类型数据(如客户订单、库存)>的有效表格结构是什么?应该包含哪些字段和数据类型?

提示:在<描述应用程序功能,如活动管理、课程注册>应用程序的关系型数据库中,我应该如何定义表之间的关系?具体来说,在理解外键和连接表方面我需要帮助。

提示:我正在为<描述项目>设计一个关系型数据库模式。请指导我如何有效设置主键和外键,以确保数据完整性。

提示:我在<项目类型,如社交媒体应用程序>中使用了NoSQL数据库。我应该如何设计文档结构来存储<特定数据类型,如用户配置文件、帖子、评论>?

提示:在设计数据库模式时,应该考虑哪些索引策略来优化查询性能,尤其是<查询或操作类型,如全文搜索、频繁更新>?

提示:我需要将现有数据库迁移到新的数据库模式。在不破坏数据完整性的情况下,重新设计数据库结构的主要考虑因素和步骤是什么?

以下是一些设置初始数据库环境的提示范例。

提示:请提供在<特定操作系统,如Windows、Linux>中安装<特定数据库服务器,如MySQL、PostgreSQL>的分步说明。

提示:安装<数据库名称>后,为获得最佳性能,应该设置哪些基本配置?

提示:保障<特定数据库>服务器安全的最佳做法是什么?我对用户身份验证和保护敏感数据特别感兴趣。

提示:如何优化<特定数据库>的性能,使其适用于处理<描述数据性质和预期负载,如大型数据集、高交易量>的应用程序?

下面使用AI创建样本数据。以下是一些提示范例。

提示:创建包含100个带有ID和电子邮件地址的演示数据,并将它们保存到CSV文件中。

提示:创建包含50款产品的演示数据,每款产品应包含产品ID、名称、价格和类别。

提示:创建包含150条订单记录的演示数据集,每条记录中应包含订单ID、客户ID、订单日期和总金额。

提示:生成100名员工的样本数据,每名员工应包含员工ID、全名、部门和电子邮件地址。

提示:生成80个客户反馈条目的样本数据,每个客户反馈条目应包含反馈ID、客户ID和评论。

有了样本数据,就可以创建SQL语句了。你可以使用下面的提示来处理客户反馈条目。

提示:生成SQL插入语句,将数据填充到反馈表中。

如果你是一名开发者,就会知道在XML、SQL、JSON、CSV和TOML等不同格式之间转换数据是很常见的事情。老实说,这是一个乏味的过程,有时还容易出错。当涉及数据转换的琐碎任务时,ChatGPT可以说是开发者的救星,这也是ChatGPT的用武之地。

以下是一些针对数据转换的提示范例。

提示:这是CSV文件中的一行数据——“无名氏, 35岁, 纽约”。你能把它转换成XML格式吗?

提示:我有一个这样的JSON数组——[{'姓名':'Alice','职位':'工程师'},{'姓名':'Bob', '职位':'设计师'}]。我如何用SQL表格来表示这个数组?

提示:我需要将TOML配置“title="My Project" owner ="Sara"”转换为等效的YAML格式,如何转换?

前端开发是打造美观网站与流畅体验的艺术。它的核心在于使用HTML构建网页的基础架构,使用CSS美化网页的外观与布局,以及使用JavaScript实现动态交互。现代前端开发者通常会借助React、Vue等框架,这些框架提供了可复用的组件和实时数据更新等特性,使得构建充满活力和吸引力的网站与Web应用程序成为可能。

即便对于资深开发者,前端开发依旧充满挑战。其中首要的难题是浏览器兼容性和用户交互的不确定性。开发者需要适应多样的浏览器、设备、屏幕尺寸和用户偏好,这就像设计一件能够适合每个人的T恤一样复杂。另外,前端技术日新月异,框架更新迭代快速。

前端开发的另一大特点是,它不仅关乎代码编写,更与卓越的用户体验(User eXperience,UX)和用户界面(User Interface,UI)设计联系紧密。UX和UI设计关注人们如何与技术互动,如何让设计在视觉上吸引眼球,以及如何在Web应用程序或网站中打造流畅的逻辑流程。这要求前端开发者不仅要有算法和数据结构的才华,还要兼具艺术家的审美和心理学家的洞察力。

不过,AI辅助编程工具的出现,为前端开发者带来了曙光。在接下来的内容中,我们将深入探讨CSS、图形设计以及AI工具如何协助前端开发,提升前端开发者的效率与创造力。

为网站编写CSS无疑是一项充满挑战的任务,特别是那些结构庞大且复杂的网站。确保网站在各种浏览器和设备上都能呈现出一致且吸引人的视觉效果,是一项艰巨的工作。前端开发者需要熟悉各种浏览器特有的细微差别,同时还要小心翼翼地避免在样式层叠中引发冲突,因为这可能会让网站的外观变得混乱不堪。此外,传统的CSS不支持变量和函数,这导致许多样式不得不在代码中反复编写,SASS和LESS等CSS预处理器工具可以有效地解决这一问题。

以下是一些常见CSS任务的提示。

提示:能否提供一个CSS代码片段,以便在移动设备上将导航栏转换为汉堡包菜单?

提示:如果在使用CSS的弹性盒布局(Flexbox Layout)时遇到对齐问题,能否指出可能导致问题的原因?

提示:我需要为网站上的按钮添加悬停效果,能否展示一个CSS示例,使得按钮在悬停时改变颜色?

提示:我想在网站的首页上添加淡入动画效果,能否提供相应的CSS代码片段?

为网站或Web应用程序设计专业级图形通常需要深厚的设计功底以及熟练掌握Photoshop等图像处理工具。然而,当下有众多功能强大的文生图系统,它们能够辅助你创造出卓越的视觉作品。此类系统有Canva、Stable Diffusion、DALL·E 3(ChatGPT内置)、FireFly、Midjourney等。

通过这些系统,你可以创建多种类型的设计资源,包括主图、按钮和徽标等。

以ChatGPT创作徽标为例,提示范例如下。

提示:我正在为家族面包店Sweet Whisk设计网站。我需要一个充满温馨感的徽标。我们主营蛋糕和饼干,我希望将这些元素巧妙地融入设计中。我偏好柔和的色调,特别是浅粉色和薄荷绿。徽标应该简洁且具有现代风格,并透露出一丝俏皮。

ChatGPT创作的徽标如图8-6所示。

你可以继续向ChatGPT提出更详细的要求,以优化和调整设计输出。虽然其他AI工具(如Firefly)可能在设计功能上更为丰富,但ChatGPT依然能够轻松制作出吸引眼球的图像。

图8-6 ChatGPT根据提示创作的徽标

当前市场上存在一些优秀的AI工具,它们能够根据简单的提示或你期望的前端外观图像,快速生成网站。这些工具不仅能处理所有底层代码工作,还能无缝转换至React、Angular和Vue等现代前端框架。更令人印象深刻的是,许多AI工具还支持从Figma等平台导入线框图,以进一步简化开发流程。

一旦代码由AI工具生成,就可以深入代码层进行个性化调整,确保网站达到你心目中的完美状态。AI工具为加速网站构建提供了一条捷径。

可用的AI工具还有TeleportHQ、Anima、Locofy和Vercel v0。

我们重点关注Vercel v0,它的使用方式非常直观。实际上,它的界面设计与ChatGPT相似,易于上手,如图8-7所示。

图8-7 Vercel v0的界面

输入期望的页面类型描述,或上传设计好的图像,系统便能根据指示创建页面。以下示例展示了如何使用提示来引导页面设计。

提示:我需要一个电子商务仪表板,它具备侧边栏导航功能,还具备表格以展示最近的订单。

Vercel v0将带你进入设计工作室,如图8-8所示。

图8-8 输入提示后,Vercel v0便带你进入设计工作室

Vercel v0能够根据需求生成3种不同的仪表板,并且可以利用系统提供的提示功能进行细节调整,比如更改文字的大小、颜色等。

对设计感到满意后,只需要单击界面右上角的Code(代码)按钮,即可获得基于shadcn/ui和Tailwind CSS的简洁React代码清单。

除了Vercel v0以外,还有一些开源AI系统能够将设计图转换为前端代码,例如Screenshot to Code。该系统由Pico的首席执行官兼创始人Abi Raja开发。Raja此前的初创公司在2013年被雅虎收购。

Raja投入了6个月的时间来创建Screenshot to Code的初始代码库。他指出:“前端开发者通常需要将设计图和模型转换为代码,这一过程往往涉及大量重复性工作。但我的软件能够自动化这一转换过程,完成度高达90%。”

目前,Screenshot to Code支持导出到React、Bootstrap和HTML/Tailwind CSS,它在GitHub上获得了超过31000颗星的好评。

ChatGPT同样具备将图像转换为代码的能力。比如,如果你想创建一个外观类似于iPhone自带的计算器的应用程序,则可以向ChatGPT提供图8-9所示的图像。

图8-9 将iPhone计算器的图像输入ChatGPT以生成代码

首先请求ChatGPT识别所提供的图像,ChatGPT具备正确识别图像的能力。然后使用以下提示生成代码。

提示:根据这幅图像,建议合适的代码实现。

图8-10展示了一个计算器应用程序的界面。ChatGPT根据你提供的图像创建了Python代码,虽然在样式上可能与预期有所偏差,但已经非常接近。如果你希望生成的计算器应用程序在外观上更贴近iPhone计算器的原生设计,则可以在提示中提供更具体的指导,例如指示ChatGPT使用React框架来构建用户界面。

图8-10 ChatGPT根据提供的图像生成代码

掌握新的API往往是一项艰巨的任务。你需要深入研读可能内容繁杂、技术性强的API文档。API文档的质量参差不齐,有的简明易懂,有的却难以理解。此外,获取登录凭证和访问权限也是一项挑战,比如处理API密钥或OAuth令牌。理解API返回的数据结构和响应格式可能会令人感到困惑,更不用说理解API的错误处理,以及还需要持续关注API的更新和变化了。

幸运的是,ChatGPT可以让这些挑战变得更加容易应对。

下面以一个简单的示例来说明:假设你想通过API获取天气信息,你可以输入以下提示来向ChatGPT询问有关天气API的建议。

提示:都有哪些优秀的天气API?

ChatGPT可能会推荐你使用OpenWeather API。随后,你可以继续提问。

提示:如何使用OpenWeather API?

ChatGPT将描述主要的入门步骤。然后,你可以要求ChatGPT展示如何构建请求。

提示:如何使用OpenWeather API构建请求?请演示如何用Python来实现。

ChatGPT将详细介绍以下步骤。

ChatGPT:

·导入requests库。

·定义API密钥。

·使用当前天气数据端点创建API请求URL。

·执行请求并处理响应。

·检查请求是否成功。

本章深入剖析了模块化编程的精髓、函数的构建艺术及面向对象编程的核心概念。我们不仅探讨了这些编程范式如何帮助我们编写更清晰、更易于维护的代码,还讨论了如何借助AI的力量快速掌握新的编程语言和框架。

此外,本章还涵盖了如何利用AI提升数据处理效率,以及如何使用AI工具来设计引人注目的前端界面。

然而,我们必须再次强调,尽管AI辅助编程工具的功能强大,但它们远非完美。在使用这些工具时,保持警惕并仔细检查它们提供的代码和建议。

目录
加书签
详情
加书架
打赏
投票
自动滚动
设置
夜间

评论 0条

加载中...

设置

阅读主题
正文字体
字体大小
18
页面宽度
滚动速度
5
语音朗读
翻页模式
💎

余额不足

您的水晶或能量余额不足,请充值后再试。

立即前往充值

🎫 投月票

1 张月票 = 1.00 水晶。感谢支持!

🎁 打赏作品

打赏将直接扣除水晶余额,鼓励作者创作。