Cet article vous apporte des connaissances pertinentes sur ChatGPT. Il explique principalement comment j'utilise un exemple pour prouver l'impact ou l'aide de ChatGPT sur nous, les programmeurs ordinaires ? Les amis intéressés peuvent jeter un œil ci-dessous. J'espère que cela sera utile à tout le monde.
Je viens de voir une question dans la communauté, je veux demander comment écrire avec élégance la logique de jugement suivante :
(On peut voir qu'il y a pas mal de logique de jugement, pas besoin de regarder attentivement)腐植酸含量 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 弹出错误提示。Copier après la connexion游离氨基酸 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,高于则有错误提示)Copier après la connexionJ'y pense avant de toujours demander à
ChatGPT
ChatGPT
来看看它究竟有没有网络上传的那么神.
于是我将原问题发送给了ChatGPT
得到了以下回答:
(由于我的网络没有那么稳定,得到的回答经常会回答一半网络就断开了,所以只传一部分例子)
ChatGPT回答1.1版本
在Laravel框架中,可以使用表单验证器来实现对条件的验证,具体的实现步骤如下:
创建一个自定义验证规则
在Laravel框架中,可以使用 php artisan make:rule
命令来创建一个自定义的验证规则类。这个自定义的验证规则类需要实现 IlluminateContractsValidationRule
接口,并在其中编写验证规则的逻辑。
例如,可以创建一个名为 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 框架 中的 IlluminateContractsValidationValidator 接口,这样就可以方便地与 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
pour voir si c'est aussi génial que de télécharger sur Internet.J'ai donc envoyé la question originale à
ChatGPT
et j'ai obtenu la réponse suivante :
(Comme mon réseau n'est pas très stable, les réponses que je reçois disent souvent que le réseau est déconnecté à mi-chemin, donc je n'envoie que quelques exemples) 🎜Réponse ChatGPT version 1.1🎜 🎜🎜Dans le framework Laravel, vous pouvez utiliser des validateurs de formulaire pour vérifier les conditions. Les étapes spécifiques de mise en œuvre sont les suivantes : 🎜php artisan make:rule
pour créer une classe de règles de validation personnalisée. Cette classe de règles de validation personnalisée doit implémenter l'interface IlluminateContractsValidationRule
et y écrire la logique des règles de validation. 🎜 Par exemple, vous pouvez créer une classe de règles de validation personnalisée nommée FertilizerRule
pour valider les conditions d'engrais : 🎜rrreee🎜Dans la classe FertilizerRule
, vous pouvez implémenter des passes code> pour vérifier, si la vérification est réussie, renvoie <code>true
, sinon renvoie false
: 🎜rrreeeFertilizerRule
, vous pouvez écrire une logique de vérification pour les conditions d'engrais en fonction des exigences de la question. Voici un exemple : 🎜rrreee🎜🎜Il semble que l'élégance de la question soit assez différente, alors j'ai continué à demander 🎜🎜🎜🎜moi : Cela ne semble pas très élégant, trop de si sont utilisés , ce n'est pas très clair et concis, veuillez l'optimiser🎜🎜🎜🎜Réponse ChatGPT version 1.2🎜🎜🎜Oui, ce code contient beaucoup d'instructions if, ce qui rend le code difficile à lire et à maintenir. Je suggérerais de diviser ce code en plusieurs fonctions, chacune étant chargée de gérer une seule condition spécifique. Cela rend le code plus clair et plus facile à lire et à maintenir. 🎜 Voici une optimisation possible : 🎜rrreee🎜 Maintenant, nous avons décomposé la logique de validation en quatre fonctions distinctes, chacune axée sur la gestion d'une condition spécifique. Cela rend le code plus concis et plus facile à comprendre. 🎜🎜Enfin, nous combinons ces fonctions et les utilisons dans la fonction de validation pour valider la valeur d'entrée. Si l'entrée n'est pas valide, false est renvoyé et un message d'erreur est généré. Sinon, renvoie vrai. 🎜🎜Il convient de noter que les invites d'erreur ici sont marquées par des commentaires et doivent en fait être générées via le mécanisme de gestion des erreurs fourni par le framework Laravel. 🎜🎜🎜Vous pouvez voir🎜ChatGPT
🎜Selon ma question, je l'ai changé en fonction pour résoudre ce problème🎜Je vais continuer à demander :🎜🎜moi : Ce n'est toujours pas très élégant, s'il vous plaît utilisez le framework Laravel Et utilisez le modèle de conception de chaîne de responsabilité pour concevoir cette exigence🎜🎜🎜🎜Réponse ChatGPT version 1.3🎜🎜🎜D'accord, laissez-moi vous montrer comment utiliser le framework Laravel et le modèle de conception de chaîne de responsabilité pour concevoir cette exigence. 🎜 Tout d'abord, nous devons définir une classe de validateur pour vérifier si chaque condition est remplie. Cette classe peut implémenter l'interface IlluminateContractsValidationValidator dans le framework Laravel, afin qu'elle puisse être facilement intégrée au composant de validation intégré de Laravel. 🎜🎜Ensuite, nous pouvons définir une classe de base abstraite Validatable, qui définit une méthode abstraite validate pour vérifier si la valeur d'entrée répond aux conditions spécifiées. Nous pouvons définir une classe de validateur spécifique basée sur chaque condition. Ces classes héritent de Validatable et implémentent la méthode validate pour une vérification spécifique. 🎜🎜Enfin, nous pouvons utiliser le modèle de chaîne de responsabilité pour organiser ces classes de validateurs afin qu'elles valident les valeurs d'entrée dans l'ordre. Chaque classe de validateur peut définir un attribut suivant qui contient une instance de la classe de validateur suivante. Dans la méthode validate, si le validateur actuel ne parvient pas à valider, la méthode validate du validateur suivant sera appelée, et ainsi de suite, jusqu'à ce que tous les validateurs aient été validés ou qu'un validateur échoue. 🎜🎜Ce qui suit est un exemple de code pour vérifier les deux conditions de teneur en acide humique et en macroéléments :🎜rrreee🎜🎜Résumé🎜🎜🎜Vous pouvez voir🎜ChatGPT
🎜Pour mes questions, les deux sont relativement appropriés La réponse a été donnée🎜🎜Bien que ces codes ne puissent pas être directement appliqués à des projets réels, cela nous donne également quelques idées sur la façon de les mettre en œuvre🎜🎜Les réponses aux trois versions des exemples ci-dessus ne peuvent être résolues que par un novice comme moi, Think. des deux premières façons de le résoudre🎜ChatGPT
ChatGPT
相当于可以给我一些新的方法思路去解决问题, 或者自己不知道的方式思路
以后要是对某些功能没有思路的话, 不如我们问问 ChatGPT
Cela équivaut à me donner de nouvelles méthodes et idées pour résoudre des problèmes, ou des méthodes et idées que je ne connais pas
ChatGPT
C'est parti~Apprentissage recommandé : "🎜tutoriel vidéo laravel🎜"🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!