На базовом уровне компьютеры оперируют только числами. Для сложения двух чисел в математике мы пишем, например, 3 + 4
. В программировании — то же самое. Вот программа, складывающая два числа:
<?php
// Не забываем точку с запятой в конце, так как каждая строчка в коде — инструкция.
3 + 4;
Помните про комментарии? Выше в коде после символов //
— комментарий от учителя.
Арифметика в программировании практически не отличается от школьной арифметики.
Инструкция 3 + 4;
заставит интерпретатор сложить числа и узнать результат. Эта программа будет работать, но в ней нет смысла, потому что по сути мы не даём команду интерпретатору, мы просто говорим ему «смотри, сумма трёх и четырёх». В реальной работе недостаточно сообщать интерпретатору о математическом выражении. Например, при создании интернет-магазина недостаточно просить интерпретатор посчитать стоимость товаров в корзине, а нужно просить посчитать стоимость И показать цену покупателю.
Нам нужно попросить интерпретатор сложить 3 + 4
И дать команду сделать что-то с результатом. Например, вывести его на экран:
<?php
// Снова не забываем точку с запятой в конце строчки
print_r(3 + 4); // => 7
Кроме сложения доступны следующие операции:
*
— умножение/
— деление-
— вычитание%
— остаток от деления**
— возведение в степеньЗнак операции, такой как +
, называют оператором. Операторы выполняют операции над определенными значениями, которые называются операндами. Сами операторы обычно представлены одним или несколькими символами, реже — словом. Подавляющее большинство операторов соответствуют математическим операциям.
<?php
print_r(8 + 2);
В этом примере +
это оператор, а числа 8
и 2
— это операнды.
Операции, которые требуют наличия двух операндов, называются бинарными. В случае сложения у нас есть два операнда: один слева от знака +
, другой — справа.Если пропустить хотя бы один операнд, например, так 3 + ;
, то программа завершится с синтаксической ошибкой.
Операции бывают не только бинарными, но и унарными (с одним операндом), и даже тернарными (с тремя операндами)! Причём операторы могут выглядеть одинаково, но обозначать разные операции. Символы +
и -
используются не только как операторы. Когда речь идёт про отрицательные числа, то знак минуса становится частью числа:
<?php
print_r(-3); // => -3
Выше пример применения унарной операции к числу 3
. Оператор минус перед тройкой говорит интерпретатору взять число 3
и найти противоположное, то есть -3
. Это немного может сбить с толку, потому что -3
— это одновременно и число само по себе, и оператор с операндом, но у языков программирования такая структура.
<?php
// То же самое, что и 4 - 3
print_r(4 + -3); // => 1
Тоже самое касается и плюса:
<?php
print_r(+3); // => 3
print_r(1 + +3); // => 4
Мы все помним со школы: «от перемены мест слагаемых сумма не меняется». Это один из базовых и интуитивно понятных законов арифметики, он называется коммутативным законом. Бинарная операция считается коммутативной, если, поменяв местами операнды, вы получаете тот же самый результат. Очевидно, что сложение — коммутативная операция: 3 + 2 = 2 + 3.
А вот является ли коммутативной операция вычитания? Конечно, нет: 2 - 3 ≠ 3 - 2. В программировании этот закон работает точно так же, как в арифметике. Более того, большинство операций, с которыми мы будем сталкиваться в реальной жизни, не являются коммутативными. Отсюда вывод: всегда обращайте внимание на порядок того, с чем работаете
<?php
print_r(2 * 4 * 5 * 10); // 2 * 4 * 5 * 10 = 8 * 5 * 10 = 40 * 10 => 400
Операции можно соединять друг с другом, получая возможность вычислять все более сложные составные выражения. Такое свойство операций называется композицией. Композиция арифметических операций в программировании аналогична композиции из школьной программы. Как вы узнаете дальше, композиция операций распространяется на вообще все операции, а не только арифметические.
Чтобы представить себе то, как происходят вычисления внутри интерпретатора, давайте разберем пример: 2 * 4 * 5 * 10
.
2 * 4
и получается выражение 8 * 5 * 10
.8 * 5
. В итоге имеем 40 * 10
.400
.А что, если понадобится вычислить такое выражение: 2 + 2 * 2
? Именно так мы и запишем:
<?php
print_r(2 + 2 * 2); // => 6
В школьной математике мы изучали понятие «приоритет операции». Приоритет определяет то, в какой последовательности должны выполняться операции. Обратите внимание, что интерпретатор производит арифметические вычисления в правильном порядке: сначала деление и умножение, потом сложение и вычитание, а приоритет возведения в степень выше всех остальных арифметических операций: 2 ** 3 * 2
вычислится в 16
.
Но нередко вычисления должны происходить в порядке, отличном от стандартного приоритета. В сложных ситуациях приоритет можно (и нужно) задавать круглыми скобками, точно так же, как в школе, например: (2 + 2) * 2
. Скобки можно ставить вокруг любой операции. Они могут вкладываться друг в друга сколько угодно раз. Вот пара примеров:
<?php
print_r(3 ** (4 - 2)); // => 9
print_r(7 * 3 + (4 / 2) - (8 + (2 - 1))); // => 14
Главное при этом соблюдать парность, то есть закрывать скобки в правильном порядке. Это, кстати, часто становится причиной ошибок не только у новичков, но и у опытных программистов. Для удобства ставьте сразу открывающую и закрывающую скобку, а потом пишите внутреннюю часть. Редактор на нашем сайте (и большинство других редакторов кода) делают это автоматически: вы пишете (
, а редактор сразу добавляет )
. Это касается и других парных символов, например, кавычек. О них — в будущих уроках.
Иногда выражение сложно воспринимать визуально. Тогда можно расставить скобки, не повлияв на приоритет. Запомните: код пишется для людей, потому что код будут читать люди, а машины будут только исполнять его. Для машин код — или корректный, или не корректный, для них нет «более» понятного или «менее» понятного кода. Явная расстановка приоритетов упрощает чтение вашего кода другими разработчиками.
Вам ответят команда поддержки Хекслета или другие студенты.
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт
Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу