Как сделать мой код чище в этом случае (переключить случай / если еще)

1

Я разрабатываю небольшую веб-игру с использованием PHP.
В игре есть несколько кнопок, которые будут запрашивать ajax при щелчке игрока.

Когда мне нужно делать разные определения на каждой кнопке, я записываю следующий код...

    if ($button != 'A') {
        if ($button == 'B') {
            if (!$this->functionB()) {
                return $this->returnJson(<some message>);
            }
        } elseif ($button == 'C') {
            if (!$this->functionC()) {
                return $this->returnJson(<some message>);
            }
        } else {  // other buttons go here
            if (!$this->myFunction($button)) {
                return $this->returnJson(<some message>);
            }
        }
    }

    // other logic...

    return $this->returnJson(<success message>);

Когда игрок нажимает кнопку A, он абсолютно получает сообщение об успешном завершении.
Когда игрок нажимает кнопку B, он получает сообщение об ошибке, если он не передает определение через функцию B(). Если он пройдет, он получит сообщение о успехе. Итак, нажмите кнопку C.
Когда игрок нажимает другие кнопки (около 10 кнопок), определение будет выполняться функцией myFunction().

Но я думаю, что код не изящный, поскольку существует три уровня инструкции if-else. Поэтому я пытаюсь изменить его на оператор switch-case.

    switch ($button) {
        case ('A'):
            break;
        case ('B') {
            if (!$this->functionB()) {
                return $this->returnJson(<some message>);
            }
            break;
        case ('C') {
            if (!$this->functionC()) {
                return $this->returnJson(<some message>);
            }
            break;
        default: // other buttons go here
            if (!$this->myFunction($button)) {
                return $this->returnJson(<some message>);
            }
            break;
        }
    }

    // other logic...

    return $this->returnJson(<success message>);

Я все еще не удовлетворен этим, потому что есть оператор if в инструкции switch.

Как сделать мой код чище в этом случае?

Я новичок в программировании и действительно хочу создать хорошую основу для моего стиля кодирования. Надеюсь, вы можете дать мое предложение. Большое спасибо!

  • 0
    может быть полезно следующее programmers.stackexchange.com/questions/205803/…
  • 0
    Вы можете использовать несколько и завершить ifs ... но попробуйте унифицировать использование "! =" или "==" ... Я предпочитаю использовать только "==" ... и вы можете сохранить результат в var, и только устанавливает для каждого if, и возвращает только время в конце
Теги:
coding-style

2 ответа

0

Вы можете использовать шаблон locator-esque service: при запуске приложения вы загрузите функции в коллекцию ключей/значений, при этом ключ будет именем кнопки, а функция будет значением. Когда придет звонок, вы сделаете что-то вроде:

var handler = collection[ incomingValue ];

handler.Invoke();

(Я разработчик С#, поэтому переведите его в PHP!) D)

0

Лично оператор case, который вы показали ниже, выглядит читаемым и является функциональным. Я нашел по опыту, что загадочный, определенно, не способ, даже если у вас есть несколько повторяющихся строк. Однако вы даже не повторяете строк. Если бы вы попытались отделить функции, это выглядело бы излишним, если бы функции были в функциях.

Я вижу одну вещь, вместо того, чтобы возвращаться изнутри, поток программы должен обычно следовать до конца функции, иначе вы получите недостижимый код или труднодоступные ситуации. Ваш код выше, например, я думаю, вы, возможно, случайно сделали это, поэтому я надеюсь, что это поможет с моей точки зрения.

Так, например, вместо того, чтобы идти:

return myFunction($param);

Использовать это:

$returnVal=myFunction($param);

Затем, в конце, имейте поток: return $ returnVal;

Имеют смысл?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню