Java: Синтаксический сахар
В программировании часто встречаются повторяющиеся конструкции. В Java, как и во многих других языках, их запись можно сократить. Такие упрощения называют синтаксическим сахаром. Они делают написание кода короче и приятнее, сохраняя тот же результат.
Сокращенные формы присваивания
Часто значение переменной меняют, прибавив или вычтя что-то, умножив или разделив на число. Базовый вариант выглядит так:
index = index + 1;
count = count * 2;
total = total - 5;
price = price / 3;Java позволяет записать то же самое короче, с помощью составных операторов:
index += 1; // то же самое, что index = index + 1
count *= 2; // то же самое, что count = count * 2
total -= 5; // то же самое, что total = total - 5
price /= 3; // то же самое, что price = price / 3Каждый такой оператор берет текущее значение переменной, применяет операцию и сохраняет результат в ту же переменную. Слева всегда стоит имя переменной, в которую запишется новое значение.
Сахар в циклах
В циклах такие сокращения встречаются особенно часто. В них обычно меняют счетчик и накапливают результат:
var sum = 0;
var index = 1;
while (index <= 5) {
sum += index; // то же самое, что sum = sum + index
index += 1; // то же самое, что index = index + 1
}
System.out.println(sum); // => 15Без сокращений тело цикла было бы длиннее и многословнее:
while (index <= 5) {
sum = sum + index;
index = index + 1;
}Конкатенация строк
Составные операторы работают не только с числами. Для строк подходит +=, потому что + соединяет строки:
var text = "Hello";
text += " World"; // то же самое, что text = text + " World"
// "Hello World"Поэтому при сборке строки в цикле счетчик меняют через +=, а к результату каждый раз дописывают очередной символ тем же оператором.
Поддерживаемые сокращения
Сокращенная форма есть почти у всех операторов: +=, -=, *=, /=, %=. Все они работают по одному принципу — берут текущее значение переменной, применяют операцию и кладут результат обратно.
Отдельно стоит изменение переменной на единицу. Запись index += 1 можно сократить до index++, а index -= 1 — до index--. Эти две операции называют инкрементом и декрементом, у них есть свои тонкости, и им посвящен отдельный разговор.
Задание
Реализуйте статический метод App.filterString(), принимающую на вход строку и символ, и возвращающую новую строку, в которой удален переданный символ во всех его позициях.
Пример вызова:
var str = "If I look back I am lost";
App.filterString(str, 'I'); // "f look back am lost"
App.filterString(str, 'o'); // "If I lk back I am lst"Полезное
Java: Синтаксический сахар
В программировании часто встречаются повторяющиеся конструкции. В Java, как и во многих других языках, их запись можно сократить. Такие упрощения называют синтаксическим сахаром. Они делают написание кода короче и приятнее, сохраняя тот же результат.
Сокращенные формы присваивания
Часто значение переменной меняют, прибавив или вычтя что-то, умножив или разделив на число. Базовый вариант выглядит так:
index = index + 1;
count = count * 2;
total = total - 5;
price = price / 3;Java позволяет записать то же самое короче, с помощью составных операторов:
index += 1; // то же самое, что index = index + 1
count *= 2; // то же самое, что count = count * 2
total -= 5; // то же самое, что total = total - 5
price /= 3; // то же самое, что price = price / 3Каждый такой оператор берет текущее значение переменной, применяет операцию и сохраняет результат в ту же переменную. Слева всегда стоит имя переменной, в которую запишется новое значение.
Сахар в циклах
В циклах такие сокращения встречаются особенно часто. В них обычно меняют счетчик и накапливают результат:
var sum = 0;
var index = 1;
while (index <= 5) {
sum += index; // то же самое, что sum = sum + index
index += 1; // то же самое, что index = index + 1
}
System.out.println(sum); // => 15Без сокращений тело цикла было бы длиннее и многословнее:
while (index <= 5) {
sum = sum + index;
index = index + 1;
}Конкатенация строк
Составные операторы работают не только с числами. Для строк подходит +=, потому что + соединяет строки:
var text = "Hello";
text += " World"; // то же самое, что text = text + " World"
// "Hello World"Поэтому при сборке строки в цикле счетчик меняют через +=, а к результату каждый раз дописывают очередной символ тем же оператором.
Поддерживаемые сокращения
Сокращенная форма есть почти у всех операторов: +=, -=, *=, /=, %=. Все они работают по одному принципу — берут текущее значение переменной, применяют операцию и кладут результат обратно.
Отдельно стоит изменение переменной на единицу. Запись index += 1 можно сократить до index++, а index -= 1 — до index--. Эти две операции называют инкрементом и декрементом, у них есть свои тонкости, и им посвящен отдельный разговор.
Задание
Реализуйте статический метод App.filterString(), принимающую на вход строку и символ, и возвращающую новую строку, в которой удален переданный символ во всех его позициях.
Пример вызова:
var str = "If I look back I am lost";
App.filterString(str, 'I'); // "f look back am lost"
App.filterString(str, 'o'); // "If I lk back I am lst"Полезное
Ваше упражнение проверяется по этим тестам
import static org.assertj.core.api.Assertions.assertThat;
class AppTest {
public static void main(String[] args) {
var text = "If I look back I am lost";
assertThat(App.filterString(text, 'I')).isEqualTo("f look back am lost");
assertThat(App.filterString("zz zorro", 'z')).isEqualTo(" orro");
}
}Решение учителя откроется через:
20:00
