Code Ukraine // Програмування
17.8K subscribers
970 photos
306 videos
3 files
1.38K links
Корисні шпаргалки, лекції та матеріали для програмістів.


@itua_chat - наш чат
@ad_duck - зв’язок / @ukr_duck
Download Telegram
Створення модуля

У Java модулі являють собою логічні групи пакетів, які можуть бути використані для організації програми. Створення модуля починається зі створення файлу module-info.java в кореневому каталозі модуля. У цьому файлі визначається ім'я модуля, його залежності та експортовані пакети.

Після створення модуля його можна використовувати в інших додатках, вказавши його ім'я в опції командного рядка --module.

Створення модулів дає змогу краще організувати додатки та керувати їхніми залежностями, що може спростити розробку та обслуговування коду.

#java

Code Ukraine
Механізм Assertions

Механізм Assertions являє собою інструмент для перевірки умов у коді. Він використовується для вираження та перевірки припущень, які мають бути істинними під час виконання програми. Assertions дають змогу програмісту ввімкнути або вимкнути перевірку умов залежно від режиму виконання програми.

Важливо зазначити, що за замовчуванням механізм Assertions у Java вимкнено. Для його активації необхідно запустити JVM з прапором "-ea" (або "-enableassertions").

#java

Code Ukraine
Для чого потрібне ключове слово super?

Як і багато інших ключових слів, super має кілька різних значень залежно від контексту:

1. Задати нижню межу generic-типу: Consumer<? super Number>
2. звернутися до члена класу-батька, який перекритий (shadowed) членами спадкоємця або локальними змінними: int foo = super.foo
3. Викликати в конструкторі конструктор батька: SubClass() { super("subclass param"); }
4. У разі невизначеності, уточнити батьківський тип (на картинці)

#java

Code Ukraine
У чому відмінність між приватним конструктором і фінальним класом?

Обмеження області видимості конструктора до приватного не дозволяє викликати його зі спадкоємця, що призводить до неможливості успадкування. Ця властивість часто використовується для утилітарних класів і синглтонів. Якщо застосувати породжувальний патерн, то можна повернути можливість інстанціювання ззовні.

Якщо додати оголошенню класу модифікатор final, це також заборонить від нього успадковуватися, вже без зайвого обмеження на використання конструктора зовні. Це основне застосування цих двох підходів.

З точки зору можливості успадкування, обмеження через private конструктор слабше. Від такого класу, якщо він не фінальний, можна успадковувати внутрішні та вкладені підкласи. Публічний вкладений клас може спрацювати як "PublicExample" - дати зовнішнім класам успадковуватися через себе.

#java

Code Ukraine
Records

Records - це новий тип даних, доданий у Java 14, який дає змогу визначити клас із набором властивостей, аналогічних до полів класу, але незмінних і доступних тільки для читання. Вони надають зручний спосіб оголошення простих незмінних об'єктів зі скороченим синтаксисом.

#java

Code Ukraine
Багатовимірні масиви

У Java багатовимірні масиви являють собою масиви, елементами яких є інші масиви. Вони дають змогу організувати дані у вигляді таблиці або матриці з кількома вимірами.

Багатовимірні масиви в Java можуть мати будь-яку кількість вимірів, і ви можете створювати та використовувати масиви з потрібною вам кількістю вимірів для зберігання та обробки даних.

#java

Code Ukraine
Патерн проєктування Observer

Паттерн Observer є одним із популярних поведінкових паттернів проектування. Він використовується для реалізації механізму, за якого об'єкти (спостерігачі) можуть автоматично отримувати повідомлення про зміни в іншому об'єкті (суб'єкті). Це особливо корисно, коли одні об'єкти залежать від стану інших і мають реагувати на його зміни.

#java

Code Ukraine
Статичний ініціалізатор

Статичний ініціалізатор - блок коду, який виконується під час першого завантаження класу або під час першого звернення до статичного члена класу (змінної або методу). Статичний ініціалізатор зазвичай використовується для ініціалізації статичних змінних або виконання інших дій, які потрібні тільки один раз, під час завантаження класу.

#java

Code Ukraine
ExecutorService

ExecutorService - це інтерфейс у Java, який надає високорівневий спосіб керування виконанням завдань (потоків) у фоновому режимі. Він є частиною пакета java.util.concurrent і надає абстракцію над управлінням потоками виконання, що полегшує створення та управління потоками в багатозадачних додатках.

ExecutorService дає змогу розробникам створювати пули потоків, якими автоматично керує пул, а не створюють і не знищують щоразу вручну. Це знижує накладні витрати на створення і знищення потоків, що може бути дорогою операцією.

#java

Code Ukraine
Stream API

Потужний інструмент для обробки даних у Java. Дозволяє виконувати операції над послідовностями елементів декларативним способом, а не за допомогою імперативних циклів.

Насамперед з колекції потрібно отримати .stream(), а потім викликати потрібну функцію: filter(), reduce() та інші.

#java

Code Ukraine
Події та слухачі

У Java події та слухачі використовуються для обробки подій, які виникають у програмі. Події можуть бути пов'язані з діями користувача, такими як клік миші, натискання клавіші або зміна тексту в полі введення, або з іншими діями, такими як завершення роботи потоку або отримання даних з мережі.

Слухачі (Listeners) у Java - це інтерфейси, які дозволяють реєструвати обробники подій. Коли відбувається подія, відповідний слухач викликає метод обробки події, який реалізується класом, що зареєстрував слухач.

#java

Code Ukraine
Оператор return

Оператор return використовується для виконання явного повернення з методу. Якщо метод повертає значення void, то оператор return не є необхідним. Його можна використовувати при достроковому виході з методу.

Якщо ж в оголошенні методу зазначено, що він повертає якесь значення, то оператор return необхідний. Після нього вказується значення, що повертається з методу.

#java

Code Ukraine
Порожня колекція замість Null

Якщо ваша програма може повернути колекцію, яка не містить жодних значень, переконайтеся, що повертається порожня колекція, а не Null. Це заощадить вам час на різні перевірки і позбавить від багатьох помилок.

#java

Code Ukraine
Сеттери

У Java сеттери (setters) є методами класу, які використовуються для встановлення значень приватних змінних (полів) класу. Вони забезпечують механізм інкапсуляції даних, даючи змогу контролювати доступ до полів класу і забезпечувати безпеку даних.

#java

Code Ukraine
Порожня колекція замість Null

Якщо ваша програма може повернути колекцію, яка не містить жодних значень, переконайтеся, що повертається порожня колекція, а не Null. Це заощадить вам час на різні перевірки і позбавить від багатьох помилок.

#java

Code Ukraine
Створення модуля

У Java модулі являють собою логічні групи пакетів, які можуть бути використані для організації програми. Створення модуля починається зі створення файлу module-info.java в кореневому каталозі модуля. У цьому файлі визначається ім'я модуля, його залежності та експортовані пакети.

Після створення модуля його можна використовувати в інших додатках, вказавши його ім'я в опції командного рядка --module.

Створення модулів дає змогу краще організувати додатки та керувати їхніми залежностями, що може спростити розробку та обслуговування коду.

#java

Code Ukraine
Бінарний пошук у масивах

Припустимо, ми хочемо вставити новий елемент у відсортовану таблицю. Arrays.binarySearch() повертає індекс ключа пошуку, якщо він міститься в таблиці.

В іншому разі вона повертає точку вставки, яку ми можемо використовувати для підрахунку індексу для нового ключа: -(insertion point)-1.

Метод binarySearch є найпростішим і найефективнішим методом пошуку елемента у відсортованому масиві в Java.

#java

Code Ukraine
🚀 JIT-компіляція: як інтерпретовані мови можуть бути швидкими

Зазвичай інтерпретовані мови, як Python або JavaScript, вважають повільнішими за компільовані (C, Rust). Але завдяки Just-In-Time (JIT) компіляції вони можуть значно прискорюватися. Як це працює? Розбираємося! 🔍

Що таке JIT-компіляція?
JIT-компіляція – це гібридний підхід між інтерпретацією та традиційною компіляцією.

🔹 Звичайна інтерпретація – код виконується рядок за рядком, що може бути повільним.
🔹 Звичайна компіляція – код заздалегідь перекладається у машинний код, що дає високу швидкість.
🔹 JIT-компіляція – код спочатку виконується як інтерпретований, але гарячі (часто використовувані) фрагменти перекладаються у машинний код під час роботи програми.

Результат? Висока швидкість виконання без втрати гнучкості!

⚙️ Як працює JIT?
1️⃣ Інтерпретатор запускає код і відстежує, які частини виконуються найчастіше.
2️⃣ Гарячий код передається JIT-компілятору, який перекладає його у машинний код.
3️⃣ Збережений машинний код використовується замість повторної інтерпретації.

🔁 Це дозволяє прискорювати роботу програм під час виконання!

Де використовується JIT?
Java (JVM HotSpot) – один із найвідоміших прикладів JIT, що дозволяє Java-додаткам бути швидкими.
JavaScript (V8, SpiderMonkey, Chakra) – браузери використовують JIT для пришвидшення JS-коду.
Python (PyPy) – альтернативний інтерпретатор Python із вбудованим JIT.
.NET (CLR, CoreCLR) – JIT-компіляція використовується для C# та інших мов платформи .NET.

Чи є недоліки?
🔹 Початкові затримки – JIT-компілятору потрібен час на аналіз та компіляцію.
🔹 Більше споживання пам’яті – збережений машинний код займає додатковий простір.
🔹 Складність реалізації – вбудовування JIT у мову вимагає серйозних оптимізацій.

Але виграш у швидкості для довготривалих процесів перекриває ці мінуси!

Висновок
JIT-компіляція – це магія, що дозволяє інтерпретованим мовам бути швидкими. Завдяки адаптивному підходу вони можуть спочатку бути гнучкими, а потім – продуктивними!

📌 Що думаєш про JIT? Використовував у своїх проєктах? Пиши в коментарях! 💬

#програмування #JIT #компіляція #JavaScript #Java #Python

Code Ukraine
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Вивчаємо Java, створюючи додатки

Безкоштовний курс від Codecademy, який навчить вас основам Java, включно з об'єктно-орієнтованим програмуванням і створенням простих додатків.

#java #курс

Code Ukraine
Please open Telegram to view this post
VIEW IN TELEGRAM