JavaRush /Курсы /Java Syntax Pro /Лайфхаки: как писать код лучше и быстрее

Лайфхаки: как писать код лучше и быстрее

Java Syntax Pro
3 уровень , 4 лекция
Открыта

1. Выражения vs Команды

Все команды в Java делятся на две категории: команды (Statement) и выражения (Expression). Про команду обычно говорят, что она выполняется, а про выражение — что оно вычисляется. Но это не главное.

Основное отличие между командой и выражением в том, что у выражения есть результат вычисления. И у этого результата, во-первых, есть тип, а во-вторых, этот результат можно куда-то присвоить, ну или использовать в каком-то другом выражении.

Примеры:

Код Примечания
int x; Команда
(a < 10) Выражение, тип boolean
i++; Выражение, тип совпадает с типом переменной i
x = 5; Выражение, тип совпадает с типом переменной x

И что это нам дает?

Во-первых, мы можем использовать тот факт, что очень много команд на самом деле являются выражением (имеют результат вычисления). Например, такой код будет работать:

Код Примечания
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1));

Во-вторых, мы можем игнорировать результат вычисления выражения, если хотим.

Код Код, где мы игнорируем результат:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

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


2. Тернарный оператор

Этот лайфхак уже поинтереснее предыдущего. В Java есть специальный тернарный (тройной) оператор. Чем-то он похож на сокращенную запись оператора if–else:

Условие ? Выражение1 : Выражение2;

Если условие истинно, то выполняется выражение1 иначе выполняется выражение2. После условия следует знак вопроса, а два выражения разделены двоеточием.

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

Например, мы хотим вычислить минимум двух чисел. С использованием тернарного оператора этот код будет выглядеть так:

int a = 2;
int b = 3;
int min = a < b ?  a : b;

Или, допустим, вам нужно присвоить переменной разные значения в зависимости от какого-то условия. Как это сделать?

Вариант первый — воспользоваться оператором if-else:

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

Второй вариант — использовать тернарный оператор, то есть сокращенную запись оператора if-else:

int age = 25;
int money = age > 30 ? 100 : 50;

Так что же лучше использовать: оператор if-else или тернарный оператор? С точки зрения скорости выполнения, особой разницы нет. Здесь скорее вопрос читаемости кода. И это очень важный момент: код должен не только правильно работать, но и легко читаться другими программистами.

Самый простой критерий может быть таким: если код помещается в одну строку — используйте тернарный оператор, если в одну строку он уже не помещается — лучше использовать if-else.



3. Сравнение вещественных чисел

Как уже говорилось раньше, просто так сравнивать вещественные числа нельзя: в процессе работы с ними всегда могут возникать неожиданные эффекты из-за того, что часть значащих цифр отбрасывается.

Поэтому есть проверенный временем подход. Если два вещественных числа отличаются на очень маленькое значение, значит можно считать их равными. Пример:

double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
   System.out.println("Числа равны");
else
   System.out.println("Числа не равны");

Но это еще не все: разница чисел вполне может оказаться отрицательным числом. Поэтому, чтобы такой подход работал, нужно сравнивать не просто разницу чисел, а модуль разницы чисел: |a-b|

В Java есть специальный метод для вычисления модуля числа — Math.abs():

int m = Math.abs(значение);

Поэтому исправленный вариант нашего примера выше будет выглядеть вот так:

double a = 1.000001;
double b = 1.000002;

if ( Math.abs(b - a) < 0.0001 )
   System.out.println("Числа равны");
else
   System.out.println("Числа не равны");


Комментарии (535)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
C0N5P1RACY Уровень 11
25 ноября 2025
Если тут соберется 25 лайков то я получу ачивку :)
Роман Зарубин Уровень 8
21 ноября 2025
Работаем
Egalpra Уровень 7
31 октября 2025
"Если два вещественных числа отличаются на очень маленькое значение, значит можно считать их равными." А потом -- ой, что-то у нас ракета от заданного курса отклонилась 🌚
Semen Poiarkov (Cyud) Уровень 4
10 сентября 2025
Ну давайте и я подключусь к вымоганию лайков, почему бы и нет? xd
Anonymous #3397071 Уровень 4
4 сентября 2025
чтоб не лажать в задаче сначала пишу код на intelij, так вот битый час не мог понять в чем ошибка когда ввожу в консоли 1.0000001, оказывается консоль в интелидж давал ошибку на точку, надо запятую.........
23 августа 2025
Сдал с 4 раза из за того что писал слово “число” с большой буквы( отстой
Константин Уровень 4
15 августа 2025
чмок😚😚😚
ErenYeag9r Уровень 4
5 августа 2025
Если читаешь этот комментарий, желаю тебе успешно все пройти =)
Anonymous #3566422 Уровень 4
3 июля 2025
В какой лекции раньше говорилось про вещественные числа
Даниил Уровень 1
14 августа 2025
Адресация памяти и переменные
Дмитрий Уровень 57 Expert
29 июня 2025
ох уж эти комментарии, которые байтят на лайк🥴просто так не пройти мимо😀