До этого момента наши тестовые программки были просты до идиотизма. Теперь они начнут усложняться. Настоящие программы бывают сложными. Очень сложным. На самом деле самая трудная часть работы программиста - это не написать новую программу, а понять уже написанную, найти в ней ошибки, исправить их или что-то поменять, не сделав новых (!). Понимание программы очень облегчают комментарии - заметки прямо в коде, которые игнорирует компьютер. Они только для высшего разума - людей. Кроме того их часто используют для того, чтобы временно отключить часть программы не удаляя уже написанного кода - так и говорят, закомментировать.
bool boolVar1 = true;
/*
многострочный коментарий
сейчас используется редко из-за встроенных функций Visual Studio
*/
bool boolVar2 = true;
//однострочный комментарий
На практике многострочные комментарии в Visual Studio чаще всего ставятся с использованием специальной функции - у нее есть и кнопка и собственная горячая клавиша
Получаем вот такой код, который можно раскомментировать с помощью соседней кнопки
/if (boolVar1 && boolVar2)
//{
// System.Console.WriteLine("Вернуло true логическое И для true и true");
//}
//if (boolVar1 || boolVar2)
//{
// System.Console.WriteLine("Вернуло true логическое ИЛИ для true и true");
//}
Циклы
Наша программа уже может что-то решать... но как-то убого она это делает, каждый чих надо прописывать вручную. А ведь настоящие роботы славятся своей способностью повторять любые действия неограниченное количество раз не зная усталости и сомнений! Делают они это с помощью циклов - специальных конструкций для программирования повторяющихся действий.
Самый простой цикл просто заставляет компьютер повторять какое-то действие, пока не выполнится какое-то логическое (см. выше!) условие. В C# такой цикл называется while
//считаем до семи
int counter = 1;
while (counter <= 7)
{
System.Console.WriteLine("Значение счетчика: " + counter);
counter++;
}
System.Console.ReadLine();
Обратите внимание: если условие не выполнится никогда, компьютер будет выполнять заданное действие вечно - это называется зацикливанием.
Можете проверить это утверждение закомментировав строку counter++; - программа будет работать бесконечно, так как counter никогда не будет равен 7. Придется прекратить ее работу вручную, закрыв окно.
Делать что-то заданное количество раз приходится так часто, что для этого случая придумали специальный цикл, ведь лень - это двигатель прогресса. Я имею в виду цикл for.
С его помощью даже самый простой цикл из предыдущего примера станет еще проще
//считаем до семи
for (int counter = 1; counter <= 7; counter++)
{
System.Console.WriteLine("Значение счетчика: " + counter);
}
System.Console.ReadLine();
В знаменитой статье Почему программисты не умеют программировать автор приводит следующие данные - большинство выпускников программистских вузов не могут написать очень простую программу - которая выведет на на экран числа от 1 до 100, вместо кратных 3 выведет Fizz, вместо кратных 5 выведет Buzz, вместо кратных и трем и пяти FizzBuzz (это в Америке такая обучающая игра для детей). На самом деле единственная сложность в такой задаче - вспомнить школьное определение кратности. Число кратно 3 если остаток от целочисленного (без учета дробной части) деления этого числа на 3 равен нулю. Осталось выяснить, как вычислить остаток от целочисленного деления. Это делает оператор %.
В итоге получаем совсем простую программу, то ли в Америке так плохо учат, то ли автор статьи преувеличивает, то ли большинству программистов никогда не понадобилось знание того, что такое остаток от целочисленного деления.
for (int counter = 1; counter <= 100; counter++)
{
int reminder3 = counter % 3;
int reminder5 = counter % 5;
if (reminder3 == 0 && reminder5 == 0)
{
System.Console.WriteLine("FizzBuzz");
}
else if (reminder3 == 0)
{
System.Console.WriteLine("Fizz");
}
else if (reminder5 == 0)
{
System.Console.WriteLine("Buzz");
}
else
{
System.Console.WriteLine(counter);
}
}
System.Console.ReadLine();
Опытный программист может заметить, что одно из условий if лишнее и код можно сделать более коротким с использованием простого трюка - если число делится и на 3 и на 5, то можно просто выводить сначала Fizz потом Buzz, автоматически склеивая их в одну строку и не проверяя отдельно на предмет кратности и 3 и 5. Так как все в этом мире имеет свою цену, то более короткий код также будет менее понятным. В данном примере различие невелико, но в промышленном программировании со сложными и большими программами в большинстве случаев важна именно понятность кода.
for (int counter = 1; counter <= 100; counter++)
{
int reminder3 = counter % 3;
int reminder5 = counter % 5;
string result = "";
if (reminder3 == 0)
{
result += "Fizz";
}
if (reminder5 == 0)
{
result += "Buzz";
}
if (reminder3!= 0 && reminder5!= 0)
{
result = counter.ToString();
}
System.Console.WriteLine(result);
}
System.Console.ReadLine();