zHz00 Untitled

среда, 12 апреля 2017
23:58 Как провести рефакторинг кода и не облажаться?
За этим громким названием скрывается всего лишь один трюк. Он применим только к одной очень конкретной ситуации, которая, как мне кажется, не совсем подходит под определения "рефакторинга".

Но раз уж я написал заголовок, я, пожалуй, всё же отвечу на него.

Так как же провести рефакторинг кода и не облажаться? Ответ: никак.

Но кое-от-чего защититься можно.

Итак, пусть у нас в программе есть об'ект A. Нам надо добавить новый об'ект -- A2, того же класса. Из текущих ситуаций использования A половина должны остаться за ним, а половина -- перейти к A2 (правила определения, кто чем будет заниматься, известны заранее). Ситуации встречаются по всей программе. Об'ект практически глобальный. Как же технически провести эту работу?

Самое очевидное решение -- пролистать все употребления A и часть перевести на A2 (предварительно создав его). Но так есть риск пропустить что-нибудь, даже если использовать глобальный поиск.

Я предлагаю способ, благодаря которому пропустить ни одного употребления просто не выйдет. Об'явление об'екта A надо исключить из программы! Либо удалить A, а вместо него создать массив A0[2], либо переименовать A в определении (и только там!) в A1.

К чему это приведёт? Программа не будет компилироваться из-за употребления несуществующих переменных. Придётся исправлять ошибки...

Хотя и тут есть возможность сфейлиться. В какой-нибудь функции может быть одноимённый локальный об'ект того же класса. Он раньше перекрывался A, а теперь -- нет. В этом случае ошибки не будет.

@темы: Лайфхак, Программирование, Говнокод

URL
Весь день валялся в незабудках, размышлял о будущем отчиз...
http://hsm.com.ua/ Стоит попробовать выделить текст....
Очень уважают тут всеразличные кружки, мероприятия и сбор...
Глаз, всматривающийся в себя, ничего не видит. Ухо, вслуш...
Наверно каждый, у кого есть капля масла в голове, в детст...
С детства ненавидела дачу. А сейчас хочется взять тяпку и...

13.04.2017 в 19:24

13.04.2017 в 19:24
а теперь добро пожаловать в мой js hell.
URL

13.04.2017 в 20:11

13.04.2017 в 20:11
js hell
xDDDD
URL

13.04.2017 в 21:35

13.04.2017 в 21:35
korrshun, поясни. На ЯваСкрипт почти не писал.
URL

14.04.2017 в 11:34

14.04.2017 в 11:34
0. js динамический язык и всё проверяет только в рантайме
1. в js слабая типизация, т.е. замена числа 34 на строку "34" в большинстве случаев сломает жизнь лишь в самом непредсказуемом месте или даже не сломает,т.к. в определенных случаях строка преобразуется к числу.
2. js очень раздолбайски относится к вызову функций. Если ему аргументов не доложить, то при вызове они примут значение undefined. Если наоборот - дать лишних, то ничего не произойдёт.

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

Всё усугубляется плохими библиотеками, которые это всё жрут, не давятся и выдают непредсказуемый выхлоп.

P. S. destroyallsoftware.com/talks/wat - бессмертный ролик про заботливо разложенные грабли в динамических языках.
URL

14.04.2017 в 12:35

14.04.2017 в 12:35
А, в пхп похожая петрушка. Да, после таких историй возникают сомнения в том, что Си -- язык, где очень легко выстрелить себе в ногу. Есть языки, где это сделать гораздо проще.
URL

14.04.2017 в 22:37

14.04.2017 в 22:37
Не знаю, не знаю, по мне так динамическая типизация не такая уж и проблемная штука, и проблема пых и яваскриптов не в этом)
URL

14.04.2017 в 23:51

14.04.2017 в 23:51
korrshun,
>>P. S. destroyallsoftware.com/talks/wat - бессмертный ролик про заботливо разложенные грабли в динамических языках.

Хорошо, но мало. Напомнило статью "сидит, стоит или лежит" -- www.softmixer.com/2012/07/blog-post_2866.html (одна из версий) .

Crawling Chaos, а в чём?
URL

15.04.2017 в 00:55

15.04.2017 в 00:55
zHz00, в первую очередь отвратительно проработанные автоматические преобразования типов и совершенно убогая по возможностям, плохо структурированная стандартная библиотека, из-за которой есть множество проблем в сторонних библиотеках.
В питоне и руби намного меньше подобных проблем. Отчасти благодаря строгости, отчасти от того, что языки и их библиотека не проектировались на коленке за пару месяцев из говна и палок.
URL
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии