PHP: Синтаксический сахар
В программировании часто встречаются повторяющиеся конструкции. В PHP, как и во многих других языках, есть возможность сокращать их запись. Такие упрощения называются синтаксическим сахаром, потому что они делают процесс написания кода немного проще и приятнее, «подслащивая» его :)
Сокращенные формы присваивания
Часто требуется изменить значение переменной, прибавив или вычтя что-то, умножив или разделив на число. Базовый вариант выглядит так:
<?php
$index = $index + 1;
$count = $count * 2;
$total = $total - 5;
$price = $price / 3;PHP позволяет записывать это короче, с помощью комбинированных операторов:
<?php
$index += 1; // то же самое, что $index = $index + 1
$count *= 2; // то же самое, что $count = $count * 2
$total -= 5; // то же самое, что $total = $total - 5
$price /= 3; // то же самое, что $price = $price / 3Важно понимать, что отличия исключительно в способе записи. Интерпретатор превращает сокращенную конструкцию в развернутую.
В циклах такие сокращения встречаются особенно часто. В них мы обычно меняем счетчик и накапливаем результат:
<?php
$sum = 0;
$index = 1;
while ($index <= 5) {
$sum += $index; // то же самое, что $sum = $sum + $index
$index += 1; // то же самое, что $index = $index + 1
}
print_r($sum); // => 15Без сокращений тело цикла было бы длиннее:
<?php
while ($index <= 5) {
$sum = $sum + $index;
$index = $index + 1;
}Другие операции
Такая запись работает с числами и с другими типами данных.
Для строк используется оператор конкатенации:
<?php
$text = 'Hello';
$text .= ' World'; // то же самое, что $text = $text . ' World'Поддерживаемые сокращения
Существует сокращенная форма почти для всех операторов: +=, -=, *=, /=, %=, **=, .=. Все они работают по одному принципу: берут текущее значение переменной, применяют операцию и сохраняют результат в ту же переменную.
Задание
Операторы синтаксического сахара особенно удобны, когда нужно постепенно собрать итоговое значение.
Реализуйте функцию buildProgressBar(), которая принимает количество выполненных шагов и общее количество шагов, а затем возвращает строку-индикатор прогресса.
Выполненные шаги обозначаются символом #, а оставшиеся — символом -. Старайтесь не использовать встроенные функции работы со строкой в своем решении.
<?php
buildProgressBar(0, 5); // '-----'
buildProgressBar(3, 5); // '###--'
buildProgressBar(5, 5); // '#####'Вам пригодится оператор .=, чтобы постепенно собирать новую строку внутри цикла while. А оператор += будет полезен, чтобы управлять условием цикла.
PHP: Синтаксический сахар
В программировании часто встречаются повторяющиеся конструкции. В PHP, как и во многих других языках, есть возможность сокращать их запись. Такие упрощения называются синтаксическим сахаром, потому что они делают процесс написания кода немного проще и приятнее, «подслащивая» его :)
Сокращенные формы присваивания
Часто требуется изменить значение переменной, прибавив или вычтя что-то, умножив или разделив на число. Базовый вариант выглядит так:
<?php
$index = $index + 1;
$count = $count * 2;
$total = $total - 5;
$price = $price / 3;PHP позволяет записывать это короче, с помощью комбинированных операторов:
<?php
$index += 1; // то же самое, что $index = $index + 1
$count *= 2; // то же самое, что $count = $count * 2
$total -= 5; // то же самое, что $total = $total - 5
$price /= 3; // то же самое, что $price = $price / 3Важно понимать, что отличия исключительно в способе записи. Интерпретатор превращает сокращенную конструкцию в развернутую.
В циклах такие сокращения встречаются особенно часто. В них мы обычно меняем счетчик и накапливаем результат:
<?php
$sum = 0;
$index = 1;
while ($index <= 5) {
$sum += $index; // то же самое, что $sum = $sum + $index
$index += 1; // то же самое, что $index = $index + 1
}
print_r($sum); // => 15Без сокращений тело цикла было бы длиннее:
<?php
while ($index <= 5) {
$sum = $sum + $index;
$index = $index + 1;
}Другие операции
Такая запись работает с числами и с другими типами данных.
Для строк используется оператор конкатенации:
<?php
$text = 'Hello';
$text .= ' World'; // то же самое, что $text = $text . ' World'Поддерживаемые сокращения
Существует сокращенная форма почти для всех операторов: +=, -=, *=, /=, %=, **=, .=. Все они работают по одному принципу: берут текущее значение переменной, применяют операцию и сохраняют результат в ту же переменную.
Задание
Операторы синтаксического сахара особенно удобны, когда нужно постепенно собрать итоговое значение.
Реализуйте функцию buildProgressBar(), которая принимает количество выполненных шагов и общее количество шагов, а затем возвращает строку-индикатор прогресса.
Выполненные шаги обозначаются символом #, а оставшиеся — символом -. Старайтесь не использовать встроенные функции работы со строкой в своем решении.
<?php
buildProgressBar(0, 5); // '-----'
buildProgressBar(3, 5); // '###--'
buildProgressBar(5, 5); // '#####'Вам пригодится оператор .=, чтобы постепенно собирать новую строку внутри цикла while. А оператор += будет полезен, чтобы управлять условием цикла.
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\Loops\SyntacticSugar;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$this->assertEquals('-----', buildProgressBar(0, 5));
$this->assertEquals('###--', buildProgressBar(3, 5));
$this->assertEquals('#####', buildProgressBar(5, 5));
}
}Решение учителя откроется через:
20:00
