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


В мире программирования одним из наиболее значимых аспектов является выбор имен для переменных. Одним из широко распространенных подходов является использование буквенно‑цифровых обозначений, таких как «a», «b» и т. д. Возможно, это может показаться несущественным или лишь вопросом стиля, однако на самом деле эта практика имеет глубокие основания и является важной составляющей программистской этики. В данной статье рассмотрим преимущества использования таких обозначений и почему они способствуют повышению читаемости и понимаемости программного кода.

Красота в программировании находится не только в его функциональности, но и в его эстетике


Какие преимущества у "a b c case"?

  • Абстракция и общая понятность:
    Использование однобуквенных имен переменных способствует созданию абстракции, позволяя программисту фокусироваться на более широких аспектах кода. При работе с более глобальными концепциями, такими как циклы, условия и функции, использование общепринятых обозначений делает код более лаконичным и понятным. Такие обозначения уменьшают визуальный шум и позволяют программисту быстрее ориентироваться в коде.

  • Повышение читаемости:
    Использование буквенно‑цифровых переменных способствует повышению читаемости программного кода. Однобуквенные обозначения в коротких фрагментах кода могут быть более компактными и легкими для восприятия. Когда переменные имеют ясное и краткое обозначение, становится легче отслеживать поток данных и взаимодействие между различными компонентами программы.

  • Универсальность и переносимость:
    Использование общепринятых обозначений, таких как «a», «b», «i» и т. д., делает код более универсальным и переносимым. В ситуациях, когда несколько программистов работают над одним проектом или когда код переносится на другие платформы, использование таких имен переменных упрощает понимание и поддержку кода другими разработчиками.

  • Сокрытие сложности:
    Однобуквенные обозначения переменных могут помочь скрыть сложность алгоритмов или математических выражений, упрощая код и делая его более легким для понимания. Когда сложные вычисления или логика представлены через простые обозначения, это упрощает процесс отладки и поддержки кода.

Что об этом думают люди?

«Знаете, я всегда был непримиримым противником сложных имен переменных. Они меня смущают, будто я стою перед головоломкой. Я предпочитаю простоту, чтобы не тратить время на распутывание узлов. Вот почему я перешел на однобуквенные переменные. Многие считают это глупостью, но я считаю это актом гениальности! Когда я видел переменные типа 'clientRepository' или 'getUserById', у меня в голове возникали вопросы: 'Кто этот клиент? Зачем мне его репозиторий? И почему мы ищем пользователя по ID?'. Теперь же, с моими 'a1', 'b2' и 'c3', я могу спокойно улыбаться и говорить: 'Это просто переменная, не более'. Моя жизнь стала легче, а код — понятнее. Я не вижу в этом ничего глупого, ведь гениальность часто затмевает все остальное!»

«Посмотрите на всех этих людей с их продуманными именами переменных, будто они рассказывают историю в каждом символе. А я? Я просто смеюсь над ними с моими 'x', 'y' и 'z'. Они считают меня глупым и вечно говорят про какой‑то camel case и snake case, но я вижу, как они запутываются и теряются в деталях. Душнилы, одним словом! А я? Я могу спокойно передвигаться по коду, не вникая в их интеллектуальные штучки. И что самое смешное, когда я прошу объяснить, почему они используют такие длинные имена, они начинают оправдываться словами, что это делает код более читаемым и понятным. Но я смеюсь в лицо этим оправданиям, потому что я знаю, что моя простота бьет их сложность на всех фронтах. Так что пусть они там продолжают считать себя умными, а я буду смеяться с моими 'a1', 'b2' и 'c3' в уголке, где нет места для их ненужной интеллектуальной нагрузки.»


Мы уже использовали a b c case в нашей прошлой статье о паттерне программирования MOPP, поэтому в этот раз обойдемся без примеров.


Что делать, когда закончатся буквы?

Используйте цифры:

a = ...
b = ...
.
.
.
a1 = ...
a2 = ...
.
.
.
a9999999999999999999999 = ...

Просто, и, что самое главное, понятно, без всяких там «varForUserToGetIdFromMySQL»

Заключение

Вы можете называть переменные так, как вам удобно или как принято, но опытные программисты знают: использовать MOPP наряду с "a b c case" - путь к успеху.

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


  1. vilgeforce
    11.07.2023 12:26
    +2

    Короткие имена идентификаторов ускоряют чтение программы компилятором, а также сокращают размер программы в интерпретируемых языках, что особенно актуально для JS!


    1. tenzink
      11.07.2023 12:26
      +2

      И ещё экономят место на диске и уменьшают нагрузку на сеть при распределённой компиляции )) Пруф


      1. WinIce
        11.07.2023 12:26

        Пишите сразу на ассемблере, и скорость исполнения максимум, и сеть не занимает. А специалисты и так разгребут все ваши баги.


        1. tenzink
          11.07.2023 12:26
          +1

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


      1. simenoff
        11.07.2023 12:26
        +1

        И экономят электроэнергию!


  1. Crimento
    11.07.2023 12:26
    +1

    Если имена переменных так важны, то почему переменные в деобфусцированном коде записаны именно в a b c case? Шах и мат, программисты!


    1. raamid
      11.07.2023 12:26

      переменные в деобфусцированном коде

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

      А так, в целом мысль поддерживаю. Система именования переменных должна упрощать понимание программы и "объясняющие" имена переменных в этом здорово помогают. Короткие имена переменных ограничены применением в качестве локальных в коротких функциях не более 20-30 строк ИМХО.


      1. mayorovp
        11.07.2023 12:26
        +1

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


  1. datacompboy
    11.07.2023 12:26
    +18

    Я считаю что самым важным навыком для изучения это Oo0 паттерн. Что может быть лучше?

    int o, O, oo, oO, o0, Oo, O0, OO;
    for (o=oo; o<oO; o+=Oo) o0 += OO;


    1. iig
      11.07.2023 12:26
      +1

      Деление на букву О, наконец я это увидел ;)


    1. Neusser
      11.07.2023 12:26
      +2

      Разве что I1I паттерн может немного посоревноваться

      int I, I1, II1, I1I, II1I; I1I1;


      1. datacompboy
        11.07.2023 12:26
        +3

        В смысле, Il1 ?

        int I, l, II, Il, I1, l1, lI, ll;

        Тоже хороший способ, да. но, к сожалению, `int i` это нормально :(


        1. Neusser
          11.07.2023 12:26

          I, l и 1.


        1. domix32
          11.07.2023 12:26

          как тут не вспомнить 11l (хабр)


    1. funca
      11.07.2023 12:26

      Iota утверждает, что достаточно трёх букв (ι(ι(ιι))). Ну или в вашей нотации o0o0ooOOO.


    1. nronnie
      11.07.2023 12:26

      Тут еще важно правильно шрифт подобрать - чтобы "ноль" не был перечеркнут.


      1. datacompboy
        11.07.2023 12:26

        И ширина O и 0 была одинаковая, да.


  1. Survtur
    11.07.2023 12:26
    -1

    /s же?


    1. cat_chi
      11.07.2023 12:26
      +2

      Просто s, без слеша. Со слешом компилятор не примет. Будьте внимательны!


  1. HemulGM
    11.07.2023 12:26
    +2

    PascalCase


  1. red-cat-fat
    11.07.2023 12:26
    +1

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


    1. mayorovp
      11.07.2023 12:26
      +2

      Да при чём тут Панорама, обычный пятничный пост на первое апреля, просто в июле и во вторник вышел.


      1. middle
        11.07.2023 12:26

        ... С некоторым запозданием.


  1. gpaw
    11.07.2023 12:26

    кстати, именование, проверенное временем - запись в шахматах не даст соврать. e2-e4.


    1. ef_end_y
      11.07.2023 12:26

      Уже давно так никто не пишет. Пишут просто e4. Это стандарт, если что


      1. tenzink
        11.07.2023 12:26

        Используют, но только для начинающих / детей. Для тех, кто более-менее уже умеет играть, конечно, длинная нотация неактуальна


  1. vvbob
    11.07.2023 12:26
    +1

    Самое четкое что я видел в коде - это именование пакетов и классов с использованием номеров тикетов. Это же прекрасно!!! Ну что непонятного в названии класса: GHJ47558954511256687? Это же так просто - открыть тикет и посмотреть о чем он! (правда тикеты есть не все, многие куда-то пропали, но хороший программист и так разберется!)


  1. z250227725
    11.07.2023 12:26

    Кому вообще нужны эти ваши переменные. Нужно перфокарты дырявить.


  1. Badimagination
    11.07.2023 12:26

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


    1. Gutt
      11.07.2023 12:26

      будет умещаться максимум на 1-н экран монитора с HD-разрешением

      Долго смотрел на эту фразу, пытаясь понять, как же это должно выглядеть при н > 0. Потом, кажется, понял.


  1. middle
    11.07.2023 12:26
    +3

    Корень ошибки в том, что вы решили, что переменные нужны. Пишите в бесточечном стиле, без переменных, и проблема отпадёт сама собой.


    1. 0xd34df00d
      11.07.2023 12:26
      +2

      Ну там все равно имена есть, просто у функций. А вот если на SK-комбинаторах писать...


  1. domix32
    11.07.2023 12:26

    Надо было опрос с множественным выбором делать


  1. Colt045
    11.07.2023 12:26
    +4

    Предлагаю творчески углубить эту замечательную идею.

    Вместо объявления переменных как

    int a1;

    int a2;

    int a3;

    … и т.д.

    использовать конструкции вида:

    int[] a;

     

    В этом случае, кроме повышения уровня абстракции (о чем так убедительно рассказано в статье), мы получаем дополнительные профиты:

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

    2.        Легко запомнить, какой тип имеет переменная, исходя из имени массива.

    3.        При необходимости можно легко изменить тип всех используемых переменных (например, если вдруг выясниться, что размерности int не хватает, то можно быстро переправить на long).

    4.        Упрощается визуальный контроль за использованием в одном выражении только однотипных переменных, что сразу же позволит избавиться от труднообнаруживаемых ошибок неявного преобразования типов.

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


    1. vvbob
      11.07.2023 12:26

      Надо развить идею - void *a;

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


      1. datacompboy
        11.07.2023 12:26

        еще полезно использовать:

        void * O = malloc(1024*1024*8);
        void * O0 = O;
        void * o0 = O+75;
        for(*(int*)(o0-71)=0777000;*(char*)(o0-72);*(char*)(o0-72)++) static oo += ++*(char*)(o0-70);