Kotlin: Композиция операций

А что, если понадобится вычислить такое выражение: 3 + 5 - 2? Именно так мы и запишем:

println(3 + 5 - 2) // 3 + 5 - 2 => 8 - 2 => 6

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

Или другой пример:

println(2 * 4 * 5 * 10) // 2 * 4 * 5 * 10 => 8 * 5 * 10 => 40 * 10 => 400

Как видно, операции можно соединять друг с другом, получая возможность вычислять все более сложные составные выражения. Чтобы представить себе то, как происходят вычисления внутри интерпретатора, давайте разберем пример: 2 * 4 * 5 * 10.

  1. Сначала вычисляется 2 * 4 и получается выражение 8 * 5 * 10.
  2. Затем 8 * 5. В итоге имеем 40 * 10.
  3. В конце концов происходит последнее умножение, и получается результат 400.

Операции можно соединять друг с другом, получая возможность вычислять все более сложные составные выражения.

Задание

Реализуйте программу, которая вычисляет значение выражения 8 / 2 + 5 - -3 / 2. Не вычисляйте ничего самостоятельно, ваша программа должна производить все вычисления сама.

10

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

Также обратите внимание на то, что в Kotlin по умолчанию используется целочисленное деление, 3 / 2 будет 1.

Как с вами связаться? 😶

Команда проекта находится в телеграм-сообществе по ссылке https://ttttt.me/HexletLearningBot. Там можно задать любой вопрос и повлиять на проект

Упражнение не проходит проверку — что делать? 😶

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "Обсуждение". Как правильно задать вопрос:

В моей среде код работает, а здесь нет 🤨

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя 🤔

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно 🙄

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

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются

Привет! Я Тота и моя задача помочь в обучении. Чтобы активировать меня, нужно зарегистрироваться или залогиниться, если у вас уже есть аккаунт

Loading...

Ваше упражнение проверяется по этим тестам

1import static hexlet.io.TestUtils.getStandartOutput;
2import static org.assertj.core.api.Assertions.assertThat;
3
4class Test {
5    public static void main(final String[] args) {
6        final String expected = "10";
7
8        MainKt.main();
9
10        final String actual = getStandartOutput(() -> MainKt.main()).trim();
11
12        assertThat(actual).isEqualTo(expected);
13    }
14}
15

Решение учителя откроется через:

20:00
waiting_clock