JavaRush /Java блог /Random UA /Кава-брейк #154. Три різновиди циклів у Java. JDK 19: нов...

Кава-брейк #154. Три різновиди циклів у Java. JDK 19: нові можливості Java 19, які з'являться у вересні

Стаття з групи Random UA

Три різновиди циклів у Java

Джерело: Medium Ознайомившись із цією публікацією, ви дізнаєтеся про різні способи виконання циклів у мові Java. Кава-брейк #154.  Три різновиди циклів у Java.  JDK 19: нові можливості Java 19, які з'являться у вересні - 1Цикл (Loop) призначений виконання блоку коду до того часу, поки умова стане істинним. У мові Java існує три різновиди циклів:
  • while
  • do-while
  • for

While loop

Цикл while повторюється до того часу, поки заданий логічний умова стане true. Як показано на діаграмі нижче, оператор буде виконуватися доти, доки перевірка умови не відобразить true. Кава-брейк #154.  Три різновиди циклів у Java.  JDK 19: нові можливості Java 19, які з'являться у вересні - 2

Синтаксис

while (condition true) {
       // Блок кода
}

приклад

Тут цикл while буде виконуватися доти, доки умова стане true для x, меншого 3.
public class WhileLoop {
     static int x = 1;
     public static void main(String[] args) {
         while(x < 3) {
             System.out.println("x = "+x);
             x++;
         }
     }
}
Висновок:
x = 1 x = 2

Цикл do-while

Цикл do-while схожий на цикл while з однією невеликою відмінністю. Цикл do-while завжди виконується один раз перед перевіркою умови. Кава-брейк #154.  Три різновиди циклів у Java.  JDK 19: нові можливості Java 19, які з'являться у вересні - 3

Синтаксис

do {
     //  Блок кода
   } while(condition);

приклад

На цьому прикладі ви бачите, що оператор do або блок коду завжди виконуються один раз перед перевіркою істинності чи хибності умови.
static int x = 5;
        public static void main(String[] args) {
            do {
                System.out.println("x = "+x);
                x++;
            } while(x < 3);
        }
Висновок
x = 5

Цикл for

Цикл for сильно відрізняється від циклу while та do-while. В одному рядку оператора ми визначаємо ініціалізацію, умову (true або false), збільшення/зменшення. Кава-брейк #154.  Три різновиди циклів у Java.  JDK 19: нові можливості Java 19, які з'являться у вересні - 4

Синтаксис

For (initialization; condition; increment/decrement) {
    // Блок кода
}

приклад

public static void main(String[] args) {
     for(int i = 0 ; i < 2 ; i++) {
         System.out.println("i = " + i);
     }
}
Висновок:
i = 0 i = 1
Ініціалізація: int i = 0 є умовою ініціалізації циклу. Умова: відбувається перевірка, чи вірна умова для запуску блоку або коду всередині циклу for. Якщо умова false, це завершить цикл. Збільшення/зменшення: оновлення змінної для наступної ітерації.

Розширений цикл for (for-each)

Існує ще один варіант циклу for, компактніший і читабельніший, ніж простий цикл for. Він називається розширеним циклом for (або циклом for-each) та використовується для перебору колекцій та масивів. Він доступний для будь-якого об'єкта, що реалізує інтерфейс Iterable.

приклад

class Main
{
    public static void main(String[] args)
    {
        int[] A = { 1, 2, 3, 4, 5 };

        for (int i: A) {
            System.out.println(i);
        }
    }
}
Висновок:
1 2 3 4 5

JDK 19: нові можливості Java 19, які з'являться у вересні

Джерело: Infoworld Вашій увазі представлений перелік нових функцій, які з'являться у найближчому релізі JDK. Його випуск заплановано на 20 вересня 2022 року. Java Development Kit 19, випуск із короткостроковою підтримкою, який має з'явитися у вересні, досягнув стадії реліз-кандидата. У ньому слід звернути увагу на сім функцій: структурований паралелізм, шаблони записів, попередня версія функції foreign та memory API, а також підтримка архітектури набору інструкцій Linux/RISC-V (ISA) з відкритим кодом. Оскільки додавання нових функцій для JDK 19 вже заморожене, інші заплановані можливості, такі як універсальні дженерики та об'єкти-значення, відкладені для пізнішої версії платформи. Зазвичай нова версія Java виходить кожні шість місяців. Реліз-кандидат JDK 19 опублікований 11 серпня, до цього в червні та липні йому передували два rampdown-релізи. Другий реліз-кандидат очікується 25 серпня. Ранні збірки JDK 19 можна завантажити на сторінці jdk.java.net/19 . Функції JDK 19 включають:
  • Структурований паралелізм (на етапі інкубації). Він призначений для спрощення багатопотокового програмування за допомогою API структурованого паралелізму. Цей паралелізм розглядає кілька завдань, що виконуються у різних потоках, як єдину одиницю роботи. Відповідно, це спростить обробку помилок та скасування, також буде покращено надійність.

  • Попередня версія шаблонів записів (для визначення значень записів). Шаблони записів (Record patterns) і шаблони типів тепер можуть бути вкладені один в одного, що забезпечує декларативну, потужну форму навігації та обробки даних, що компонується. Нова функція включає розширення зіставлення шаблонів для вираження складніших складових запитів даних без зміни синтаксису або семантики шаблонів типів.

    Це нововведення засноване на зіставленні шаблонів для instanceof, представленому в JDK 16 у березні 2021 року. У майбутніх релізах може знадобитися розширення шаблонів записів за допомогою таких можливостей, як шаблони масивів та шаблони vararg.

    Шаблони записів є частиною проекту Amber , спрямованого на вивчення та розвиток невеликих функцій Java, орієнтованих на продуктивність.

  • Попередні версії функції foreign та memory API . У новому релізі з'явиться API, за допомогою якого Java-програми можуть взаємодіяти з кодом та даними поза середовищем виконання Java. Завдяки ефективному виклику сторонніх функцій (тобто коду поза JVM) та безпечному доступу до чужої пам'яті (пам'яті, що не керується JVM) API дозволить програмам Java викликати власні бібліотеки та обробляти власні дані без недоліків Java Native Interface (JNI).

    Функція foreign і memory API об'єднують два раніше інкубаційних API: API доступу до зовнішньої пам'яті і API зовнішнього компонувальника. Функція foreign і memory API раніше інкубувалися JDK 17 і повторно інкубувалися в JDK 18.

  • Попередня версія віртуальних потоків (Virtual threads). Ця функція є полегшеними потоками, які значно скорочують зусилля з написання, обслуговування та спостереження за високопродуктивними паралельними додатками. Метою нововведення є забезпечення можливості масштабування серверних програм, написаних у простому стилі "потік на запит" (thread-per-request). Функція призначена для коду, в якому використовується java.lang Thread API для впровадження віртуальних потоків із мінімальними змінами, а також для усунення несправностей, налагодження та профілювання віртуальних потоків за допомогою наявних інструментів JDK.

  • Третя попередня версія зіставлення шаблонів для перегляду виразів та операторів switch (pattern matching for switch expressions and statements). Вона розширює зіставлення шаблонів до switch, що дозволить тестувати вираз по ряду шаблонів, кожен з яких має певну дію, тому складні запити, орієнтовані на дані, можуть бути лаконічно та безпечно.

    Ця функція раніше була попередньо представлена ​​в JDK 17 і JDK 18. У третій попередній версії додані поліпшення, включаючи заміну захищених шаблонів при пропозиціях у switch-блоках. Крім того, runtime-семантика шаблону switch, коли значення виразу селектора дорівнює null, тепер підтримує застарілу семантику switch.

    Нововведення розширить виразність та застосовність switch-виразів та операторів, дозволяючи шаблонам з'являтися у мітках case. Також розробники отримають можливість послабити історичну ворожість до null та switch, коли це необхідно, покращується безпека switch-операторів та забезпечується можливість, щоб існуючі switch-вирази та оператори продовжували компілюватися без змін та виконувались з ідентичною семантикою.

  • Четверта інкубація vector API . Вона виражатиме векторні обчислення, які надійно компілюються під час виконання оптимальними векторними інструкціями на підтримуваних архітектурах процесорів. Це забезпечить більшу продуктивність порівняно з еквівалентними скалярними обчисленнями. Розробники, що використовують API, отримують можливість писати складні векторні алгоритми на Java, використовуючи автовекторизатор HotSpot, але з моделлю користувача, яка робить векторизацію більш передбачуваною і надійною. Векторний API раніше був інкубований JDK 16, JDK 17 і JDK 19.

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

  • Порт Linux/RISC-V Java отримає підтримку набору апаратних інструкцій, який підтримується широким спектром мовних наборів інструментів. Тепер порт Linux/RISC-V підтримуватиме конфігурацію RV64GV RISC-V, 64-розрядну ISA загального призначення, що включає векторні інструкції.

    Також порт отримає підтримку наступних параметрів віртуальної машини HotSpot: інтерпретатор шаблонів, JIT-компілятор C1 (клієнт), JIT-компілятор C2 (сервер) та всі поточні основні збирачі сміття, включаючи ZGC та Shenandoah.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ