ChatGPT 在编程方面的才能已经得到了许多开发者的认证,Github 更是将这部分才能移植到了其供给的AI辅佐编程工具 Copilot X 中。

而作为一般开发者的咱们,又该怎样将 ChatGPT 的编程才能融合进咱们日常的作业流程中,以更好地提高咱们的开发功率呢?

针对这个问题,推特上有名网友就向咱们分享了一张图——《面向开发人员的10个超有用的 ChatGPT 提示》。

图中列举了10个 ChatGPT 能够运用到的作业场景,并为每个场景编写了一个 Prompt 示例。

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

而本文编撰的目的,便是验证将 ChatGPT 运用到这10个作业场景的可行性

因为笔者从事的是 Android 开发,因而文中的比如大多围绕着 Java/Kotlin 言语翻开,但其底层的逻辑与思路是通用的,因而不必忧虑渠道和言语会成为了解路上的障碍。

Prompt 1: 遵照代码攻略

每家互联网公司内部根本都会制定一些编码标准,但无论是人工检查或仍是编写自动化插件,都是一件极其绵长而无聊的作业,而 ChatGPT 编程才能的第1个运用——遵照代码攻略,就能够帮咱们完结这样一件作业。

原 Prompt 是:

Rewrite the code below following the Google style guidelines for javascript.{enter code}

遵照JavaScript的Google风格攻略,重写一下代码:{输入代码}

这个 Prompt 有几个不好的当地:

  1. 没有供给攻略的参阅来源,无法验证其权威性。
  2. 没有指出不遵照攻略的当地,而是直接重写,无法验证其风险性。
  3. 没有供给攻略的原文描绘,无法验证其精确性。

依据以上几点,咱们将这个 Prompt 重写如下:

请参照以下由>分隔的编码标准,对以下由“`分隔的代码片段进行检查,并依照下列过程完结任务:

1.指出代码片段里不契合编码标准要求的当地

2.供给编码标准里对应的原文描绘

3.供给契合编码标准要求的修改后的代码

>

1.总是运用不可变调集接口(Collection, List, Set, Map)来声明无需改动的调集。运用工厂函数创立调集实例时,尽或许选用回来不可变调集类型的函数:

2.关于由单个表达式构成的函数体,优先运用表达式方式。

3.运用 until 函数在一个开区间上循环

>

“`

val allowedValues = arrayListOf("a", "b", "c")
fun foo(): Int { 
    return 1 
}
for (i in 0..n - 1) { /*……*/ }

“`

ChatGPT的答复如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

能够看到,ChatGPT 参照标准为咱们精确地指正了错误、供给了原文以及修复了代码,本场景验证经过!

Prompt 2: 编写代码测验

有效的单元测验能够验证运用中特定代码的逻辑是否正确,但因为人思想的局限性,有时分咱们编写的测验用例仍无法覆盖比较鸿沟的情况。走运的是,只需供给少数的样本提示,ChatGPT就能很容易地进行模仿和扩写,由此便引申出了ChatGPT的第2个运用——编写代码测验。

原 Prompt 是:

Write test cases for the main edge cases that could happen to the below code snippet.First outline the test cases you’ll write.Second, write the test cases in javascript using the Jest framework.{enter code}

为以下代码片段或许发生的首要边缘情况编写测验用例。首要概述您将编写的测验用例。其次,运用 Jest 结构在 javascript 中编写测验用例。{输入代码}

这个 Prompt 有个不好的当地,便是它在描绘测验用例的编写要求时过于抽象。合理的做法应该是供给少数的样本提示,而且描绘测验用例的运用场景,才能让ChatGPT更有针对性地输出

依据这点,咱们将这个 Prompt 重写如下:

请参照以下由“`分隔的代码示例,编写一个至少包括20个测验办法的 JUnit 4 测验类,以模仿用户输入不同邮箱内容后 isValidEmail() 办法的验证情况:

“`

    class EmailValidatorTest {
        @Test
        fun emailValidator_CorrectEmailSimple_ReturnsTrue() {
            assertTrue(EmailValidator.isValidEmail("name@email.com"))
        }
    }

“`

ChatGPT的答复如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

能够看到,ChatGPT参照样本为咱们精确地生成了契合场景要求的测验办法集,模仿了不同的用户输入,本场景验证经过!

Prompt 3: 编写代码注释

命名精确、完结优雅、逻辑明晰的代码都是有自解说的效果的,但一个团队里的成员水平不一,咱们无法要求每个成员都能写出这样的代码,因而增加恰当的注释是必要的,这项作业虽简单但无趣,彻底能够交给 ChatGPT 编程才能的第3个运用——编写代码注释来为咱们代庖。

原 Prompt 是:

Regenerate the code snippet below, but please include comments to each line of code {enter code}

从头生成下面的代码片段,但请在每行代码中增加注释。{输入代码}

这个 Prompt 有个不好的当地,它要求在每一行的代码中增加注释,实际上彻底没有必要,过多的注释只会增加阅读的时间成本。

咱们彻底能够要求它在遵照既有注释标准的根底上,仅在必要的当地增加注释,依据这点,咱们将这个 Prompt 修改如下:

请参照以下由>分隔的注释标准,对以下由“`分隔的代码片段进行检查,并在注释标准要求的当地补上中文注释:

>

1.关于一切的办法,都需求运用 Javadoc 注释。注释内容除了包括回来值、参数和异常说明外,还需求指出该办法的效果或完结的功用。

2.关于一切的类,都需求增加创立者和创立日期的注释。

>

“`

public abstract class TypeConverter<T, V> {
    private Class<T> mFromClass;
    private Class<V> mToClass;
    public TypeConverter(Class<T> fromClass, Class<V> toClass) {
        mFromClass = fromClass;
        mToClass = toClass;
    }
    Class<V> getTargetType() {
        return mToClass;
    }
    Class<T> getSourceType() {
        return mFromClass;
    }
    public abstract V convert(T value);
}

“`

ChatGPT的答复如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

能够看到,ChatGPT 参照标准为咱们精确地增加了办法注释和类注释,关于未要求的属性注释则没有增加,本场景验证经过!

Prompt 4: 编写运用程序

ChatGPT 为一个彻底不明白编程的小白开发出一款完好运用程序的新闻早已屡见不鲜,咱们要做的仅仅是理清咱们的需求,并罗列好过程交给它,这里展示的便是 ChatGPT 编程才能的第4个运用——编写运用程序。

原 Prompt 是:

I will provide some specfic information about web app requirements, and it will be you job to develop an architecture and code for developing a secure app with Golang and Angular.{enter web app requirements}

我将供给有关 Web 运用程序需求的一些具体信息,你的作业是开发一个架构并运用 Golang 和 Angular 编写代码,以开发一个安全的运用程序。{输入 Web 运用程序需求}

编写一个完好运用程序的过程太多,咱们不好演示,但是编写一个简单的功用模块仍是捉襟见肘的。依据此,咱们将这个 Prompt 重写如下:

请依照以下由>分隔的具体过程,供给Android渠道对应的完好Kotlin代码完结,包括Activity文件、布局文件以及AndroidManifest.xml文件,以完结一个“检查手机相片”的需求。

过程中要求:

1.提示我要在哪个目录创立哪个文件;

2.不运用任何第三方结构;

3.在必要的当地增加中文注释;

>

1.页面A供给一个按钮,点击能够翻开Android体系的文件浏览器,并挑选体系相册中的某一张图片;

2.在用户选中了某张图片后,跳转到页面B以全屏预览该图片

>

ChatGPT的答复如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

输出过程中 ChatGPT 或许会因为单次答复超过了字数约束而中断,咱们只需求提示它继续就能够了。

之后,咱们将ChatGPT答复中的代码复制到新建的Android工程里,然后测验运转如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

能够看到,ChatGPT依照过程为咱们完好地生成了契合要求的、可运转的代码,本场景验证经过!

Prompt 5: 履行查询

客户端的首要职责,是展示UI以及与用户交互,与后端开发相比,其与数据库直接打交道的时机较少。这也造成了大部分客户端开发仅会根本的增修改查,而关于Join、索引、子查询等愈加高档的数据库特性并不擅长。但现在,有了 ChatGPT 编程才能的第5个运用——履行查询后,这项作业就彻底能够由ChatGPT代庖了。

原 Prompt 是:

The database contains tables named “Products”. “Users”. “Orders” and “Suppliers.” I will type queries, and you will reply with what the terminal shows.I want you to reply with a table of query results in a single code block.

数据库包括名为“Products”、“Users”、“Orders”和“Suppliers”的表。我将输入查询,你将运用终端显示的内容进行回复。我期望您在单个代码块中回复查询成果表。

这个 Prompt 写得有点奇怪,按字面意思,它是想让 ChatGPT 履行查询并回来一张成果表。且不说各种数据库图形界面本身就能够支撑可视化查询,而假如不是以插件方式支撑的话,还得向 ChatGPT 供给完好的数据库数据,操作起来适当麻烦。

依据此,咱们仍是回到让 ChatGPT 为咱们编撰数据库操作句子的场景,将这个 Prompt 重写如下:

请参照以下由“`分隔的几个实体类,每个实体对应数据库中的每一个表,实体的每个实例对应表中的每一行数据,实体的每个属性都对应表中的每一列的字段。

现在我需求查询一切歌曲的歌名以及每个歌曲的对应的播放列表名和每个播放列表对应的歌手名,请为我编写一个SQLite查询句子:

“`

@Entity
data class Artist(
    @PrimaryKey val artist_id: Long,
    val artist_name: String,
    val artist_age: Int
)
@Entity
data class Playlist(
    @PrimaryKey val playlist_id: Long,
    val artist_id: Long,
    val playlist_name: String
)
@Entity
data class Song(
    @PrimaryKey val song_id: Long,
    val song_name: String,
    val playlist_id: Long,
)

“`

ChatGPT的答复如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

咱们将ChatGPT答复中的查询句子复制到数据库图形操作界面,然后测验运转如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

能够看到,ChatGPT依照要求为咱们精确地回来了查询成果,本场景验证经过!

Prompt 6: Git命令生成器

不得不供认,支撑图形界面操作的Git版别办理体系的确有一种魔力,但在享受其便利性的一起,具体的Git命令也在被咱们迅速忘记,这也导致了一旦咱们转化到一个新的IDE后,就会彻底不知道从何下手。但现在,有了 ChatGPT 编程才能的第6个运用——Git命令生成器后,这种烦恼就不复存在了。

原 Prompt 是:

I want you to act like a Git commands generator. I’ll explain to you what I need you to do and you will provide me with the right Git command. My first requirement is. {I want to push the example.txt file to the branch name example-branch}

我期望你像 Git 命令生成器相同作业。 我会向您解说我需求您做什么,您会为我供给正确的 Git 命令。 我的榜首个要求是。 {我要推送example.txt文件到分支名example-branch}

这个 Prompt 本身却是没有什么问题,只是“推送XX文件到XX分支”这个要求容易让 ChatGPT 以为你只是想履行“push”这个操作,咱们理应写的更具体一点。为此,咱们将这个 Prompt 重写如下:

请依照以下由>分隔的要求描绘,为我供给正确的 Git 命令:

>

将example.txt文件增加到Git库房并推送到example-branch分支

>

ChatGPT的答复如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

能够看到,在更为具体的要求描绘下,ChatGPT为咱们生成了正确的Git命令,本场景验证经过!

Prompt 7: 操作攻略

本质上,操作攻略是给用户或技能新手看的一类文档,是将包括许多专业术语的技能文档转化为愈加接近自然言语的过程指引或问题解答,以协助读者快速上手开发或处理实际问题。但怎样从既有的技能思想上抽离,并切换到用户或技能新手的视角去考虑操作攻略怎样写是一个问题,这个时分,ChatGPT 编程才能的第7个运用——操作攻略就能够帮上忙了。

原 Prompt 是:

I will provide you with basic steps of an app functionality {enter steps} and you will come up with an engaging article on how to do those basic steps.

我将为您供给运用程序功用的根本过程{输入过程},然后您将编撰一篇引人入胜的文章,介绍怎样履行这些根本过程。

这个 Prompt 本身没有什么太大的问题,但是方式上我以为能够改进一下,相比起较为呆板的文档,我以为以问答机器人的方式展示会更直观和高效一点,为此,咱们将这个 Prompt 重写如下:

你将扮演一个FAQ问答机器人,依据以下由>分隔的文档所供给的内容,为用户提出的问题供给一份简单而易上手的操作攻略。你需求先向用户问候,询问用户有什么问题,然后等候用户输入,在这个过程中你有必要遵照的要求是:

1.仅能以供给的文档为参阅源,而不能以其他当地的材料为参阅源;

2.假如在供给的文档中没有找到处理计划,请诚笃告知用户,不能捏造答案。

>

Camera intents

To perform basic camera actions like capturing a photo or video using the device’s default camera application, you do not need to integrate with a Camera library. Instead, use an Intent. Take a photo with a camera app

Android delegates actions to other applications by invoking an Intent. This process involves three pieces: the Intent itself, a call to start the external Activity, and some code to handle the image data when focus returns to your activity.

Here’s a function that invokes an Intent to capture a photo.

val REQUEST_IMAGE_CAPTURE = 1
private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // display error state to the user
    }
}

Record a video with a camera app

You can also invoke an Intent to capture a video.

val REQUEST_VIDEO_CAPTURE = 1
private fun dispatchTakeVideoIntent() {
    Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent ->
        takeVideoIntent.resolveActivity(packageManager)?.also {
            startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE)
        } ?: run {
          //display error state to the user
        }
    }
}

The startActivityForResult() method is protected by a condition that calls resolveActivity(), which returns the first activity component that can handle the Intent. Perform this check to ensure that you are invoking an Intent that won’t crash your app.

>

ChatGPT的答复如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

能够看到,经过咱们的前期设定,ChatGPT答复中的代码根本参阅自咱们供给的文档,而下文的内容也是依据上面代码的解说,算是没有超纲。

但是,即使咱们特别要求了,ChatGPT 有时分仍然会无法清醒认知自己的常识鸿沟,然后呈现了令人头疼的“幻觉”现象,在面临咱们文档中没有提及到的问题时,它会给出它自有训练数据得出的答案:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

这个现象,在依据 ChatGPT 4 的 New Bing 身上则没有呈现:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

所以,就操作攻略这一场景的运用来讲,也算能勉强经过~

Prompt 8: 生成ReadMe文件

程序员有两件厌烦的作业:写文档,以及他人不写文档。而现在,有了 ChatGPT 编程才能的第8个运用——生成文档后,就能够帮程序员一次性处理这两件厌烦的作业了。

原 Prompt 是:

Generate documentation for the code below. You should include detailed instructions to allow a developer to run it on a local machine, explain what the code does, and list vulnerabilities that exist in this code, {enter code}

为下面的代码生成文档。 您应该包括具体说明以答应开发人员在本地核算机上运转它,解说代码的效果,并列出此代码中存在的缝隙,{输入代码}

这个 Prompt 有个不好的当地,便是一般相似文档一类的东西,咱们会要求其结构尽量明晰清楚,以提高其易读性,而这个 Prompt 并未要求 ChatGPT 结构化输出文档。

提前向 ChatGPT 指定要输出的文档结构以及输出的文档方式,是一个比较好的做法,为此,咱们将这个 Prompt 重写如下:

请参照以下由>分隔的文档结构,为以下由“`分隔的代码生成Markdown方式的中文文档:

>

1.类名

a.类介绍

2.揭露办法概要(表格方式,榜首列为回来值,第二列为办法名及一句话描绘)

3.揭露办法

a.办法名
b.办法签名(包括拜访范围、回来值、参数)
c.办法介绍

>

“`

/**
 * This class gives access to system locale services. These services allow applications to control
 * granular locale settings (such as per-app locales).
 *
 * <p> Third party applications should treat this as a write-side surface, and continue reading
 * locales via their in-process {@link LocaleList}s.
 */
@SystemService(Context.LOCALE_SERVICE)
public class LocaleManager {
    private static final String TAG = "LocaleManager";
    /** Context required for getting the user for which API calls are made. */
    private Context mContext;
    private ILocaleManager mService;
    /** @hide Instantiated by ContextImpl */
    public LocaleManager(Context context, ILocaleManager service) {
        mContext = context;
        mService = service;
    }
    /**
     * Sets the UI locales for the calling app.
     *
     * <p>Pass a {@link LocaleList#getEmptyLocaleList()} to reset to the system locale.
     *
     * <p><b>Note:</b> Changes to app locales will result in a configuration change (and potentially
     * an Activity lifecycle event) being applied to the calling application. For more information,
     * see the <a
     * href="https://developer.android.com/guide/topics/resources/runtime-changes">section on
     * handling configuration changes</a>. The set locales are persisted; they are backed up if the
     * user has enabled Backup & Restore.
     *
     * <p><b>Note:</b> Users' locale preferences are passed to applications by creating a union of
     * any app-specific locales and system locales, with the app-specific locales appearing first.
     * Language resources are then chosen per usual (as described in the <a
     * href="https://developer.android.com/guide/topics/resources/multilingual-support">section on
     * locale resolution</a>).
     *
     * @param locales the desired locales for the calling app.
     */
    @UserHandleAware
    public void setApplicationLocales(@NonNull LocaleList locales) {
        setApplicationLocales(mContext.getPackageName(), locales);
    }
    /**
     * Sets the UI locales for a specified app (described by package name).
     *
     * <p>Pass a {@link LocaleList#getEmptyLocaleList()} to reset to the system locale.
     *
     * <p><b>Note:</b> Changes to app locales will result in a configuration change (and potentially
     * an Activity lifecycle event) being applied to the specified application. For more
     * information, see the <a
     * href="https://developer.android.com/guide/topics/resources/runtime-changes">section on
     * handling configuration changes</a>. The set locales are persisted; they are backed up if the
     * user has enabled Backup & Restore.
     *
     * <p><b>Note:</b> Users' locale preferences are passed to applications by creating a union of
     * any app-specific locales and system locales, with the app-specific locales appearing first.
     * Language resources are then chosen per usual (as described in the <a
     * href="https://developer.android.com/guide/topics/resources/multilingual-support">section on
     * locale resolution</a>).
     *
     * @param appPackageName the package name of the app for which to set the locales.
     * @param locales the desired locales for the specified app.
     * @hide
     */
    @SystemApi
    @RequiresPermission(Manifest.permission.CHANGE_CONFIGURATION)
    @UserHandleAware
    public void setApplicationLocales(@NonNull String appPackageName, @NonNull LocaleList locales) {
        try {
            mService.setApplicationLocales(appPackageName, mContext.getUser().getIdentifier(),
                    locales);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
    /**
     * Returns the UI locales for the calling app.
     *
     * <p>Returns a {@link LocaleList#getEmptyLocaleList()} if no app-specific locales are set.
     */
    @UserHandleAware
    @NonNull
    public LocaleList getApplicationLocales() {
        return getApplicationLocales(mContext.getPackageName());
    }
    /**
     * Returns the current UI locales for a specified app (described by package name).
     *
     * <p>Returns a {@link LocaleList#getEmptyLocaleList()} if no app-specific locales are set.
     *
     * <p>This API can be used by an app's installer
     * (per {@link android.content.pm.InstallSourceInfo#getInstallingPackageName}) to retrieve
     * the app's locales.
     * All other cases require {@code android.Manifest.permission#READ_APP_SPECIFIC_LOCALES}.
     * Apps should generally retrieve their own locales via their in-process LocaleLists,
     * or by calling {@link #getApplicationLocales()}.
     *
     * @param appPackageName the package name of the app for which to retrieve the locales.
     */
    @RequiresPermission(value = Manifest.permission.READ_APP_SPECIFIC_LOCALES, conditional = true)
    @UserHandleAware
    @NonNull
    public LocaleList getApplicationLocales(@NonNull String appPackageName) {
        try {
            return mService.getApplicationLocales(appPackageName, mContext.getUser()
                    .getIdentifier());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
    /**
     * Returns the current system locales, ignoring app-specific overrides.
     *
     * <p><b>Note:</b> Apps should generally access the user's locale preferences as indicated in
     * their in-process {@link LocaleList}s. However, in case an app-specific locale is set, this
     * method helps cater to rare use-cases which might require specifically knowing the system
     * locale.
     *
     * <p><b>Note:</b> This API is not user-aware. It returns the system locales for the foreground
     * user.
     */
    @NonNull
    public LocaleList getSystemLocales() {
        try {
            return mService.getSystemLocales();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
    /**
     * Sets the current system locales to the provided value.
     *
     * @hide
     */
    @TestApi
    public void setSystemLocales(@NonNull LocaleList locales) {
        try {
            Configuration conf = ActivityManager.getService().getConfiguration();
            conf.setLocales(locales);
            ActivityManager.getService().updatePersistentConfiguration(conf);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
}

“`

ChatGPT 的答复如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

能够看到,ChatGPT依据咱们供给的文档结构,为咱们生成了相对来说结构更明晰、可读性更强的API文档,本场景验证经过!

Prompt 9: 代码转化器

ChatGPT这种大型言语模型非常擅长将其输入转化为不同的格式,不同开发言语之间的转化自然也不在话下,于是便延伸出了ChatGPT 编程才能的第9个运用——代码转化器。

原 Prompt 是:

Translate this code from JavaScript to Python {Enter code}

将这段代码从 JavaScript 翻译成 Python {Enter code}

在Android中构建UI有两种方式,以XML标签为代表的静态布局,和以Java API 为代表的动态布局。前者常用于设置默许的布局样式,后者常用于运转时布局的动态调整。

假如想削减对多文件的办理,就需求将XML标签转为Java代码;而假如想精简视图类的Java代码,就需求将部分Java代码转为XML标签。

这种转化常常需求手动地重写,代码量一多的话简直是噩梦。现在,咱们测验把这项作业交给 ChatGPT,为此,咱们将这个 Prompt 重写如下:

请将以下这个依据Android渠道的XML布局文件(由“`分隔)转化为Java代码完结,要求:

1.导入依据AndroidX的相关的类

2.以Activity类型为上下文

3.不同类型的视图用空行离隔并补上注释说明

“`

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FirstFragment">
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="16dp">
        <Button
            android:id="@+id/button_first"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/next"
            app:layout_constraintBottom_toTopOf="@id/textview_first"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        <TextView
            android:id="@+id/textview_first"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:text="@string/lorem_ipsum"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/button_first" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>

“`

ChatGPT 的答复如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

之后,咱们将ChatGPT答复中的代码复制到Activity文件里,然后测验运转如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

能够看到,ChatGPT 依照要求为咱们精确地将XML文件转化成了可运转的Java代码,本场景验证经过!

Prompt 10: 代码解说器

接手一份彻底没有任何文档和注释的离职搭档的代码,是每个程序员的至暗时刻之一,因为咱们并不能确保每次都有足够的时间和精力来逐行阅读和了解代码,而 ChatGPT 编程才能的第10个运用——代码解说器正好能够帮咱们处理这种困扰。

原 Prompt 是:

What will following code snippet do {Enter code}

以下代码片段将做什么{输入代码}

这里有一个问题,便是ChatGPT约束了单次输入的字数,而咱们的代码片段常常动辄便是几百上千行,为了确保 ChatGPT 能够处理完好的代码片段,咱们需求先和 ChatGPT 达到一个约定,要求其有必要在咱们确认输入完毕之后,才开端进行处理作业

依据这点,咱们将这个 Prompt 重写如下:

我将发送一个代码片段,该代码片段或许过长,超出了字数约束,我会分割成多次发送。现要求你在收到“代码发送完毕”这一指令前之前请勿开端处理,而是继续等候,直到我发出了“代码发送完毕”的指令之后,你再一致处理这多次发送的代码片段,并解说一下这个代码片段的意义。

ChatGPT的答复如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

但有时分,即使咱们这么要求了,而 ChatGPT 也这么回应了,在 ChatGPT 3.5 上它仍然会抽风地在咱们发送中间部分的内容时就开端处理了(在依据ChatGPT 4.0的 New Bing 上则是正常的)。

这个时分咱们不用管它,直接点击停止生成按钮,然后继续发送其余部分,并在最终发出“代码发送完毕”的指令,ChatGPT 就会按咱们开始的要求,一致处理这多次发送的代码片段并解说其意义。

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

能够看到,ChatGPT 关于咱们供给的 TypeConverter 这个类的解说根本正确,本场景验证经过!

写在最终

最终说明一下,考虑到目前大部分人很难拿到 ChatGPT Plus 的账号,因而本文是依据现有的 ChatGPT 3.5 进行验证的,但因为 ChatGPT 3.5 是 无法拜访互联网的,因而文中需求引证的文档都是节选其中的一段放到问题里的。

而到了ChatGPT 4之后,因为能够经过插件来拜访互联网了,也就能够不用像文中那么麻烦了,直接丢给它一个链接,让它依据这个链接的内容答复问题就好了。一起 ChatGPT 4 关于咱们发出的指令,也能更好地了解与遵照,而不是像 ChatGPT 3.5 相同一身反骨。

别的一件作业便是,开头就说了,本文的首要目的是验证将 ChatGPT 运用到这10个作业场景的可行性,而不是供给10个完美的 Prompt。即使你用了我文中重写过的 Prompt,也或许输出和我并不彻底一致的成果,关于这点,ChatGPT 本身的解说如下:

赶紧收藏!使用ChatGPT提高研发生产力的10个正确姿势!

假如是以 API 的方式拜访 ChatGPT,尚可经过调理 tempreture 参数来让成果输出较为固定,而直接在 Web 运用程序上对话的方式,我没有研究出有效的计划,假如你知道,还请在谈论区告知我,谢谢~

总体来说,目前市面上绝大多数的所谓AI运用,都是对现有AI大模型的一个封装,扮演的其实便是相似Prompt工程师的人物。所以,怎样写好 Prompt 的确是一项根底但很重要的作业,掌握这个才能后,只要你有想法,就能够挖掘出比以上10个更丰富的场景。