首頁 php框架 Laravel 實例證明ChatGPT對普通程式設計師真有很大影響!

實例證明ChatGPT對普通程式設計師真有很大影響!

Mar 17, 2023 pm 03:52 PM
laravel 程式設計師 chatgpt

這篇文章為大家帶來了關於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 類別中,可以依照題目要求撰寫肥料條件的驗證邏輯。以下是一個例子:

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class FertilizerRule implements Rule
{
    public function passes($attribute, $value)
    {
        // 验证腐植酸含量
        if (!isset($value[&#39;humic_acid&#39;]) || $value[&#39;humic_acid&#39;] < 30) {
            return false;
        }

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

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

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

        // 验证微量元素含量
        $total_trace = 0;
        $trace_elements = [&#39;iron&#39;, &#39;zinc&#39;, &#39;boron&#39;, &#39;copper&#39;, &#39;manganese&#39;, &#39;molybdenum&#39;];
        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 方法,以此類推,直到所有驗證器都驗證完畢或某一個驗證器驗證失敗為止。

下面是一個範例程式碼,用於驗證腐植酸含量和大量元素含量這兩個條件:

<?php

namespace App\Validators;

use Illuminate\Contracts\Validation\Validator;

abstract class Validatable implements Validator
{
    protected $next;

    public function setNext(Validatable $next)
    {
        $this->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影片教學

以上是實例證明ChatGPT對普通程式設計師真有很大影響!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在Laravel中如何獲取郵件發送失敗時的退信代碼? 在Laravel中如何獲取郵件發送失敗時的退信代碼? Apr 01, 2025 pm 02:45 PM

Laravel郵件發送失敗時的退信代碼獲取方法在使用Laravel開發應用時,經常會遇到需要發送驗證碼的情況。而在實�...

Bangla 部分模型檢索中的 Laravel Eloquent ORM) Bangla 部分模型檢索中的 Laravel Eloquent ORM) Apr 08, 2025 pm 02:06 PM

LaravelEloquent模型檢索:輕鬆獲取數據庫數據EloquentORM提供了簡潔易懂的方式來操作數據庫。本文將詳細介紹各種Eloquent模型檢索技巧,助您高效地從數據庫中獲取數據。 1.獲取所有記錄使用all()方法可以獲取數據庫表中的所有記錄:useApp\Models\Post;$posts=Post::all();這將返回一個集合(Collection)。您可以使用foreach循環或其他集合方法訪問數據:foreach($postsas$post){echo$post->

在Laravel6項目中如何有效檢查Redis連接的有效性? 在Laravel6項目中如何有效檢查Redis連接的有效性? Apr 01, 2025 pm 02:00 PM

在Laravel6項目中如何檢查Redis連接的有效性是一個常見的問題,特別是在項目依賴於Redis進行業務處理時。以下是...

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

Laravel數據庫遷移遇到類重複定義:如何解決遷移文件重複生成及類名衝突? Laravel數據庫遷移遇到類重複定義:如何解決遷移文件重複生成及類名衝突? Apr 01, 2025 pm 12:21 PM

Laravel數據庫遷移過程中出現類重複定義問題在使用Laravel框架進行數據庫遷移時,開發者可能會遇到“類已使用�...

Laravel的地理空間:互動圖和大量數據的優化 Laravel的地理空間:互動圖和大量數據的優化 Apr 08, 2025 pm 12:24 PM

利用地理空間技術高效處理700萬條記錄並創建交互式地圖本文探討如何使用Laravel和MySQL高效處理超過700萬條記錄,並將其轉換為可交互的地圖可視化。初始挑戰項目需求:利用MySQL數據庫中700萬條記錄,提取有價值的見解。許多人首先考慮編程語言,卻忽略了數據庫本身:它能否滿足需求?是否需要數據遷移或結構調整? MySQL能否承受如此大的數據負載?初步分析:需要確定關鍵過濾器和屬性。經過分析,發現僅少數屬性與解決方案相關。我們驗證了過濾器的可行性,並設置了一些限制來優化搜索。地圖搜索基於城

Laravel和後端:為Web應用程序提供動力邏輯 Laravel和後端:為Web應用程序提供動力邏輯 Apr 11, 2025 am 11:29 AM

Laravel是如何在後端邏輯中發揮作用的?它通過路由系統、EloquentORM、認證與授權、事件與監聽器以及性能優化來簡化和增強後端開發。 1.路由系統允許定義URL結構和請求處理邏輯。 2.EloquentORM簡化數據庫交互。 3.認證與授權系統便於用戶管理。 4.事件與監聽器實現松耦合代碼結構。 5.性能優化通過緩存和隊列提高應用效率。

解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 Apr 18, 2025 am 09:24 AM

在使用CraftCMS開發網站時,常常會遇到資源文件緩存的問題,特別是當你頻繁更新CSS和JavaScript文件時,舊版本的文件可能仍然被瀏覽器緩存,導致用戶無法及時看到最新的更改。這個問題不僅影響用戶體驗,還會增加開發和調試的難度。最近,我在項目中遇到了類似的困擾,經過一番探索,我找到了wiejeben/craft-laravel-mix這個插件,它完美地解決了我的緩存問題。

See all articles