MOPP: Main-Only-Programming-Pattern

В программировании существует множество различных паттернов, которые помогают упростить и ускорить процесс написания кода. Один из таких паттернов - Main-only programming pattern (MOPP), который предлагает разработчикам поместить весь код в метод Main, который является точкой входа в приложение.

Что это такое?

MOPP - это паттерн программирования, при котором все функции и переменные помещаются внутрь метода Main. Весь код, необходимый для работы приложения, находится в одном месте и не распределяется по различным классам.

"Я не собирался писать все свои функции в Main, но потом я начал печатать, и они просто ускакали на экране. Какой же это был поток сознания! К тому моменту, когда я закончил, у меня было 3000 строк кода и головная боль, но я чувствовал, что это был мой шедевр." - сказал один из основателей этого паттерна

Разрушаем табу: Почему забыть о паттернах программирования может оказаться самым лучшим решением для вашего кода?

Итак, давайте рассмотрим преимущества этого замечательного паттерна:

  1. Простота: этот подход упрощает код, устраняя необходимость в классах и методах, что может сделать его проще для понимания и изменения.

  2. Структура: MOPP способствует лучшей структурированности кода. Весь код сосредоточен в одном месте, что делает его более легким для отслеживания и редактирования.

  3. Меньше ошибок: меньше шансов допустить ошибку в коде, потому что всё находится в одном месте. Также это позволяет избежать ошибок, связанных с созданием экземпляров классов и передачей аргументов.

  4. Производительность: использование MOPP может увеличить производительность приложения. Код, находящийся в методе Main, компилируется быстрее, поскольку он обрабатывается в первую очередь.

  5. Легче сопровождать: благодаря упрощению структуры кода и устранению необходимости в классах и методах, приложение становится более легким для сопровождения и обновлен

Чудо-код MOPP: как решить самые сложные задачи и добиться максимальной производительности?

Давайте рассмотрим явный случай применения паттерна MOPP на примере:

public class Main {

  public static void main(String[] args) {
  
    // Declare variables
    int a = 1;
    int b = 2;
    int c = 3;
    int d = 4;
    int e = 5;
    int f = 6;
    int g = 7;
    int h = 8;
    int i = 9;
    int j = 10;
    int k = 11;
    int l = 12;
    int m = 13;
    int n = 14;
    int o = 15;
    int p = 16;
    int q = 17;
    int r = 18;
    int s = 19;
    int t = 20;
    int u = 21;
    int v = 22;
    int w = 23;
    int x = 24;
    int y = 25;
    int z = 26;
    
    // Loop 1
    for (int a1 = 0; a1 < a; a1++) {
    
      // Loop 2
      for (int b1 = 0; b1 < b; b1++) {
      
        // Loop 3
        for (int c1 = 0; c1 < c; c1++) {
        
          // Loop 4
          for (int d1 = 0; d1 < d; d1++) {
          
            // Declare more variables
            int e1 = a1 * b1 + c1 - d1;
            int f1 = e1 + e;
            int g1 = f1 - f;
            int h1 = g1 * g;
            int i1 = h1 / i;
            int j1 = i1 + j;
            int k1 = j1 - k;
            int l1 = k1 * k;
            int m1 = l1 / l;
            int n1 = m1 + n;
            int o1 = n1 - o;
            int p1 = o1 * o;
            int q1 = p1 / p;
            int r1 = q1 + r;
            int s1 = r1 - s;
            int t1 = s1 * s;
            int u1 = t1 / t;
            int v1 = u1 + v;
            int w1 = v1 - w;
            int x1 = w1 * w;
            int y1 = x1 / x;
            int z1 = y1 + z;
            
            // Print result
            System.out.println("Result: " + z1);
            
          }
        }
      }
    }
  }
}

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

Также использование переменных с понятными именами делает код более читабельным и понятным для других разработчиков. Это упрощает поддержку и развитие кода в будущем.

Использование циклов в цикле и большого количества переменных позволяет выполнять сложные алгоритмы и обрабатывать большие объемы данных. Это делает код гибким и масштабируемым, что позволяет его легко адаптировать под различные задачи и требования.

Таким образом, использование MOPP в данном коде позволяет с легкостью решать сложные задачи, эффективно использовать ресурсы компьютера и обеспечивает высокую производительность.

Использовать или не использовать MOPP: решайте сами, но мы знаем, что выберут настоящие профессионалы!

Конечно, все представленное в статье было сарказмом и шуткой, созданными для юмористического эффекта. В реальности использование паттерна MOPP, описанного в статье, приведет к катастрофическим последствиям и нарушению всех принципов хорошего программирования.

Но все же, я надеюсь, что вы получили удовольствие от чтения этой статьи и нашли в ней юмористическую составляющую. Помните, что программирование - это серьезное дело, и хороший код должен соответствовать лучшим практикам и принципам, чтобы обеспечить надежную и эффективную работу программного продукта.

Комментарии (18)


  1. maisvendoo
    22.06.2023 21:28
    +3

    Это типа шутка такая...?


    1. MiraclePtr
      22.06.2023 21:28
      +1


    1. nronnie
      22.06.2023 21:28

      Ну тег ведь стоит :)


    1. Assabi
      22.06.2023 21:28
      +1

      Там же в предпоследнем абзаце написано:

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


  1. cat_chi
    22.06.2023 21:28
    +5

    Пятница же завтра :)

    Нет, даже немного забавно. Но выглядит как борьба с какой-то надуманной проблемой, было бы интереснее, если б вы раскрыли тему, откуда идея этой статьи вообще взялась


    1. MiraclePtr
      22.06.2023 21:28

      Я думаю, это развитие идей, изложенных в этой недавней статье :)


    1. kmalts66 Автор
      22.06.2023 21:28

      Я - студент вуза, эта проблема существует в кругах студентов, которые пишут код по идее «лишь бы работало», не задумываясь о модульности программы :)


      1. cat_chi
        22.06.2023 21:28

        Ох, да многие, кто так пишет. Учёные там всякие, админы и т.п. Любой write-only код может быть написан как угодно уродливо.

        А есть ли такая проблема именно в индустрии разработки ПО? На мой взгляд – нет.


        1. kmalts66 Автор
          22.06.2023 21:28

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


  1. Einherjar
    22.06.2023 21:28

    У меня есть прекрасный пример для вашей статьи https://github.com/HermanKirshin/MainBrainfuck/blob/main/_.cs. Если кому интересно - предлагаю угадать что делает этот код.


    1. DenOrekhov
      22.06.2023 21:28

      Делает — хрень. Этот спаггети-код выглядит очень смешно)


  1. Kreastr
    22.06.2023 21:28
    +4

    Рано или поздно всех программистов настигнет дзен. И поймут они, что любой способ написания кода (а так же любой используемый ЯП) можно считать оптимальным, если он соответствует поставленной задаче. И перестанут шутить глупые шутки и устраивать холивары.


  1. vilgeforce
    22.06.2023 21:28
    +1

    Хороший компилятор с маленькой функцией может поступить довольно специфическим образом: не использовать стек для локальных переменных и даже для аргументов функции. С вашим подходом - No Way! Стек же, как известно, не бесконечный... И чисто в теории вижу крайне сложноотлавливаемые баги когда стека будет не хватать при некоторых условиях. Зато весело! :-D


  1. JaoDa
    22.06.2023 21:28

    Нет, ну в этом что-то есть. Войдя в состояние потока нагенерить 3000 строк когда (выводя в функции лишь повторяющиеся участки кода), а уже в следующие заходы отрефакторить код и заботливо и с любовью разложить его по классам и функциям. Для некоторых (не очень больших) задач, может быть, очень даже применимо.

    Самое важное тут – состояние потока, которое легко разрушается если отвлечься от конечной цели.


    1. GospodinKolhoznik
      22.06.2023 21:28

      Вы пишете функции только чтобы избавиться от дублей? А так не пишете - "вот эта функция делает А, а вот эта делает Б, я их щас писать не буду, но представлю себе, что они уже есть, и пишу дальше, не отвлекаясь на детали, потом реализую"? Так же удобнее и проще, даже в потоке.


      1. JaoDa
        22.06.2023 21:28
        +1

        Да, вы правы, если можно сразу выделить какую-то функцию как сущность - лучше сделать это сразу, в крайнем случае оставить комментарий (если какой-то код нуждается в комментарии, то там явно не хвататет функции). Про дубли сделал акцент потому как код с дублями рефакторить потом уже очень и очень трудозатратно и здесь компромисса быть не может.


  1. aleksandy
    22.06.2023 21:28
    +5

    Так толсто, что даже тонко :)


  1. dmt_ovs
    22.06.2023 21:28

    Читал до последних абзацев с выражением лица (0_0) и мыслями: "ааа как же SOLID, Clean и т.д.?"

    А потом уже и на теги обратил внимание)
    Шалость удалась (с)