Java - чистый код на примере простого цикла

275
17 августа 2017, 20:49

Сразу скажу - в java начинающий, как сделать цикл более "грамотным" и "логичным"?

public void scanner(EnigmaService enigma, String cypher_mode){
     //enigma - обьект, который имеет метод enchiper i deschiper
     // cypher_mode -  "-е" или "-d"
    Scanner scan = new Scanner(System.in);
    while(scan.hasNextLine()){
        if(cypher_mode.equals("-e")){
            System.out.println(enigma.encipher(scan.nextLine()));
        }
        else{
            if(cypher_mode.equals("-d")){
                System.out.println(enigma.decipher(scan.nextLine()));
            }
        }
}
Answer 1

Поскольку строковые значения -d и -e имеют отношение к параметрам командной строки, т.е. к по сути к пользовательскому интерфейсу, а не непосредственно к логике программы, можно завести enum.

public enum CipherMode {
    ENCIPHER, DECIPHER;
}

Где-то у вас будет код вида:

CipherMode mode = null;
if (args.contains("-d")) { mode = DECIPHER }
if (args.contains("-e")) { mode = ENCIPHER; }
...
if (mode == null) {
    System.out.println("Не указан режим работы шифра.");
    return;
}

Дальше уже используйте этот enum:

public void scanner(EnigmaService enigma, CypherMode cipherMode){
    Scanner scan = new Scanner(System.in);
    while(scan.hasNextLine()){
        String line = scan.nextLine();
        switch(cipherMode) {
            case ENCIPHER: enigma.encipher(line); break;
            case DECIPHER: enigma.decipher(line); break;
        }
}

PS. Подчеркивания в именах в Java не приняты.

READ ALSO
Вывод более глубоких элементов в ArrayList

Вывод более глубоких элементов в ArrayList

Как получить(либо вывести в консоль) более глубокое значение ArrayList, например значение testVal из ArrayList-a parserJson, если он всегда имеет динамическую...

243
Алгоритм аутентификации на Rx

Алгоритм аутентификации на Rx

ЗдравствуйтеЕсть следующий код:

192
StackTrace - описание с примерами для новичка в Java

StackTrace - описание с примерами для новичка в Java

Пытаюсь постичь основы джавы, используя javarush, гугл, ютуб и прочие инструментыДошел до темы StackTrace и подзавис

298
Spring Security не авторизовывает

Spring Security не авторизовывает

Имеется некоторый проект на котором Spring Security получает форму логина (вообще вся рега скомуниздена от сюда ) До какого то момента все прекрасно...

212