Как стать автором
Обновить

Искусство абстракции: Важность использования буквенно-цифровых переменных в программировании

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров4K
Всего голосов 8: ↑6 и ↓2+5
Комментарии36

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

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

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

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

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

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

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

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

В смысле, Il1 ?

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

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

I, l и 1.

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

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

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

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

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

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

int a1;

int a2;

int a3;

… и т.д.

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

int[] a;

 

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

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

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

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

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

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

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

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

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

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);

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории