C#: Конструкция else if
В самой полной версии, конструкция if
содержит не только ветку else
, но и другие условные проверки с помощью else if
. Такой вариант используется при большом количестве проверок, которые взаимоисключают друг друга.
if (/* что-то */)
{
}
else if (/* другая проверка */)
{
}
else if (/* другая проверка */)
{
}
else
{
}
Два момента. Ветка else
может отсутствовать. Количество else if
условий может быть любым, хоть одно, хоть десять.
Напишем для примера расширенный метод определяющий тип предложения. Он распознает три вида предложений:
class App
{
public static string GetTypeOfSentence(string sentence)
{
var sentenceType = "";
if (sentence.EndsWith('?'))
{
sentenceType = "question";
}
else if (sentence.EndsWith('!'))
{
sentenceType = "exclamation";
}
else
{
sentenceType = "general";
}
return "Sentence is " + sentenceType;
}
}
App.GetTypeOfSentence("Who?"); // "Sentence is question"
App.GetTypeOfSentence("No"); // "Sentence is general"
App.GetTypeOfSentence("No!"); // "Sentence is exclamation"
Теперь все условия выстроены в единую конструкцию. else if
— это «если не выполнено предыдущее условие, но выполнено текущее». Получается такая схема:
- если последний символ
?
, то"question"
- иначе, если последний символ
!
, то"exclamation"
- иначе
"general"
Выполнится только один из блоков кода, относящихся ко всей конструкции if
.
Задание
На электронной карте Вестероса, которую реализовал Сэм, союзники Старков отображены зеленым кружком, враги — красным, а нейтральные семьи — серым.
Напишите для Сэма метод WhoIsThisHouseToStarks()
, который принимает на вход фамилию семьи и возвращает одно из трех значений: "friend"
, "enemy"
, "neutral"
.
Правила определения:
- Друзья (
"friend"
): "Karstark", "Tally" - Враги (
"enemy"
): "Lannister", "Frey" - Любые другие семьи считаются нейтральными
Примеры вызова:
App.WhoIsThisHouseToStarks("Karstark"); // "friend"
App.WhoIsThisHouseToStarks("Frey"); // "enemy"
App.WhoIsThisHouseToStarks("Joar"); // "neutral"
App.WhoIsThisHouseToStarks("Ivanov"); // "neutral"
Упражнение не проходит проверку — что делать? 😶
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет 🤨
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя 🤔
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно 🙄
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Определения
else if — способ задать несколько альтернативных условий