實例證明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['humic_acid']) || $value['humic_acid'] < 30) { return false; } // 验证大量元素含量 $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 方法,以此類推,直到所有驗證器都驗證完畢或某一個驗證器驗證失敗為止。
下面是一個範例程式碼,用於驗證腐植酸含量和大量元素含量這兩個條件:
<?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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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