PHP: Приоритет операций
Рассмотрим простое выражение:
<?php
print_r(2 + 2 * 2); // => 6Результат равен 6, а не 8. Это объясняется понятием приоритета операций в математике и программировании. Он определяет порядок, в котором выполняются действия:
- Умножение и деление выполняются раньше сложения и вычитания.
- Возведение в степень (**) имеет еще более высокий приоритет.
Приоритет операций (от высокого к низкому):
** возведение в степень
↓
* / % умножение, деление, остаток
↓
+ - сложение, вычитаниеНапример:
<?php
print_r(2 * 2 ** 3); // => 16, потому что сначала 2 ** 3 = 8, затем 8 * 2 = 16Если рядом идут операции с одинаковым приоритетом, они выполняются слева направо:
<?php
print_r(8 / 2 * 3); // => 12, потому что сначала 8 / 2 = 4, затем 4 * 3 = 12Управление порядком действий
Иногда нужно изменить порядок вычислений. Для этого используются круглые скобки. Они позволяют задать, какие действия нужно выполнить в первую очередь:
<?php
print_r((2 + 2) * 2); // => 8Скобки можно ставить вокруг любой части выражения и вкладывать их друг в друга:
<?php
print_r(3 ** (4 - 2)); // => 9
print_r(7 * 3 + (4 / 2) - (8 + (2 - 1))); // => 14Главное правило: всегда закрывайте скобки. Непарные скобки вызывают ошибки: и новички, и опытные программисты иногда забывают про закрывающую скобку.
Пишите скобки сразу парой. Например, вводите () и потом заполняйте внутреннюю часть. Большинство редакторов кода (в том числе наш) автоматически добавляют закрывающую скобку, как только вы пишете открывающую. Это касается и других парных символов, например, кавычек.
Повышаем читаемость
Иногда выражение работает правильно, но выглядит запутанно. В таких случаях скобки можно добавить просто для наглядности: они не изменят результат, но улучшат восприятие.
<?php
// Было
print_r(8 / 2 + 5 - -3 / 2); // => 10.5
// Стало
print_r(((8 / 2) + 5) - (-3 / 2)); // => 10.5Программы пишут люди, и читают их тоже люди. Компьютеру все равно, насколько понятно написан код: достаточно, чтобы он был синтаксически правильным. Для человека понятный и аккуратный код является залогом удобства, особенно при работе в команде или разборе ошибок.
Задание
Вы с 4 друзьями (итого 5 человек) заказали 2 пиццы по 300 рублей и 4 напитка по 50 рублей. Нужно разделить счет поровну.
Запишите программу из одной строки с print_r(), расставив скобки так, чтобы сначала посчиталась общая сумма, а затем делилась на всех:
без скобок: 2 * 300 + 4 * 50 / 5 = 640 ← неверно
со скобками: (2 * 300 + 4 * 50) / 5 = 160 ← верноПолезное
PHP: Приоритет операций
Рассмотрим простое выражение:
<?php
print_r(2 + 2 * 2); // => 6Результат равен 6, а не 8. Это объясняется понятием приоритета операций в математике и программировании. Он определяет порядок, в котором выполняются действия:
- Умножение и деление выполняются раньше сложения и вычитания.
- Возведение в степень (**) имеет еще более высокий приоритет.
Приоритет операций (от высокого к низкому):
** возведение в степень
↓
* / % умножение, деление, остаток
↓
+ - сложение, вычитаниеНапример:
<?php
print_r(2 * 2 ** 3); // => 16, потому что сначала 2 ** 3 = 8, затем 8 * 2 = 16Если рядом идут операции с одинаковым приоритетом, они выполняются слева направо:
<?php
print_r(8 / 2 * 3); // => 12, потому что сначала 8 / 2 = 4, затем 4 * 3 = 12Управление порядком действий
Иногда нужно изменить порядок вычислений. Для этого используются круглые скобки. Они позволяют задать, какие действия нужно выполнить в первую очередь:
<?php
print_r((2 + 2) * 2); // => 8Скобки можно ставить вокруг любой части выражения и вкладывать их друг в друга:
<?php
print_r(3 ** (4 - 2)); // => 9
print_r(7 * 3 + (4 / 2) - (8 + (2 - 1))); // => 14Главное правило: всегда закрывайте скобки. Непарные скобки вызывают ошибки: и новички, и опытные программисты иногда забывают про закрывающую скобку.
Пишите скобки сразу парой. Например, вводите () и потом заполняйте внутреннюю часть. Большинство редакторов кода (в том числе наш) автоматически добавляют закрывающую скобку, как только вы пишете открывающую. Это касается и других парных символов, например, кавычек.
Повышаем читаемость
Иногда выражение работает правильно, но выглядит запутанно. В таких случаях скобки можно добавить просто для наглядности: они не изменят результат, но улучшат восприятие.
<?php
// Было
print_r(8 / 2 + 5 - -3 / 2); // => 10.5
// Стало
print_r(((8 / 2) + 5) - (-3 / 2)); // => 10.5Программы пишут люди, и читают их тоже люди. Компьютеру все равно, насколько понятно написан код: достаточно, чтобы он был синтаксически правильным. Для человека понятный и аккуратный код является залогом удобства, особенно при работе в команде или разборе ошибок.
Задание
Вы с 4 друзьями (итого 5 человек) заказали 2 пиццы по 300 рублей и 4 напитка по 50 рублей. Нужно разделить счет поровну.
Запишите программу из одной строки с print_r(), расставив скобки так, чтобы сначала посчиталась общая сумма, а затем делилась на всех:
без скобок: 2 * 300 + 4 * 50 / 5 = 640 ← неверно
со скобками: (2 * 300 + 4 * 50) / 5 = 160 ← верноПолезное
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\Arithmetics\Priority;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$expected = '160';
$this->assertOutput($expected);
}
}Решение учителя откроется через:
20:00
