实例证明ChatGPT对普通程序员真有很大影响!

发布时间 - 2023-03-17 00:00:00    点击率:

本篇文章给大家带来了关于chatgpt的相关知识,其中主要跟大家聊一聊我是如何用一个例子来证明chatgpt对我们普通程序员的影响或帮助?感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

刚刚我看到社区里有一个提问, 想问如何优雅的写出以下的判断逻辑: (看的出来判断逻辑还是挺多的不需要细看)腐植酸含量 30 g/L(不低于 30 g/L)(右边有 +- 键,可以增加或减少,但净含量不低于 30 g/L)。大量元素含量(合计不低于 200 g/L):氮 70 g/L (下边有两个选择,UAN 或氮,每个健右边有 +- 键,可以增加或减少,下同), 磷 70 g/L (下边有两个选择,磷酸一铵或磷酸二铵,每个健右边有 +- 键,可以增加或减少,下同),钾 60 g/L (下边有四个选择,氯化钾、硫酸钾、硝酸钾或磷酸二氢钾,每个健右边有 +- 键,可以增加或减少,下同)。至少包括两种元素,单一元素净含量不低于 20 g/L,氮、磷、钾三个相加不能低于 200 g/L,低于 200 g/L 弹出错误提示。游离氨基酸 100 g/L(不低于 100 g/L)(右边有 +- 键,可以增加或减少,但净含量不低于 100 g/L),微量元素(不低于 20 g/L):铁 4 g/L (每个右边有 +- 键,可以增加或减少,至少包括 1 种微量元素,6 种元素净含量总和不低于 20 g/L,低于则有错误提示。若添加任一微量元素,不低于 0.5 g/L,低于则有错误提示)、锌 4g/L、硼 4g/L、铜 4g/L、锰 3.5g/L、钼 0.5g/L(右边有 +- 键,可以增加或减少,钼净含量不能高于 5 g/L,高于则有错误提示)联想到之前我总是会问问ChatGPT来看看它究竟有没有网络上传的那么神.于是我将原问题发送给了ChatGPT得到了以下回答:(由于我的网络没有那么稳定,得到的回答经常会回答一半网络就断开了,所以只传一部分例子)

ChatGPT回答1.1版本

在Laravel框架中,可以使用表单验证器来实现对条件的验证,具体的实现步骤如下:

  • 创建一个自定义验证规则

在Laravel框架中,可以使用 php artisan make:rule 命令来创建一个自定义的验证规则类。这个自定义的验证规则类需要实现 Illuminate\Contracts\Validation\Rule 接口,并在其中编写验证规则的逻辑。
例如,可以创建一个名为 FertilizerRule 的自定义验证规则类,用于验证肥料条件:

$ php artisan make:rule FertilizerRule

FertilizerRule 类中,可以实现 passes 方法来进行验证,如果验证成功则返回 true,否则返回 false

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class FertilizerRule implements Rule
{
    public function passes($attribute, $value)
    {
        // TODO: 编写肥料条件的验证逻辑
    }

    public function message()
    {
        return 'The :attribute is invalid.';
    }
}
  • 编写验证逻辑

 在 FertilizerRule 类中,可以根据题目要求编写肥料条件的验证逻辑。以下是一个示例:

     }

        // 验证大量元素含量
        $total_npk = $value['nitrogen'] + $value['phosphorus'] + $value['potassium'];
        if ($total_npk < 200) {
            return false;
        }
        if ($value['nitrogen'] < 70 || $value['phosphorus'] < 70 || $value['potassium'] < 60) {
            return false;
        }

        // 验证至少包括两种元素,单一元素净含量不低于 20 g/L
        $count = 0;
        foreach (['nitrogen', 'phosphorus', 'potassium'] as $element) {
            if ($value[$element] >= 20) {
                $count++;
            }
        }
        if ($count < 2) {
            return false;
        }

        // 验证游离氨基酸含量
        if (!isset($value['amino_acid']) || $value['amino_acid'] < 100) {
            return false;
        }

        // 验证微量元素含量
        $total_trace = 0;
        $trace_elements = ['iron', 'zinc', 'boron', 'copper', 'manganese', 'molybdenum'];
        foreach ($trace_elements as $element) {
            if (isset($value[$element])) {
                $total_trace += $value[$element];
            }
        }
        if (count(array_filter($value, function ($v) { return $v >= 0.5; })) < 1 || $total_trace < 20 ||
    //...代码不完整

离题目要求的优雅好像还是挺有区别的, 于是我继续追问

me : 感觉不太优雅, 用到的if太多了,不太清晰明了,请优化一下

ChatGPT回答1.2版本

是的,这个代码确实有很多 if 语句,让代码变得难以阅读和维护。我建议将这个代码分解成多个函数,每个函数只负责处理一个特定的条件。这样可以让代码更加清晰明了,易于阅读和维护。
下面是一个可能的优化方案:

 function validateHumicAcid($value) {
    return $value >= 30;
}

function validateMacroElements($nitrogen, $phosphorus, $potassium) {
    $sum = $nitrogen + $phosphorus + $potassium;
    return $sum >= 200 && $nitrogen >= 20 && $phosphorus >= 20 && $potassium >= 20;
}

function validateTraceElements($iron, $zinc, $boron, $copper, $manganese, $molybdenum) {
    $sum = $iron + $zinc + $boron + $copper + $manganese + $molybdenum;
    $atLeastOne = $iron >= 0 || $zinc >= 0 || $boron >= 0 || $copper >= 0 || $manganese >= 0 || $molybdenum >= 0;
    $atLeastSix = $sum >= 20;
    return $atLeastOne && $atLeastSix && $molybdenum <= 5;
}

function validateAminoAcids($value) {
    return $value >= 100;
}

function validate($humicAcid, $nitrogen, $phosphorus, $potassium, $iron, $zinc, $boron, $copper, $manganese, $molybdenum, $aminoAcids) {
    $isValid = true;

    if (!validateHumicAcid($humicAcid)) {
        $isValid = false;
        // 输出错误提示
    }

    if (!validateMacroElements($nitrogen, $phosphorus, $potassium)) {
        $isValid = false;
        // 输出错误提示
    }

    if (!validateTraceElements($iron, $zinc, $boron, $copper, $manganese, $molybdenum)) {
        $isValid = false;
        // 输出错误提示
    }

    if (!validateAminoAcids($aminoAcids)) {
        $isValid = false;
        // 输出错误提示
    }

    return $isValid;
}

现在,我们已经把验证逻辑分解成了四个独立的函数,每个函数都专注于处理一个特定的条件。这使得代码变得更加简洁和易于理解。

最后,我们把这些函数组合起来,并在 validate 函数中使用它们来验证输入值。如果输入无效,则返回 false 并输出错误提示。否则,返回 true。

需要注意的是,这里的错误提示是通过注释标记的,实际上应该通过 Laravel 框架提供的错误处理机制来输出。

可以看到ChatGPT根据我的提问改为了用函数的方式来解决这个问题
我来继续追问:
me : 感觉还是不太优雅,请用laravel框架并且用责任链设计模式来设计这次的要求

ChatGPT回答1.3版本

好的,我来为您展示如何用 Laravel 框架和责任链设计模式来设计这个要求。
 首先,我们需要定义一个验证器类,用于验证每一个条件是否满足。该类可以实现 Laravel 框架  中的 Illuminate\Contracts\Validation\Validator 接口,这样就可以方便地与 Laravel 内置的验证器组件集成。

接下来,我们可以定义一个抽象基类 Validatable,该类定义了一个抽象方法 validate,用于验证输入的值是否满足指定条件。我们可以根据每个条件定义一个具体的验证器类,这些类都继承自 Validatable,并实现 validate 方法,用于具体验证。

最后,我们可以使用责任链模式来组织这些验证器类,使其按顺序依次验证输入的值。每个验证器类可以设置一个 next 属性,用于保存下一个验证器类的实例。在 validate 方法中,如果当前验证器验证失败,则会调用下一个验证器的 validate 方法,以此类推,直到所有验证器都验证完毕或某一个验证器验证失败为止。

下面是一个示例代码,用于验证腐植酸含量和大量元素含量这两个条件:

next = $next;
        return $next;
    }

    public function validate($attribute, $value, $parameters = [], $validator = null)
    {
        if ($this->condition($value)) {
            return true;
        } elseif ($this->next) {
            return $this->next->validate($attribute, $value, $parameters, $validator);
        } else {
            return false;
        }
    }

    abstract protected function condition($value);
}

class HumicAcidValidator extends Validatable
{
    protected function condition($value)
    {
        return $value >= 30;
    }
}

class NitrogenValidator extends Validatable
{
    protected function condition($value)
    {
        return $value >= 70;
    }
}

class PhosphorusValidator extends Validatable
{
    protected function condition($value)
    {
        return $value >= 70;
    }
}

class PotassiumValidator extends Validatable
{
    protected function condition($value)
    {
        return $value >= 60;
    }
}

class ValidatorChain implements Validator
{
    protected $chain;

    public function __construct()
    {
        $this->chain = new HumicAcidValidator();
        $this->chain->setNext(new NitrogenValidator())
                    ->setNext(new PhosphorusValidator())
                    ->setNext(new PotassiumValidator());
    }

    public function validate($attribute, $value, $parameters = [], $validator = null)
    {
        return $this->chain->validate($attribute, $value, $parameters, $validator);
    }
}

总结

可以看到ChatGPT对于我的提问, 都给到了一个相对合适的回答

虽然这些代码不可能直接运用到实际项目中, 但也是给了我们一些思路, 去如何实现

以上示例中的三个版本答案像我这样的菜鸟可能只能去想到前两种方式去解决

ChatGPT相当于可以给我一些新的方法思路去解决问题, 或者自己不知道的方式思路

以后要是对某些功能没有思路的话, 不如我们问问 ChatGPT 吧~

推荐学习:《laravel视频教程》


# laravel  # chatgpt  # 不低于  # 错误提示  # 是一个  # 自定义  # 不太  # 两种  # 可以使用  # 磷酸  # 净含量  # 创建一个 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel安装步骤详细教程_Laravel环境搭建指南  Laravel怎么使用artisan命令缓存配置和视图  如何用PHP快速搭建CMS系统?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Android仿QQ列表左滑删除操作  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何快速选择适合个人网站的云服务器配置?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  js实现获取鼠标当前的位置  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  浅谈Javascript中的Label语句  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  装修招标网站设计制作流程,装修招标流程?  奇安信“盘古石”团队突破 iOS 26.1 提权  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  使用Dockerfile构建java web环境  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  长沙做网站要多少钱,长沙国安网络怎么样?  如何在云虚拟主机上快速搭建个人网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  手机网站制作与建设方案,手机网站如何建设?  Laravel如何记录自定义日志?(Log频道配置)  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  JS经典正则表达式笔试题汇总  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Swift开发中switch语句值绑定模式  简历在线制作网站免费版,如何创建个人简历?  Laravel观察者模式如何使用_Laravel Model Observer配置  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  ,怎么在广州志愿者网站注册?  个人摄影网站制作流程,摄影爱好者都去什么网站?  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  JS碰撞运动实现方法详解  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  javascript中对象的定义、使用以及对象和原型链操作小结  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  QQ浏览器网页版登录入口 个人中心在线进入