داود خانی
4 سال پیش توسط داود خانی مطرح شد
4 پاسخ

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

سلام خسته نباشید چطور می تونم این 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++;
                                            }
                                        }

                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

ثبت پرسش جدید
T.chegini
@t.chegini 4 سال پیش مطرح شد
0

فکر میکنم اگه از 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 4 سال پیش مطرح شد
0

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


داود خانی
تخصص : برنامه نویس لاراول و متخصص سئو...
@davoodkhany 4 سال پیش مطرح شد
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
2

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

راه اول: یه عده میاند این همه 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 ها در الکوئنت شاید بتونه در مرتب کردن این کدها مقداری کمک کنه


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

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