Рубрики
Без рубрики

WTF является необязательным?

Заглянуть внутрь. С пометкой java, учебное пособие, для начинающих.

Я начинаю серию руководств по java, которые идут под названием WTF is a (n) _____ ? В этом уроке я собираюсь начать с необязательного.

Значит, WTF – это необязательно?

Необязательный класс был классом, введенным в Java 8, и он был введен для обработки нулевых проверок в потоках. Несмотря на то, что он был введен для потоков, мы можем использовать его для создания гораздо более чистых нулевых проверок.

Например, следующий код завершится ошибкой, поскольку не было выполнено никаких нулевых проверок.

public class Main {
    // No null check is done here, a null pointer exception will be raised
    public static void main(String[] args) {
        System.out.println(printSecondWord("ONEWORD").toLowerCase());
    }

    // Return null if 2 words not there else return 2nd word
    private static String printSecondWord(String words){
        String[] wordsList = words.split(" ");
        return wordsList.length < 2 ? null : wordsList[1];
    }
}

До Java 8 (вы можете сделать это и сейчас) вам приходилось выполнять ручную проверку null следующим образом:

public class Main {

    public static void main(String[] args) {
        String secondWord = printSecondWord("ONEWORD");
        if(secondWord != null) {
            System.out.println(secondWord.toLowerCase());
        }
    }

    // Return null if 2 words not there else return 2nd word
    private static String printSecondWord(String words){
        String[] wordsList = words.split(" ");
        return wordsList.length < 2 ? null : wordsList[1];
    }
}

Этот способ хорош, но у него есть одна проблема, которая вызывает NullPointerExceptions, также известная как ошибка на миллиард долларов. Статический метод предполагает, что другой разработчик выполнит нулевую проверку. Основная проблема традиционных проверок нулевого указателя заключается в том, что разработчики забывают выполнять проверки нулевого указателя, и это может быть проблематично, поскольку одна ошибка может привести к сбою всего приложения.

Более современный способ структурировать код и заставить разработчика выполнить проверку null – это вернуть необязательный

public class Main {

    public static void main(String[] args) {
        printSecondWord("ONEWORD").ifPresent(secondWord -> {
            System.out.println(secondWord);
        });

    }

    private static Optional printSecondWord(String words){
        String[] wordsList = words.split(" ");
        return Optional.ofNullable(wordsList.length < 2 ? null : wordsList[1]);
    }
}

Возврат необязательного параметра является гораздо лучшей альтернативой, поскольку разработчик должен вручную получить доступ к результату, вызвав если присутствует из статического метода. Необязательный.

В качестве альтернативы вы также можете записать логическое значение если присутствует и решите, что делать.

import java.util.Optional;

public class Main {

    public static void main(String[] args) {
        Optional secondWord = printSecondWord("ONEWORD");

        boolean isTheWordThere = secondWord.isPresent();
        // Print NOT HERE if not present
        if(!isTheWordThere){
            System.out.println("NOT HERE");
        }
        else{
            System.out.println(secondWord.get());
        }

    }
    // Return null if 2 words not there else return 2nd word
    private static Optional printSecondWord(String words){
        String[] wordsList = words.split(" ");
        return Optional.ofNullable(wordsList.length < 2 ? null : wordsList[1]);
    }
}

Я надеюсь, что этот пост поможет вам, ребята, начать работу с optional, и вы сможете более подробно изучить optional в своих проектах.

Кроме того, поскольку это мой первый пост, я хотел бы получить обратную связь, и любые комментарии приветствуются!!

Продолжайте взламывать!!!

Оригинал: “https://dev.to/vatdaell/wtf-is-an-optional-4jcm”