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

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

Открыта

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("Числа не равны");


Комментарии (541)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Peter QA Performance/Automation
вчера, 16:06
Только недоступная любовь, только хардкор...💔
11qfour
Уровень 5
позавчера, 17:54
Всем сердечки проставил за ачивку, теперь тоже хочу🤪
Анна Клушкина
Уровень 11
2 января, 16:07
⛏ Работаем ребята
Anna
Уровень 7
29 декабря 2025, 17:22
Если тут соберется 25 лайков то я получу ачивку :)
Valeroy
Уровень 4
5 января, 12:20
Походу не получишь)
Sdsadasd
Уровень 15
21 декабря 2025, 17:43
Если тут соберется 25 лайков то я получу ачивку :)
C0N5P1RACY
Уровень 21
25 ноября 2025, 15:47
Если тут соберется 25 лайков то я получу ачивку :)
21 ноября 2025, 10:36
Работаем
Egalpra Software Developer
31 октября 2025, 12:57
"Если два вещественных числа отличаются на очень маленькое значение, значит можно считать их равными." А потом -- ой, что-то у нас ракета от заданного курса отклонилась 🌚
Semen Poiarkov (Cyud) Backend Developer
10 сентября 2025, 11:51
Ну давайте и я подключусь к вымоганию лайков, почему бы и нет? xd
Anonymous #3397071
Уровень 4
4 сентября 2025, 15:42
чтоб не лажать в задаче сначала пишу код на intelij, так вот битый час не мог понять в чем ошибка когда ввожу в консоли 1.0000001, оказывается консоль в интелидж давал ошибку на точку, надо запятую.........