Урок C# № 6: «Принимаем решение. Часть 1: операторы if, else»


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

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

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

Допустим, ваш метод возвращает какое-то условие. Например, вы пишете класс Medical, который выписывает пациенту то или иное лекарство в зависимости от многих параметров, например веса.  Естественно, что вес у всех разный, а это значит, что доза лекарства будет разной. В этом случае нам и пригодится выбор. Давайте рассмотрим этот пример.

Создайте Консольный проект и назовите его Lesson6.

Пока мы еще не рассматривали с вами аспекты работы с классами, поэтому поместим наш класс Medical в тот же файл, где будет главный класс с точкой входа в программу.  Однако знайте на будущее –так делать не стоит. Классы лучше всегда помещать в отдельный файл, благо Visual C# или Sharp Developer позволяет сделать это всего двумя щелчками мышки.

Перед class Program напишем наш класс Medical.  В нашем случае этот класс будет делать только одно действие –возвращать норму потребления лекарства. Поэтому код будет очень маленьким. Фактически, это лучше было бы сделать в коде, однако я хочу постепенно приучать вас к объектно-ориентированному мышлению. А оно здесь таково – есть сущность (некое лечение пациента), а значит, что нужно использовать класс для описания этой сущности.  И несмотря на то, что сейчас код будет избыточным, в последствии мы выиграем от такого подхода (представьте себе тот факт, что объект очень скоро сможет ставить диагноз, выписывать рецепты, советовать, как вести себя дальше).  В общем, классы крайне полезная штука и не нужно их бояться.

Итак, наш класс будет иметь всего один (для этого урока более чем достаточно) метод, возвращающий  норму потребления лекарства в зависимости от веса.  Чтобы не загружать лишний раз вам мозг, сделаем данный метод статическим (метод класса, если быть точным). Кстати, здесь я также нарушил все, что можно. Во-первых, у меня нет здесь атрибутов класса (переменных), кроме того, я пишу в стиле C++, имея в виду метод getter, хотя должен использовать свойства (property). Но пока вы к этому не готовы.

Мой класс выглядит таким образом:

class Medical
	{
		public static string getDozaLekarstva (int ves)
		{
			if (ves>=60) return "Вам нужно принимать по 2 таблетки витамина";
			else
			return "Ваша норма -одна таблетка";
		}
		}

В данном участке кода нас пока интересует лишь конструкция if… else. Это как раз и обозначает условие.  Мы передаем программе вес и проверяем его на условие. Если он больше 60 килограммов, то пишем, что нужно принимать по 2 таблетки, в ином случае достаточно и одной. Полный код выглядит так:

using System;

namespace Lesson5

{
	class Medical
	{
		public static string getDozaLekarstva (int ves)
		{
			if (ves>=60) return "Вам нужно принимать по 2 таблетки витамина";
			else
			return "Ваша норма -одна таблетка";
		}
		}
	class Program
	{
		public static void Main(string[] args)
		{

			Console.WriteLine(Medical.getDozaLekarstva(80));
			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
	}
}

Скомпилируйте и посмотрите на результат. Кстати, обратите внимание на вызов метода getDozaLekarstva (). Во-первых,  он вызывается после имени класса (наподобие WriteLine у класса Console), а во-вторых принимает параметр, который и будет весом пациента, от которого будет плясать наш выбор. Пока можете на это не обращать внимание. Единственное, что прошу вас пока поэкспериментировать с передаваемым методу весом.

Итак, выбор в C# осуществляется конструкцией if… else.  Выглядит это так:

if (условие)

            Действие;

else

            Действие;

Такая конструкция применялась в моем примере. Однако обратите внимание, что не всегда действите бывает одно после if или else. Если их несколько, то нужно заключать их в операторные скобки {}.

if (условие)

 

{Действие 1;

Действие 2;

}

else

Действие

If на самом деле возвращает всего два значения – истину или ложь. Если ваше условие истина, то выполняется указанное вами действие1, если же нет, то –действие 2.

В качестве условия могут выступать следующие операторы:

== Сравнение
> больше
< меньше
>= Больше или равно
<= Меньше или равно
!= Не равно
! Логическое не (отрицание)

Здесь может возникнуть вопрос только по последнему оператору. Это  логическое  отрицание. Лучше всего показать вам это на примере:


bool  summer=true;

if (!summer) Console.WriteLine (“А лета то и нет!”);

Думаю, вы поняли. Кстати, обратили внимание на то, что в приведенном примере нет else? Это не ошибка и не мой склероз – if как раз может так делать, когда нам нужно проверить всего одно какое-то значение, у которого просто логически нет альтернативного варианта в виде else.

Ну и напоследок по этому уроку  — if может быть вложенным, равно как и else. Причем в случае с последним организуется подобие множественного выбора (но лучше использовать для этого switch), о чем поговорим в следующем уроке.

Пример на псевдокоде:

if (условие) Действие1;

else if (условие2) Действие2;

else Действие3;

Видите, все просто. Единственное, что  для полного закрепления урока нужна практика. По упражняйтесь сами или подождите Практикума по C# через несколько уроков.

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

Еще один важный момент —  условий может быть несколько. Например, нам нужно будет сравнивать на соответствие два условия одновременно или же нас удовлетворит всего одно. Учтите, что таких условий может вообще несколько, а не два. В этом случае нам пригодятся операторы или (||) и (&&). Например:


int a=2, b=5;

if ((a>1) && (b<6)) Console.WriteLine (“Диапазон правильный”); // если а> 5 и b<6

Здесь проверяется на соответствие оба значения. Если нам нужно только одно, то я бы вместо && поставил бы ||.

На этом урок закончен. В следующем мы рассмотрим уже оператор switch и опять затронем ООП.

<<Предыдущий урок                                                Следующий урок>>

Яндекс.Метрика