@WannaCreative

Зачем писать такой большой код?

Всем привет , дорогие друзья!
Вот потихоньку учу Java, и, тут возник один вопрос.
Зачем писать прочие методы, если из за этого получается код длинее?
В чем различия, и, нужно ли все таки писать с методами?
public class Main
{
    public static void main(String[] args) throws IOException{
        int[] array = new int[5];
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        for (int i = 0; i < array.length; i++){
            String s = reader.readLine();
            int value = Integer.parseInt(s);
            array[i] = value;
        }
        InitializeArray(array);
    }
    public static int[] InitializeArray(int[] array){
        int max = array[0];
        int min = array[0];
        for (int i = 0; i < array.length; i++){
            if (max < array[i])
                max = array[i];
            if (min > array[i])
                min = array[i];
        }
        WriteLine(min, max);
        return array;
    }
    private static void WriteLine(int minimum, int maximum){
        System.out.println("Minumum is: "+minimum);
        System.out.println("Maximum is: "+maximum);
    }
}

Это пример с методами, а вот без них
public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int[] array = new int[5];
        for (int i = 0; i < array.length; i++){
            String s = reader.readLine();
            int value = Integer.parseInt(s);
            array[i] = value;
        }

        int minimum = array[0];
        int maximum = array[0];

        for (int i = 0; i < array.length; i++){
            if (minimum > array[i])
                minimum = array[i];
            if (maximum < array[i])
                maximum = array[i];
        }
        System.out.println("Maximum is: "+maximum);
        System.out.println("Minimum is: "+minimum);
    }

}


P.S | Во втором случае код короче, и легче понять, лично мне
  • Вопрос задан
  • 1025 просмотров
Решения вопроса 3
alexyat
@alexyat
iOS Developer
Все зависит от ситуации - метод решает какую-то отдельную задачу, разделение на методы нужно для того чтобы не повторять один и тот же код, а просто вызвать готовый метод. Позволяет структурировать код. Избегать ошибок - вы решили немного поменять код и не нужно лезть и искать по всему проекту, где вы его использовали, просто исправляете метод. В вашем случаи, если вы не собираетесь вызывать те методы из других функций, то можно все совместить в одной.
Ответ написан
добавлю к вышесказанному: такой код проще тестировать
Ответ написан
Комментировать
@Firik67
Middle PHP Developer
Разница в том, что за лапшу из 200-300 строк без методов, вас побьют. Ибо читать это невозможно. И, возможно, нарушит кучу принципов проектирования. В вашем случае без методов допустимо сделать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@Aleshonne
Научные вычисления
Лучше выделять в отдельные методы блоки кода, решающие определённую задачу или используемые многократно, чтобы потом самому меньше путаться и сильно упростить жизнь людям, пытающимся разобраться в вашем коде.
Но в данном случае за такое разбиение программиста нужно бить большой дубиной: метод InitializeArray не инициализирует массив, а ищет минимум и максимум, печатает их в консоль и зачем-то возвращает свой параметр, хотя он его не изменял. Метод WriteLine печатает не одну строку, а две. Главный метод никак не использует возвращаемое значение метода InitializeArray. В общем, лучше не разбивать на методы совсем, чем разбивать так.
Ответ написан
Комментировать
@asd111
Насколько я понял метод InitializeArray находит минимум и максимум в массиве и затем печатает их.
Поэтому желательно назвать метод InitializeArray так чтобы из названия было понятно что он делает. Например вместо InitializeArray можно назвать метод find_min_and_max_and_print_them - т.е. найти минимум и максимум и вывести их. От метода WriteLine можно избавиться потому что он ничего по сути не делает.
Ещё можно обернуть в функцию место где создается массив и вводятся данные.
И ещё нужно сделать чтобы размер массива где то указывался.
В java конечно CamelCase, но на мой взгляд underscore легче читается.
Куски кода нужно оборачивать в функции для инкапсуляции, т.е. чтобы скрыть подробности работы за названием функции, поэтому функциям нужно давать имена из которых понятно что данная функция делает. Например InitializeArray - не очень понятное название для функции которая ищет и выводит максимум и минимум. А например если такую функцию назвать Найти_минимум_и_максимум_в_массиве_и_вывести_значения - то сразу всё понятно.

Код не проверял возможно есть ошибки, но думаю примерная суть понятна.
Т.е. в целом можно сделать так:
public class Main
{
    const int ARRAY_SIZE = 5;
    public static void main(String[] args) throws IOException{
        int[] working_array = create_array_and_fill_it_from_stdin();
        find_max_and_min_in_array_and_print_them(working_array);
    }
    public static int[] create_array_and_fill_it_from_stdin(){
        int[] array = new int[ARRAY_SIZE];
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        for (int i = 0; i < array.length; i++){
            String s = reader.readLine();
            int value = Integer.parseInt(s);
            array[i] = value;
        }
        return array;
    }
    public static void find_max_and_min_in_array_and_print_them(int[] array){
        int max = array[0];
        int min = array[0];
        for (int i = 0; i < array.length; i++){
            if (max < array[i])
                max = array[i];
            if (min > array[i])
                min = array[i];
        }
        System.out.println("Minumum is: "+min);
        System.out.println("Maximum is: "+max);        
    }
}
Ответ написан
@abcd0x00
Изучи метод разработки "сверху вниз". Если его не освоишь, ничего длиннее ста строк писать не будешь.
wiki. структурное программирование
Ответ написан
Комментировать
@mikhail_404
И, конечно, не забываем про SOLID!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы