ChatGPT对普通程序员的影响大吗

其他教程   发布日期:2023年09月08日   浏览次数:423

本文小编为大家详细介绍“ChatGPT对普通程序员的影响大吗”,内容详细,步骤清晰,细节处理妥当,希望这篇“ChatGPT对普通程序员的影响大吗”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

想问如何优雅的写出以下的判断逻辑:
(看的出来判断逻辑还是挺多的不需要细看)

  1. 腐植酸含量 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 弹出错误提示。
  1. 游离氨基酸 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,高于则有错误提示)

联想到之前我总是会问问

  1. ChatGPT
来看看它究竟有没有网络上传的那么神.
于是我将原问题发送给了
  1. ChatGPT
得到了以下回答:

ChatGPT回答1.1版本

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

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

在Laravel框架中,可以使用

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

  1. $ php artisan make:rule FertilizerRule

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

  1. namespace AppRules;
  2. use IlluminateContractsValidationRule;
  3. class FertilizerRule implements Rule
  4. {
  5. public function passes($attribute, $value)
  6. {
  7. // TODO: 编写肥料条件的验证逻辑
  8. }
  9. public function message()
  10. {
  11. return 'The :attribute is invalid.';
  12. }
  13. }
  • 编写验证逻辑

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

  1. <?php
  2. namespace AppRules;
  3. use IlluminateContractsValidationRule;
  4. class FertilizerRule implements Rule
  5. {
  6. public function passes($attribute, $value)
  7. {
  8. // 验证腐植酸含量
  9. if (!isset($value['humic_acid']) || $value['humic_acid'] < 30) {
  10. return false;
  11. }
  12. // 验证大量元素含量
  13. $total_npk = $value['nitrogen'] + $value['phosphorus'] + $value['potassium'];
  14. if ($total_npk < 200) {
  15. return false;
  16. }
  17. if ($value['nitrogen'] < 70 || $value['phosphorus'] < 70 || $value['potassium'] < 60) {
  18. return false;
  19. }
  20. // 验证至少包括两种元素,单一元素净含量不低于 20 g/L
  21. $count = 0;
  22. foreach (['nitrogen', 'phosphorus', 'potassium'] as $element) {
  23. if ($value[$element] >= 20) {
  24. $count++;
  25. }
  26. }
  27. if ($count < 2) {
  28. return false;
  29. }
  30. // 验证游离氨基酸含量
  31. if (!isset($value['amino_acid']) || $value['amino_acid'] < 100) {
  32. return false;
  33. }
  34. // 验证微量元素含量
  35. $total_trace = 0;
  36. $trace_elements = ['iron', 'zinc', 'boron', 'copper', 'manganese', 'molybdenum'];
  37. foreach ($trace_elements as $element) {
  38. if (isset($value[$element])) {
  39. $total_trace += $value[$element];
  40. }
  41. }
  42. if (count(array_filter($value, function ($v) { return $v >= 0.5; })) < 1 || $total_trace < 20 ||
  43. //...代码不完整

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

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

ChatGPT回答1.2版本

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

  1. function validateHumicAcid($value) {
  2. return $value >= 30;
  3. }
  4. function validateMacroElements($nitrogen, $phosphorus, $potassium) {
  5. $sum = $nitrogen + $phosphorus + $potassium;
  6. return $sum >= 200 && $nitrogen >= 20 && $phosphorus >= 20 && $potassium >= 20;
  7. }
  8. function validateTraceElements($iron, $zinc, $boron, $copper, $manganese, $molybdenum) {
  9. $sum = $iron + $zinc + $boron + $copper + $manganese + $molybdenum;
  10. $atLeastOne = $iron >= 0 || $zinc >= 0 || $boron >= 0 || $copper >= 0 || $manganese >= 0 || $molybdenum >= 0;
  11. $atLeastSix = $sum >= 20;
  12. return $atLeastOne && $atLeastSix && $molybdenum <= 5;
  13. }
  14. function validateAminoAcids($value) {
  15. return $value >= 100;
  16. }
  17. function validate($humicAcid, $nitrogen, $phosphorus, $potassium, $iron, $zinc, $boron, $copper, $manganese, $molybdenum, $aminoAcids) {
  18. $isValid = true;
  19. if (!validateHumicAcid($humicAcid)) {
  20. $isValid = false;
  21. // 输出错误提示
  22. }
  23. if (!validateMacroElements($nitrogen, $phosphorus, $potassium)) {
  24. $isValid = false;
  25. // 输出错误提示
  26. }
  27. if (!validateTraceElements($iron, $zinc, $boron, $copper, $manganese, $molybdenum)) {
  28. $isValid = false;
  29. // 输出错误提示
  30. }
  31. if (!validateAminoAcids($aminoAcids)) {
  32. $isValid = false;
  33. // 输出错误提示
  34. }
  35. return $isValid;
  36. }

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

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

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

可以看到

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

ChatGPT回答1.3版本

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

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

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

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

  1. <?php
  2. namespace AppValidators;
  3. use IlluminateContractsValidationValidator;
  4. abstract class Validatable implements Validator
  5. {
  6. protected $next;
  7. public function setNext(Validatable $next)
  8. {
  9. $this->next = $next;
  10. return $next;
  11. }
  12. public function validate($attribute, $value, $parameters = [], $validator = null)
  13. {
  14. if ($this->condition($value)) {
  15. return true;
  16. } elseif ($this->next) {
  17. return $this->next->validate($attribute, $value, $parameters, $validator);
  18. } else {
  19. return false;
  20. }
  21. }
  22. abstract protected function condition($value);
  23. }
  24. class HumicAcidValidator extends Validatable
  25. {
  26. protected function condition($value)
  27. {
  28. return $value >= 30;
  29. }
  30. }
  31. class NitrogenValidator extends Validatable
  32. {
  33. protected function condition($value)
  34. {
  35. return $value >= 70;
  36. }
  37. }
  38. class PhosphorusValidator extends Validatable
  39. {
  40. protected function condition($value)
  41. {
  42. return $value >= 70;
  43. }
  44. }
  45. class PotassiumValidator extends Validatable
  46. {
  47. protected function condition($value)
  48. {
  49. return $value >= 60;
  50. }
  51. }
  52. class ValidatorChain implements Validator
  53. {
  54. protected $chain;
  55. public function __construct()
  56. {
  57. $this->chain = new HumicAcidValidator();
  58. $this->chain->setNext(new NitrogenValidator())
  59. ->setNext(new PhosphorusValidator())
  60. ->setNext(new PotassiumValidator());
  61. }
  62. public function validate($attribute, $value, $parameters = [], $validator = null)
  63. {
  64. return $this->chain->validate($attribute, $value, $parameters, $validator);
  65. }
  66. }

以上就是ChatGPT对普通程序员的影响大吗的详细内容,更多关于ChatGPT对普通程序员的影响大吗的资料请关注九品源码其它相关文章!