Тернарный оператор
public int max(int a, int b) {
return a > b ? a : b;
}
Тернарный оператор (также известный как условный оператор) - это сокращенная форма записи условного выражения.
Он имеет следующий синтаксис:
условие ? значение_если_истина : значение_если_ложь;
Множественное присваивание
int a, b, c;
a = b = c = 5;
System.out.println(a); // 5
System.out.println(b); // 5
System.out.println(c); // 5
Операция присваивания работает следующим образом: сначала вычисляется значение выражения в правой части, потом это значение присваивается переменной, которая размещается в левой части от знака ‘=‘.
Операция присваивания может иметь вид цепочки:
переменная1 = переменная2 = выражение;
Библиотека Lombok
import lombok.Data;
@Data
public class Person {
private String name;
private int age;
}
Разрабатывая на Java, мы сталкиваемся с множеством рутинных операций, связанных с написанием геттеров, сеттеров, equals, hashCode и других стандартных методов. Есть способ существенно упростить этот процесс. В этом нам поможет библиотека Lombok!
Lombok – это основанная на аннотациях библиотека Java, позволяющая сократить шаблонный код. В Lombok предлагаются различные аннотации, цель которых – заменить ненужный повторяющийся код, писать который утомительно. Например, Lombok избавит вас от написания безаргументных конструкторов, методов toString(), equals() и hashCode(), для этого нужно просто добавить несколько аннотаций. Плюс, эта библиотека подключается прямо к вашей IDE, поэтому работа воспринимается так, словно вы написали весь шаблонный код сами.
Читать дальше🍝 Спагетти-код: когда разработка становится беспорядком
Спагетти-код – это одна из самых неприятных "болезней" в мире программирования. Этот термин используется для описания плохо организованного и труднопонимаемого кода, который напоминает спагетти – пасту, перепутанную в неразгадываемую массу.
Почему спагетти-код возникает?
- Недостаток планирования: Недостаточное предварительное проектирование приложения может привести к хаотичной разработке, когда каждая часть кода создается независимо от других.
- Отсутствие структуры: Если разработчики не следят за структурой проекта, код может быстро превратиться в беспорядок.
- Отсутствие документации: Неадекватно задокументированный код может сделать его понимание и редактирование настоящим испытанием.
- Недостаток опыта: Новички в программировании могут создавать спагетти-код из-за отсутствия опыта и знаний о лучших практиках.
Рекурсия
public class Factorial {
public static void main(String[] args) {
int num = 6;
long factorial = factorial(num);
System.out.println("Factorial of " + num + " = " + factorial);
// Factorial of 6 = 720
}
/**
* Вычисляет факториал переданного числа
* @param num значение для которого нужно вычислить факториал
* @return результат
*/
public static long factorial(int num) {
if (num == 1) {
return 1;
}
return num * factorial(num - 1);
}
}
🔁 Рекурсия — определение, описание, изображение какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя.
В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия).
Читать дальшеLiquibase
Liquibase - это мощный инструмент для управления изменениями в схеме базы данных. Он позволяет разработчикам и администраторам баз данных эффективно управлять эволюцией структуры базы данных в течение всего жизненного цикла приложения.
Вот несколько ключевых особенностей Liquibase:
- Контроль версий: Liquibase предоставляет механизм для контроля версий схемы базы данных. Вы можете определить изменения в формате XML, SQL, YAML и других, и Liquibase отслеживает, какие изменения уже были применены к базе данных, и какие ещё предстоит применить.
- Кросс-платформенность: Liquibase поддерживает множество СУБД, включая PostgreSQL, MySQL, Oracle, Microsoft SQL Server и многие другие. Это позволяет разработчикам использовать один и тот же инструмент для управления изменениями в разных системах.
...
Читать дальшеИнтернирование строк (string intern)
String s1 = "Hello, World!";
String s2 = new String("Hello, World!").intern();
String s3 = "Hello, World!";
String s4 = new String("Hello, World!");
System.out.println(s1 == s2);
// true, так как s2 ссылается на интернированный экземпляр строки
System.out.println(s1 == s3);
// true, так как s3 ссылается на интернированный экземпляр строки
System.out.println(s1 == s4);
// false, так как s4 ссылается на новую строку, созданную в памяти
Интернирование строк (string intern) - это процесс хранения одной и той же строки только в одном экземпляре в пуле строк (string pool) для оптимизации использования памяти и ускорения сравнения строк.
Вместо того чтобы создавать новый объект строки каждый раз, когда вы используете литерал строки (например, "Hello, World!"), Java проверяет, существует ли уже такая строка в пуле строк. Если она там есть, Java использует существующий экземпляр строки, иначе создает новый и добавляет его в пул строк.
Читать дальшеПорядок инициализации объекта

Инициализация это процесс задания начальных значений переменным и объектам перед их использованием. Этот процесс необходим для того, чтобы обеспечить корректное начальное состояние переменных и объектов в программе.
Читать дальшеvolatile
volatile - это ключевое слово, которое может быть применено к переменным. Ключевое слово volatile играет важную роль в управлении видимостью и синхронизацией данных между потоками. Когда переменная объявлена как volatile, это означает, что операции чтения и записи этой переменной будут синхронизированы между потоками.
Читать дальшеOptional
// Создаем Optional с пустым значением
Optional<String> emptyOptional = Optional.empty();
// Создаем Optional с непустым значением
Optional<String> nonEmptyOptional = Optional.of("String value");
// Можем там же создать Optional с возможностью отсутствия значения
Optional<String> optionalWithNullable = Optional.ofNullable(null);
// Проверяем, есть ли значение в Optional, и выполняем действие при его наличии
if (nonEmptyOptional.isPresent()) {
System.out.println(nonEmptyOptional.get()); // String value
}
// Используем метод orElse для предоставления альтернативного значение,
// если значение отсутствует
String result = emptyOptional.orElse("default");
System.out.println(result); // default
Optional представляет собой класс, введенный в Java 8, который предназначен для борьбы с проблемами, связанными с отсутствием значения (null) и обеспечивает более безопасную и чистую обработку возможных отсутствующих значений.
Читать дальше