Тернарная операция
Если условие верно, задать "123", иначе — "321". Это пример условия, которое можно записать в одну строку.
Если
#java #lesson #theory
Если условие верно, задать "123", иначе — "321". Это пример условия, которое можно записать в одну строку.
var x = condition ? expression1 : expression2
— общий вид тернарного оператора.Если
condition
== true
, то задать x
значение expression1
, иначе — expression2
.#java #lesson #theory
Java Best Practices
Это то, что сделает вас хорошим программистом. Best Practices — набор правил, построенных на основе чужих ошибок, на основе чужой боли, чтобы их избежать.
Придерживаясь этих правил, вы сделаете свой код более читаемым и стабильным. Почитать про это вы можете в этом репозитории.
#java #usefull_link
Это то, что сделает вас хорошим программистом. Best Practices — набор правил, построенных на основе чужих ошибок, на основе чужой боли, чтобы их избежать.
Придерживаясь этих правил, вы сделаете свой код более читаемым и стабильным. Почитать про это вы можете в этом репозитории.
#java #usefull_link
commons-cli
Пользователь, запуская приложение, может передавать какие-либо данные через терминал. Все они сохраняются в аргументе args метода
Чтобы упросить парсинг этих самых аргументов, можно воспользоваться библиотекой commons-cli. Она, к тому же, не имеет зависимостей.
📕 Документация
#java #lesson #cli
Пользователь, запуская приложение, может передавать какие-либо данные через терминал. Все они сохраняются в аргументе args метода
main(String[] args)
.Чтобы упросить парсинг этих самых аргументов, можно воспользоваться библиотекой commons-cli. Она, к тому же, не имеет зависимостей.
📕 Документация
#java #lesson #cli
Roadmap по Java
Эта дорожная карта ответит на вопросы: «С чего мне начать?» и «Что учить дальше?» Пройдясь по этому пути вы сможете полностью освоить язык и назвать себя настоящим Java программистом.
#roadmap
Эта дорожная карта ответит на вопросы: «С чего мне начать?» и «Что учить дальше?» Пройдясь по этому пути вы сможете полностью освоить язык и назвать себя настоящим Java программистом.
#roadmap
Тип Optional
Если вы работает с коллекциями то, наверное, уже столкнулись с проблемой, когда метод
Вместо этого мы можем получить null, задать значение по умолчанию или выбросить другую ошибку.
#java #lesson #collections
Если вы работает с коллекциями то, наверное, уже столкнулись с проблемой, когда метод
stream().any()
может ничего не вернуть. Мы получаем ошибку, с которой неудобно работать.Вместо этого мы можем получить null, задать значение по умолчанию или выбросить другую ошибку.
#java #lesson #collections
Function<T, R> и Consumer<T>
Бывает такое, что нам нужно передать в метод какую-либо другую функцию. Чтобы не создавать кучу интерфейсов с одним методом, мы можем воспользоваться уже готовыми.
Мы вполне можем использовать эти интерфейсы с лямбдами. Подробнее про Function и Consumer.
#java #lesson #interface
Бывает такое, что нам нужно передать в метод какую-либо другую функцию. Чтобы не создавать кучу интерфейсов с одним методом, мы можем воспользоваться уже готовыми.
Function<T, R>
— принимает в себя значение с типом T, а возвращает с типом R.Consumer<T>
— принимает в себя значение с типом T, но ничего не возвращает.Мы вполне можем использовать эти интерфейсы с лямбдами. Подробнее про Function и Consumer.
#java #lesson #interface
Cloneable
При передаче объекта функции, мы, на самом деле, передаём ссылку на него. И все изменения с экземпляром, что происходят внутри функции, повлияют и на внешнюю переменную.
Чтобы избежать неожиданное изменение свойств, мы можем создать клон объекта и передать функции уже его. Для этого нужно, чтобы класс реализовывал интерфейс Cloneable.
📌 Документация
#java #lesson #objects
При передаче объекта функции, мы, на самом деле, передаём ссылку на него. И все изменения с экземпляром, что происходят внутри функции, повлияют и на внешнюю переменную.
Чтобы избежать неожиданное изменение свойств, мы можем создать клон объекта и передать функции уже его. Для этого нужно, чтобы класс реализовывал интерфейс Cloneable.
📌 Документация
#java #lesson #objects
Разделяй и властвуй
В разы приятнее, когда программа разделена на логические части: эта папка отвечает за кисти, эта за отрисовку изображения, эта за отправку запросов.
Код мы разделяем с помощью пакетов. Пакет (из документации) — это группа связанных типов, обеспечивающая защиту доступа и управление пространством имен.
Мы можем отделять части программы, ограничивать к ним доступ и/или переносить в другие приложения.
📌 Документация
#java #lesson #packages
В разы приятнее, когда программа разделена на логические части: эта папка отвечает за кисти, эта за отрисовку изображения, эта за отправку запросов.
Код мы разделяем с помощью пакетов. Пакет (из документации) — это группа связанных типов, обеспечивающая защиту доступа и управление пространством имен.
Мы можем отделять части программы, ограничивать к ним доступ и/или переносить в другие приложения.
📌 Документация
#java #lesson #packages
Анонимные классы
Очень классная система, которая позволяет создавать объекты «без имени». Мы создаём экземпляр, передаём его в метод и всё.
В примере мы могли бы создать три отдельных класса, наследуемых от MonitoringSystem, но ради чего? Они используются только один раз и просто захламляли бы систему.
Это более элегантное решение, но во всём надо знать меру.
#java #lesson #class
Очень классная система, которая позволяет создавать объекты «без имени». Мы создаём экземпляр, передаём его в метод и всё.
В примере мы могли бы создать три отдельных класса, наследуемых от MonitoringSystem, но ради чего? Они используются только один раз и просто захламляли бы систему.
Это более элегантное решение, но во всём надо знать меру.
#java #lesson #class
Очередь
Структура данных, работающая по принципу FIFO (первый вошёл, первый вышел). То есть чем раньше был добавлен элемент в коллекцию, тем раньше он из нее удаляется. Это однонаправленная очередь.
Есть и двунаправленные очереди, в которых мы можем добавить элемент не только в начала, но и в конец. С удалением то же самое.
Интерфейс Queue представляет однонаправленную очередь, а Deque — двунаправленную или стек. Примером двунаправленной очереди является класс ArrayDeque.
📕 Документация
#java #lesson #structures
Структура данных, работающая по принципу FIFO (первый вошёл, первый вышел). То есть чем раньше был добавлен элемент в коллекцию, тем раньше он из нее удаляется. Это однонаправленная очередь.
Есть и двунаправленные очереди, в которых мы можем добавить элемент не только в начала, но и в конец. С удалением то же самое.
Интерфейс Queue представляет однонаправленную очередь, а Deque — двунаправленную или стек. Примером двунаправленной очереди является класс ArrayDeque.
📕 Документация
#java #lesson #structures
Класс LinkedList
Это структура данных в виде связанного списка. Таким образом мы можем быстро добавлять элементы, но нам будет проблематично брать данные по индексу.
У него есть все методы, которые определены в интерфейсах List, Queue, Deque.
📌 Документация
#java #lesson #collections
Это структура данных в виде связанного списка. Таким образом мы можем быстро добавлять элементы, но нам будет проблематично брать данные по индексу.
У него есть все методы, которые определены в интерфейсах List, Queue, Deque.
addFirst() / offerFirst()
— добавляет элемент в начало списка. addLast() / offerLast()
— в конец.removeFirst() / pollFirst()
— удаляет первый элемент из начала списка. removeLast() / pollLast()
— с конца списка.getFirst() / peekFirst()
; getLast() / peekLast()
— возвращает первый/последний элемент списка.📌 Документация
#java #lesson #collections
Подчёркивания между цифрами
Мы люди, не машины, и нам довольно сложно прочитать число 1000000000, намного проще, если оно разделено: 1 000 000 000.
В Java мы не можем использовать пробелы, поэтому таким разделением выступает нижнее подчёркивание.
Оно никак не влияет на поведение, просто делает код более читаемым, простым (особенно, если есть большие числа).
#java #lesson #tricks
Мы люди, не машины, и нам довольно сложно прочитать число 1000000000, намного проще, если оно разделено: 1 000 000 000.
В Java мы не можем использовать пробелы, поэтому таким разделением выступает нижнее подчёркивание.
Оно никак не влияет на поведение, просто делает код более читаемым, простым (особенно, если есть большие числа).
#java #lesson #tricks
Кэширование значений
Integer это тоже объект, который занимает определённое место в памяти. С числами мы работаем довольно часто (тот же for), так что и создаются они довольно часто.
Чтобы каждый раз не инициировать, разработчики решили значения от -128 до 127 сохранять в отдельном месте, а потом просто передавать ссылки на них.
Поэтому мы видим такие результаты, как выше. На местах, где всегда true, постарался компилятор и оптимизировал программу.
#java #lesson #performance
Integer это тоже объект, который занимает определённое место в памяти. С числами мы работаем довольно часто (тот же for), так что и создаются они довольно часто.
Чтобы каждый раз не инициировать, разработчики решили значения от -128 до 127 сохранять в отдельном месте, а потом просто передавать ссылки на них.
Поэтому мы видим такие результаты, как выше. На местах, где всегда true, постарался компилятор и оптимизировал программу.
#java #lesson #performance
Побитовые операции
Побитовые операции происходят в бинарной системе счисления, когда число состоит из двух цифр: 1 и 0.
Побитовое И (&) — оставляет бит, только если два числа — единицы.
Побитовое ИЛИ (|) — будет 1, если хотя бы одно из чисел — 1.
Исключающее или (^) — действует так же, как и ИЛИ, но если оба числа — единицы, ставит 0.
Оператор НЕ (~) — «переворачивает» все биты в числе.
#java #lesson #operator
Побитовые операции происходят в бинарной системе счисления, когда число состоит из двух цифр: 1 и 0.
Побитовое И (&) — оставляет бит, только если два числа — единицы.
Побитовое ИЛИ (|) — будет 1, если хотя бы одно из чисел — 1.
Исключающее или (^) — действует так же, как и ИЛИ, но если оба числа — единицы, ставит 0.
Оператор НЕ (~) — «переворачивает» все биты в числе.
a << x
, a >> x
— смещение битов числа a вправо/влево на x значений.#java #lesson #operator