Итак, мы возвращаемся в глубины (правда, на данный момент это все еще поверхностный конец, но вы поняли). Я неправильно назвал предыдущий пост, который на самом деле должен был называться Часть 4а: Условные операторы и циклы — оператор if-else (с тех пор я исправил это).

Во всяком случае, это также должно объяснить (длинный) заголовок этогопоста, который начинается с утверждения switch, которое позволяет вам проверить, имеет ли переменная один из список из нескольких значений. Каждый элемент в этом списке называется кейсом. Другими словами, в случае, если переменная равна такому-то значению из списка значений, сделайте это.

Звучит достаточно просто, но я думаю, что то, как это было представлено в приложении SoloLearn, поначалу меня смутило. Вот что было показано:

int num = 3;
switch (num) {
     case 1:
          Console.WriteLine(“one”);
          break;
     case 2:
          Console.WriteLine(“two”);
          break;
     case 3:
          Console.WriteLine(“three”);
          break;
}

В результате выполнения этого кода на экран выводится слово «три». Что меня здесь смутило, так это тот факт, что 1, 2 и 3 пишутся после слова case БЫЛИ ПРОВЕРЯЛИСЬ РЕАЛЬНЫЕ ЗНАЧЕНИЯ! Я прочитал их как первый случай, второй случай и третий случай.

Это предположение было основано на том факте, что вокруг числа нет ничего (например, скобок или кавычек). Как оказалось (и немного почитав на сайте C# Tutorial), для целочисленных значений вам не нужно ничего окружать. С другой стороны, значения string следует заключать в кавычки, как в следующем коде:

string name = “Scott”;
switch(name) {
     case “Mike”:
          Console.WriteLine(“Hi Mike”);
          break;
     case “Scott”:
          Console.WriteLine(“Hi Scott”);
          break;
     case “Jim”:
          Console.WriteLine(“Hi Jim”);
          break;
}

В результате выполнения этого кода на экране появится надпись «Привет, Скотт». Вы также заметите оператор break . Этот оператор завершает оператор switch. Без оператора break код просто продолжал бы оценивать каждое значение case.

Также стоит упомянуть (как указано в том же объяснении на сайте C# Tutorial), что если бы операторы switch и case были частью function, вы можете использовать оператор return вместо оператора break (подробнее об операторе return в следующем посте). ).

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

     default:
          Console.WriteLine(“The default case”);
          break;

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

Примером кода может быть следующее:

int num = 1;
while(num < 6) {
     Console.WriteLine(num);
     num++;
}

Выполнение этого кода приведет к тому, что числа от 1 до 5 будут выведены на экран, каждое в отдельной строке, и вот почему:

First, a variable called num is created, has it’s data value set to be an integer, and it’s value set to 1.
Next, the code asks, “While the value of the variable is less than 6...
     ...print the value of num, which, at this point, is 1, to the screen.
Then, increment the current value of num, which is 1, by 1 (which brings the new value of num to 2).
     Remember, num++ really means num = num + 1, or, in this case, num = 1 + 1, which means num now equals 2.
Next, we jump back up to the top of the while loop and see if the statement num < 6 is still true. At this point, since num is equal to 2, it is still less than 6. Therefore...
     ...print the value of num, which, at this point is 2, to the screen.
Then, increment the current value of num, which is 2, by 1 (which brings the new value of num to 3).

После этого цикл while запускается снова со значением num равным 3, поскольку 3 меньше 6. . После этого он снова пройдет через него со значением num как 4, а затем 5, выводя каждое число на экран, каждый в отдельной строке, а затем увеличивая значение num на 1.

Наконец, когда значение num увеличивается до 6, и мы возвращаемся к началу цикла while, он оценивает, соответствует ли значение num меньше, чем 6, и в этом случае считает его false, поскольку 6 равно не менее 6. В результате он вырывается из кода и либо программа завершается, либо, если есть дополнительный код, продолжается дальше.

В Часть 4а мы говорили об операторах отношения. Есть еще один вид операций, который называется составные арифметические операторы. Где num++ переводится как num = num + 1, num+=2 — как num = num + 2. Если бы мы использовали это в приведенном выше коде (вместо num++):

  • значение 1 будет напечатано на экране,
  • увеличить на 2 до значения 3,
  • вывести значение 3 на экран,
  • увеличить еще на 2 до значения 5,
  • вывести значение 5 на экран,
  • увеличить еще на 2 до значения 7,
  • но на этот раз, когда он оценивает, меньше ли значение num, чем 6, в этом случае он обнаружит, что оно false, потому что 7 не меньше 6.

Чтобы закрыть разделы while цикла, приложение SoloLearn вводит еще одну эффективность, которая значительно сокращает код до следующего:

int num = 0
while(++num < 6)
     Console.WriteLine(num);

В руководстве говорится, что запуск этого кода будет иметь тот же результат: вывод на экран от 1 до 5, каждого в отдельной строке. Меня это тоже немного смутило, потому что мой взгляд немедленно метнулся к новому условиюдля оценки в первой строке while (++num ‹ 6). Если бы все остальное было таким же, разве это не означало бы, что он будет печатать от 2 до 5, каждый на их собственная линия, на экран? Ну да, за исключением того, что эта запись не единственная, что изменилось в приведенном выше коде:

  • В первойверсии приведенного выше кода после создания переменной num и установки для ее типа данных значения integer она установлено значение 1.
  • Однако в этом измененном коде для переменной num задано значение 0. Это означает, что когда он увеличивается на 1, до он оценивается на предмет того, меньше 6 или нет. , переменная num теперь имеет значение 1.

Ах ха! Так что не проблема с туториалом и не проблема с кодом. Это была проблема со мной, и мой любопытный (или ленивый, в зависимости от того, как вы на это смотрите) ум заставлял мои глаза обращать внимание на самые вопиющие изменения по сравнению с тем, что я видел.

Это подводит нас к концу цикла while. В следующем посте мы поговорим о цикле for, который выполняет набор операторов определенное количество раз.

Как всегда, пожалуйста, не стесняйтесь исправлять или добавлять все, что я написал.

Кроме того, вот ссылка на предыдущую запись (теперь правильно названную) Изучение кода — Часть 4а: Условные операторы и циклы — Оператор if-else.