Мы хотим вас! Чтобы принять решение.

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

Зачем мне вообще изучать оператор «если»?

Короткий ответ: решать дилеммы и выполнять задачи на основе решения в рамках программы. Как всегда, «почему» можно объяснить на примере.

Давайте продолжим наш пример с чатом, который приветствует людей по имени, когда они входят, и ограничивает количество гостей чуть менее 5. Давайте добавим к этому примеру еще одно интересное условие, скажем, запретить вход в комнату всем, кто младше 18 лет?

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

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

К счастью, у нас есть это чудесное, но мощное существо.

Введение — оператор «Если…иначе…»

Эту управляющую структуру очень просто понять, так как само название уже говорит само за себя.

Мы понимаем это таким образом, что «если» что-то происходит, мы выполняем какие-то задачи, а иначе», то есть если чего-то не произошло, мы выполняем некоторые другие задачи.

Чтобы лучше объяснить эту концепцию, давайте свяжем ее с нашим примером. Затем у нас будет «если» гость моложе 18 лет, я покажу сообщение «Вы не достигли совершеннолетия». Если гость не моложе 18 лет (иначе), я бы сделал обычное дело, поприветствовав гостя и обновив количество гостей.

Довольно просто, правда?

Как использовать оператор «Если…иначе…»

Давайте переведем то, о чем мы говорили, в коды и посмотрим, как мы реализуем наше намерение в программе.

<?php
    $counter=1;
    for($counter; $counter<=5;$counter++)
    {
        $age = readline('Hi, how old are you? ');
        if($age<18){
            echo 'I cannot let you in since you are underage.';
        }else{
            echo 'Good morning master '.readline('What is your name: ');
         }
    }
?>

Опять же, мы используем цикл for, чтобы контролировать количество повторений до 5.

Мы объявляем переменную с именем age для хранения введенного возраста гостя.

Мы используем ключевое слово «если», чтобы поручить компьютеру выполнить процесс принятия решения.

В скобках указано условие, которое мы хотим, чтобы компьютер исследовал и на основании которого принял решение. В нашем случае это значение переменной «возраст» меньше 18 лет.

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

Когда он помещается под ключевое слово «если», это означает, что это единственная группа кодов, которая выполняется, когда проверяемое условие является «истинным», то есть, если гостю меньше 18 лет.

Мы видим, что ключевое слово «else» используется впоследствии, сигнализируя компьютеру о выполнении следующей группы кодов (область действия «else») только тогда, когда проверяемое условие не соответствует действительности, то есть гостю больше 18 лет.

Это было не слишком сложно понять, верно? Компьютер столкнулся с дилеммой: 2 набора задач должны выполняться отдельно в зависимости от того, младше ли гостя 18 лет. Мы решили эту дилемму, используя оператор «if…else…».

Но у нас могут быть проблемы, Хьюстон.

Если вы не заметили, счетчик гостей обновляется независимо от того, что происходит. Счетчик увеличивается на 1, даже если гостю меньше 18 лет.

Это то, что мы называем ошибкой. Это непреднамеренное или неожиданное поведение программы.

Итак, поздравляем, у вас есть первая ошибка!

Исправление проблем

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

  • Мы знаем, что использовали цикл for, и он будет повторять то, что определено в его области видимости, 5 раз.
  • В первый раз, когда цикл выполняет свои коды, предположим, что гость в возрасте 10 лет входит в комнату.
  • Программа сначала попросит ввести возраст, и, конечно же, гость вводит 10
  • Затем значение 10 сохраняется внутри переменной с именем age.
  • Затем мы использовали оператор «if», чтобы проверить, не младше ли он 18 лет.
  • Условие верно, поскольку значение возраста меньше 18 лет.
  • Компьютер выполняет то, что определено в рамках «истинного» состояния, отображая сообщение
  • Компьютер пропускает выполнение того, что определено в рамках условия «иначе», потому что это условие было ложным.
  • Затем компьютер переходит к следующему циклу. Ждать! Не так быстро. Цикл for будет выполнять одну дополнительную задачу в конце каждого цикла, помните? Это будет увеличивать переменную counter на единицу.
  • Но гость несовершеннолетний, мы не должны были увеличивать количество гостей на одного. Это проблема, и действительно наша ошибка.

Мы нашли нашу ошибку. Это связано с тем, что цикл for будет увеличивать счетчик на 1 несмотря ни на что. Давайте посмотрим, как мы можем решить эту проблему ниже.

Исправление нашей ошибки

Из-за природы цикла for, который увеличивает значение счетчика на 1 в конце каждого цикла. Затем мы решаем, что, возможно, цикл for не подходит для нашего скорректированного примера. Но что мы можем использовать, чтобы заменить это?

Цикл нам точно нужен, потому что нужно повторять и запрашивать имена. Нам также нужно увеличить значение счетчика на 1. Хм…. как насчет цикла «пока» снова? Несмотря на это, нет ничего плохого в том, чтобы попытаться использовать это и увидеть результат.

Давайте преобразуем наш текущий пример в цикл «пока». Рассмотрим следующие преобразованные примеры кодов.

<?php
    $counter=1;
    while ($counter<=5)
    {
         $age=readline('Hi, how old are you? ');
         if($age<18){
              echo 'I cannot let you in since you are underage.';
         }else{
              echo 'Good morning master '.readline('What is your name: ');
              $counter++;
         }
     }
?>

Я думаю, что этот подход может быть просто жизнеспособным решением нашей проблемы. Что вы думаете?

Пояснение кода:

Цикл будет работать до тех пор, пока количество гостей меньше или равно 5.

Сначала он спросит возраст гостя

Затем он проверит, не младше ли возраста 18 лет.

Он необновляет счетчик, если возраст меньше 18 лет. Но, наоборот, увеличивает счетчик на 1, если возраст больше или равен 18. Просто потому, что действие по обновлению счетчика гостей определено в рамках «иначе», что является областью условия, срабатывающего, когда возраст больше или равен 18

Потрясающий! Это именно то, что мы хотели для нашего примера. Теперь вы знаете, как отлаживать программу, но самое главное, теперь вы обладаете навыками структурирования своих мыслей и следуя логике, чтобы решить, какой подход вам нужен для реализации вашей программы.

Будьте простыми и короткими

Хочу напоследок коснуться еще одной маленькой детали. Это будет коротко, так что, пожалуйста, потерпите меня.

Помните, как мы хотим, чтобы все было как можно меньше и короче? Мы можем внести небольшую корректировку и достичь этой цели с помощью нашего примера выше.

Оказывается, мы можем отказаться от объявления переменной «возраст» и снова вставить чтение ввода пользователя туда, где используется эта переменная, поскольку значение, возвращаемое пользователем, используется здесь только один раз.

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

<?php
    $counter=1;
    while ($counter<=5)
    {
         If ( 18 > readline('Hi, how old are you? ') ){
              echo 'I cannot let you in since you are underage.';
         }else{
              echo 'Good morning master '.readline('What is your name: ');
              $counter++;
         }
    }
?>

Резюме

  • Мы используем оператор «if…else», потому что у нас есть несколько наборов задач, которые компьютер должен выполнить на основе дилеммы.
  • Мы используем оператор «if…else» еще и потому, что только один из многих наборов задач должен выполняться при выборе решения.
  • Мы определяем нашу дилемму в скобках после ключевого слова «если». Дилемма подобна состоянию, которое предлагает компьютеру сделать выбор.
  • Если проверка условия «истинна», выполняется область действия, определенная в ключевом слове «если».
  • Если проверка условия не является «истинной», выполняется область действия, определенная в ключевом слове «еще». Только одна область может быть выполнена в результате дилеммы.

Надеюсь, я неплохо поработал, показав вам, что такое утверждение «если… иначе…», почему мы приходим к его использованию и как его использовать. В следующей статье мы обсудим некоторые хитрости и особенности этого полезного инструмента.