راکت

بهترین راه برای ساده سازی if های تو در تو

4 پاسخ

سلام خسته نباشید چطور می تونم این if ها رو تعدادشو کمتر کنم : منظورم اینه راهی داره که این کد ها رو ساده تر کنم ؟؟ هر چی پروژه بزرگتر میشه این کدها یکم ساختارشون بدتر میشه ؟؟

if ($result->ffield->faculty->university->country->name == $country)
            {
                if ($langLevel >= $result->iov)
                {

                    if ($money >= $result->ytuimin)
                    {

                        if ($gpabachelor < 14)
                        {

                            if ($this->avg($result->gpa, $result->gpaof) <= 14)
                            {
                                if ((($gre == 0) and ($result->grereq == 0)) or (($gre == 1) and ($result->grereq == 0)) or (($gre == 1) and ($result->grereq == 1)))
                                {
                                    if ((($gmat == 0) and ($result->gmatreq == 0)) or (($gmat == 1) and ($result->gmatreq == 0)) or (($gmat == 1) and ($result->gmatreq == 1)))
                                    {
                                        if (($canadaState == 'no') or (($canadaState == 'yes') and ($result->ffield->faculty->university->state == $state)))
                                        {
                                            $firstStep[] = $result->toArray();
                                            $g = Grade::getGrade($result->grade_id);
                                            $firstStep[$i]['grade'] = $g;
                                            $firstStep[$i]['type'] = 'University';
                                            $i++;
                                        }

                                    }
                                }
                            }
                        }

                        elseif ($gpabachelor >= 14)
                        {

                            if ($this->avg($result->gpa, $result->gpaof) <= $gpabachelor)
                            {
                                if ((($gre == 0) and ($result->grereq == 0)) or (($gre == 1) and ($result->grereq == 0)) or (($gre == 1) and ($result->grereq == 1)))
                                {
                                    if ((($gmat == 0) and ($result->gmatreq == 0)) or (($gmat == 1) and ($result->gmatreq == 0)) or (($gmat == 1) and ($result->gmatreq == 1)))
                                    {
                                        if (($canadaState == 'no') or (($canadaState == 'yes') and ($result->ffield->faculty->university->state == $state)))
                                        {
                                            $firstStep[] = $result->toArray();
                                            $g = Grade::getGrade($result->grade_id);
                                            $firstStep[$i]['grade'] = $g;
                                            $firstStep[$i]['type'] = 'University';
                                            $i++;
                                        }

                                    }
                                }
                            }
                        }
                    }
                }
                elseif ($langLevel < 6.5)
                {
                    if ($money >= $result->ytuimin)
                    {
                        if ($gpabachelor < 14)
                        {
                            if ($this->avg($result->gpa, $result->gpaof) <= 14)
                            {
                                if ((($gre == 0) and ($result->grereq == 0)) or (($gre == 1) and ($result->grereq == 0)) or (($gre == 1) and ($result->grereq == 1)))
                                {
                                    if ((($gmat == 0) and ($result->gmatreq == 0)) or (($gmat == 1) and ($result->gmatreq == 0)) or (($gmat == 1) and ($result->gmatreq == 1)))
                                    {
                                        if (($canadaState == 'no') or (($canadaState == 'yes') and ($result->ffield->faculty->university->state == $state)))
                                        {
                                            if ($result->pathway == 1)
                                            {
                                                $firstStep[] = $result->toArray();
                                                $g = Grade::getGrade($result->grade_id);
                                                $firstStep[$i]['grade'] = $g;
                                                $firstStep[$i]['type'] = 'University';
                                                $i++;
                                            }
                                        }

                                    }
                                }
                            }
                        }
                        elseif ($gpabachelor >= 14)
                        {
                            if ($this->avg($result->gpa, $result->gpaof) <= $gpabachelor)
                            {
                                if ((($gre == 0) and ($result->grereq == 0)) or (($gre == 1) and ($result->grereq == 0)) or (($gre == 1) and ($result->grereq == 1)))
                                {
                                    if ((($gmat == 0) and ($result->gmatreq == 0)) or (($gmat == 1) and ($result->gmatreq == 0)) or (($gmat == 1) and ($result->gmatreq == 1)))
                                    {
                                        if (($canadaState == 'no') or (($canadaState == 'yes') and ($result->ffield->faculty->university->state == $state)))
                                        {
                                            if ($result->pathway == 1)
                                            {
                                                $firstStep[] = $result->toArray();
                                                $g = Grade::getGrade($result->grade_id);
                                                $firstStep[$i]['grade'] = $g;
                                                $firstStep[$i]['type'] = 'University';
                                                $i++;
                                            }
                                        }

                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
ثبت پرسش جدید

پاسخ‌ها

4
T.chegini
T.chegini
@t.chegini

فکر میکنم اگه از when استفاده کنید بتونید کد رو مرتب تر بنویسید.
اینم نمونه:

$query = Author::query();
$query->when(request('filter_by') == 'likes', function ($q) {
    return $q->where('likes', '>', request('likes_amount', 0));
});
$query->when(request('filter_by') == 'date', function ($q) {
    return $q->orderBy('created_at', request('ordering_rule', 'desc'));
});
داود خانی
داود خانی
@davoodkhany

تخصص: برنامه نویس لاراول و متخصص سئو

@t.chegini سلام خسته نباشید خودتون همچین چیزی رو تست کردید ...

شاید پاسخ شما همین‌جا باشد

داود خانی
داود خانی
@davoodkhany

تخصص: برنامه نویس لاراول و متخصص سئو

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

چند تا راه هست.

راه اول: یه عده میاند این همه condition رو میذارند داخل یه متد و متد رو هم توی یه Trait .. که اصطلاحا بهش میگن آشغال ها رو زیر فرش قایم کردن.

راه دوم: (راهی که خودم هم بیشتر می‌پسندم) ساخت یه کلاس جدا (مثلا Filters)‌ برای چک کردن انواع فیلتر هاست.. اگر در تمام متدهاش this رو return کنیم. میتونیم متدهارو به همدیگه Chain کنیم و تمام کاندیشن ها رو در یک خط پیاده کنیم.
این کلاس حتی میتونه از یه کلاس Abstract ار‌ث بری کنه.. و یا حتی بهتر از قوانین یه Interface تبعیت کنه و این طوری میتونی کلاس های مختلفی برای انواع چک کردن ها بوجود بیاری که همه از یه سری قوانین تبعیت میکنند و یه سری عملکردها رو به طور حتم در خودشون دارند..

راه سوم: استفاده از یک متد (که در واقع لینکی هست به کلاس دیگری) داخل مدل مربوط به داده ها. مثلا اگر قرار مواردی رو از مدل User چک کنید که مربوط به رشته اون کاربر میشه... در مدل User یه متد میذارید به نام Field و Instance کلاس رو بهش پاس میدیم :


public function field() {
    return new Field($this);
}

کلاس Field میتونه شبیه زیر باشه:

class Field {
    protected $user;
    public function __construct($user) {
        $this->user = $user;
    }

    public function Country() {
        return $this->user->userRelationShipsWorkHere();
    }
    public function Masters() {}
    ...
}

برای کاندیشن‌های خاص هم میتونی متد های جدید معرفی کنی

راه چهارم: استفاده از Local Scope ها در الکوئنت شاید بتونه در مرتب کردن این کدها مقداری کمک کنه

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام