Rumah  >  Artikel  >  rangka kerja php  >  Contoh membuktikan bahawa ChatGPT mempunyai impak yang besar kepada pengaturcara biasa!

Contoh membuktikan bahawa ChatGPT mempunyai impak yang besar kepada pengaturcara biasa!

藏色散人
藏色散人ke hadapan
2023-03-17 15:52:451392semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang ChatGPT terutamanya bercakap tentang cara saya menggunakan contoh untuk membuktikan kesan atau bantuan ChatGPT kepada kami pengaturcara biasa? Rakan-rakan yang berminat boleh lihat di bawah ini semoga bermanfaat untuk semua.

Saya baru sahaja melihat soalan dalam komuniti, tertanya-tanya bagaimana untuk menulis logik penghakiman berikut dengan elegan:
( Ia dapat dilihat bahawa terdapat banyak logik penghakiman dan tidak tidak perlu terperinci. dimuat naik di Internet.Jadi saya menghantar soalan asal kepada

腐植酸含量 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,高于则有错误提示)
dan mendapat jawapan berikut:

(Memandangkan rangkaian saya tidak begitu stabil, jawapan yang saya dapat sering mengatakan bahawa rangkaian telah diputuskan sambungan separuh jalan, jadi saya cuma Lulus beberapa contoh)ChatGPT
Jawapan ChatGPT versi 1.1ChatGPTDalam rangka kerja Laravel, anda boleh menggunakan pengesah borang untuk mengesahkan syarat. Langkah pelaksanaan khusus Seperti berikut:

Buat peraturan pengesahan tersuai

Dalam rangka kerja Laravel, anda boleh menggunakan perintah

untuk mencipta kelas Peraturan peraturan pengesahan tersuai. Kelas peraturan pengesahan tersuai ini perlu melaksanakan antara muka
    dan menulis logik peraturan pengesahan di dalamnya.
  • Contohnya, anda boleh mencipta kelas peraturan pengesahan tersuai bernama

    untuk mengesahkan syarat baja:

Dalam kelas

, anda boleh melaksanakan kaedah php artisan make:rule untuk berbuat demikian Pengesahan, jika pengesahan berjaya, kembalikan IlluminateContractsValidationRule, jika tidak, kembalikan
: FertilizerRule

$ php artisan make:rule FertilizerRule

FertilizerRuleTulis logik pengesahan passestruefalse

dalam
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.';
    }
}
Di dalam kelas, anda boleh menulis logik pengesahan untuk syarat baja mengikut kehendak soalan. Berikut ialah contoh:
  • Nampaknya terdapat perbezaan antara keanggunan yang diperlukan oleh topik, jadi saya terus bertanya

FertilizerRule

saya: Rasanya tidak begitu elegan Terdapat terlalu banyak jika digunakan dan ia tidak jelas dan jelas. 🎜>
<?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 ||
    //...代码不完整
Ya Ya, kod ini memang mempunyai banyak pernyataan if, menjadikan kod sukar dibaca dan diselenggara. Saya akan mencadangkan memecahkan kod ini kepada pelbagai fungsi, masing-masing bertanggungjawab untuk mengendalikan hanya satu keadaan tertentu. Ini menjadikan kod lebih jelas dan lebih mudah dibaca dan diselenggara.
Berikut ialah pengoptimuman yang mungkin:

Kini, kami telah memecahkan logik pengesahan kepada empat fungsi bebas, masing-masing memfokuskan pada pengendalian keadaan tertentu. Ini menjadikan kod lebih ringkas dan lebih mudah difahami.

Akhir sekali, kami menggabungkan fungsi ini dan menggunakannya dalam fungsi pengesahan untuk mengesahkan nilai input. Jika input tidak sah, false dikembalikan dan mesej ralat dikeluarkan. Jika tidak, kembali benar. Perlu diambil perhatian bahawa mesej ralat di sini ditandakan dengan ulasan dan sebenarnya harus dikeluarkan melalui mekanisme pengendalian ralat yang disediakan oleh rangka kerja Laravel.

Anda boleh melihatnya

Menurut soalan saya, saya menukar cara menggunakan fungsi untuk menyelesaikan masalah ini

Saya akan terus bertanya:

saya : Rasanya masih tidak begitu elegan, sila gunakan rangka kerja laravel dan gunakan corak reka bentuk rantai tanggungjawab untuk mereka bentuk permintaan ini
 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;
}

Jawapan ChatGPT versi 1.3

Baiklah, izinkan saya menunjukkan kepada anda cara mereka bentuk keperluan ini menggunakan rangka kerja Laravel dan corak reka bentuk Rantaian Tanggungjawab.

Pertama, kita perlu mentakrifkan kelas pengesah untuk mengesahkan sama ada setiap syarat dipenuhi. Kelas ini boleh melaksanakan antara muka IlluminateContractsValidationValidator dalam rangka kerja Laravel, supaya ia boleh disepadukan dengan mudah dengan komponen validator terbina dalam Laravel. ChatGPTSeterusnya, kita boleh mentakrifkan kelas asas abstrak Boleh Sah, yang mentakrifkan kaedah abstrak mengesahkan untuk mengesahkan sama ada nilai input memenuhi syarat yang ditentukan. Kita boleh mentakrifkan kelas pengesah tertentu berdasarkan setiap syarat Kelas ini mewarisi daripada Boleh Sah dan melaksanakan kaedah pengesahan untuk pengesahan khusus.
Akhir sekali, kita boleh menggunakan corak rantaian tanggungjawab untuk mengatur kelas pengesah ini supaya mereka mengesahkan nilai input mengikut turutan. Setiap kelas validator boleh menetapkan atribut seterusnya yang memegang contoh kelas validator seterusnya. Dalam kaedah pengesahan, jika pengesah semasa gagal untuk mengesahkan, kaedah pengesahan pengesah seterusnya akan dipanggil, dan seterusnya, sehingga semua pengesah telah disahkan atau seorang pengesah gagal.
Berikut ialah kod sampel untuk mengesahkan dua syarat kandungan asid humik dan kandungan makronutrien:

Ringkasan

Ya saya nampak bahawa


memberi saya jawapan yang agak sesuai untuk soalan saya

Walaupun kod ini tidak boleh digunakan secara langsung pada projek sebenar, ia juga memberi kami beberapa idea Cara melaksanakan

Tiga versi jawapan dalam contoh di atas Seorang pemula seperti saya mungkin hanya boleh memikirkan dua cara pertama untuk menyelesaikannya

ChatGPTIa sama dengan memberi saya beberapa kaedah dan idea baharu untuk menyelesaikan masalah, atau kaedah dan idea yang saya tidak tahu

Jika saya tidak mempunyai idea untuk fungsi tertentu pada masa hadapan, mengapa tidak Mari kita tanyaChatGPT~

Kajian yang disyorkan: "tutorial video laravel"

Atas ialah kandungan terperinci Contoh membuktikan bahawa ChatGPT mempunyai impak yang besar kepada pengaturcara biasa!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam