Сложение, конкатенация, нахождение остатка от деления и остальные ранее рассмотренные операции – все это довольно базовые возможности языков программирования. Математика не ограничена арифметикой, кроме нее есть и множество других разделов со своими операциями, например, геометрия. То же самое касается и строк: их можно переворачивать, менять регистр букв, удалять лишние символы — и это только самое простое. И, наконец, на более высоком уровне есть прикладная логика конкретного приложения. Программы списывают деньги, считают налоги, формируют отчеты. Количество подобных операций бесконечно и индивидуально для каждой программы. И все они должны быть как-то выражены в коде.
Для выражения любой произвольной операции в программировании существует понятие функция. Функции бывают как встроенные в язык, так и добавленные программистом. С одной встроенной функцией мы уже знакомы, это WriteLine()
.
Функции — одна из ключевых конструкций в программировании, без них невозможно сделать практически ничего. Знакомство с ними мы начинаем как можно раньше, так как весь дальнейший материал оперирует функциями по максимуму. Сначала мы научимся пользоваться уже созданными функциями, а уже потом научимся создавать свои собственные.
Здесь нужно сделать небольшую оговорку. В C# невозможно создать обычную функцию, как это позволяет делать большинство других языков. Все функции C# создаются только внутри классов, которые мы пока не разбирали. А функции, которые определены внутри классов принято называть методами. Поэтому в дальнейшем мы будем придерживаться этой терминологии.
Начнем с простых методов для работы над строками. Ниже пример вызова метода ToUpper()
, который переводит все слово в верхний регистр:
"hexlet".ToUpper(); // HEXLET
Методы это действия, которые нужно выполнить над данными, к которым они применяются. В программировании данные у которых есть методы называют объектами. В реальности все чуть сложнее, но пока нам достаточно и такого определения.
Рассмотрим еще несколько примеров с добавлением переменных:
var company = "Hexlet";
var upperCompany = company.ToUpper();
Console.WriteLine(upperCompany); // => "HEXLET"
var lowerCompany = company.ToLower();
Console.WriteLine(lowerCompany); // => "hexlet"
Самое основное в работе с методами – понять принцип возврата значения. Методы почти никогда не выводят данные на экран, они их возвращают. Благодаря этому мы можем разбить нашу программу на кусочки из которых потом составляется что-то сложное. В примерах выше результат вызова каждого метода записывается в переменные. Но это не обязательно, мы можем использовать методы напрямую:
var company = "Hexlet";
Console.WriteLine(company.ToUpper()); // => HEXLET
Постепенно мы начнем знакомиться со все большим количеством встроенных методов в язык. Этих методов много, настолько много, что их невозможно запомнить. Хорошая новость в том, что это и не требуется. Никто не помнит названий методов наизусть. Главное примерно представлять себе что требуется, а дальше в руки подсказки редактора, документация и гугл. Магии не существует, программисты постоянно сидят в документации разбираясь с тем как что работает.
Помимо обычных методов, в C# есть еще особенный тип – свойства. Это тоже методы, но они вызываются без скобочек. Подробнее о них будет рассказано в следующих уроках. Сейчас нам нужно запомнить только одно свойство у строк, которое мы будем использовать в следующих уроках.
var companyLength = "Hexlet".Length;
Console.WriteLine(companyLength); // => 6
Свойство Length
у строки возвращает ее длину. Пока просто запомните как оно вызывается. Потом мы изучим их подробнее и даже сами научимся их создавать.
В коде определена переменная с именем. Используя методы ToUpper()
и ToLower()
у этой переменной определите две новые переменные, чтобы на экран вывелась фраза:
HODOR says: "hodor"
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Ваше упражнение проверяется по этим тестам
1#load "/src/Init.csx"
2#load "/src/RedirectOutput.csx"
3#load "Exercise.csx"
4
5;
6using PowerAssert;
7
8var output = capturedConsoleOutput.ToString().Trim();
9Console.SetOut(originalStdOut);
10Console.Write(capturedConsoleOutput);
11
12PAssert.IsTrue(() => output == "HODOR says: \"hodor\"");
13
Решение учителя откроется через: