Pull to refresh

Comments 14

А скажите честно: чтобы написать исходный вариант кода – вы взяли конечный и потрясли как следует?

Нет. Пример из реального кода. Типы назывались иначе и имели более сложное поведение и критерий слияния. От лишних деталей я абстрагировался для краткости, и чтобы не отвлекать внимание от главной цели (и NDA ненароком не нарушить). Вот и вышло так игрушечно.
Исходный вариант метода — это, грубо говоря, наивная реализация. Чтобы такое написать, необязательно знать толк в извращениях.

Любопытно.
Просто по моему опыту структура if-ов обычно диктуется задачей – и для вашей модельной задачи будет последний вариант.


Бывает, что полученную из задачи структуру можно оптимизировать – но, как правило, делать это невыгодно с точки зрения дальнейшей поддержки: реализация каких-то случаев может не различаться сегодня, но её потребуется изменить завтра. И тут уж лучше будет не оптимизировать код руками, а оставить это на откуп компилятору.


Впрочем, есть ещё один случай получения неоптимальной структуры кода – исторические наслоения. Тут да, один из шагов рефакторинга можно провести по вашей схеме (или лучше в середине схемы воспользоваться картами карно), а потом уже подумать, что получилось :-) – в смысле, восстановить логику по коду.

Лучше вообще минимально оптимизировать код — тогда компилятору легче работать.

if (prev is Cluster && !(next is Cluster && prev.Description.Equals(next.Description)))

Такую конструкцию компилятор может развернуть в чудовищного размера машинный код. Хотя читаемость да, чуть лучше.
Ну, не знаю.
Лично я, если нужно работать с сложным разветвленным выражением содержащее кучу if, делаю это (на Питоне) в виде таблицы, прдставляющей из себя словарь, где ключами служат массивы булевых переменных, а значениями — имена методов, которые выполняют нужные действия. то позволяет кроме прочего, сразу иметь таблицу всех комбинаций входных параметров. Для использования этой таблицы сначала вычисляем ключ, булевые переменные ключа это значения условий в исходных if-ах, а потом по ключу из словаря получаем нужный метод.
UFO just landed and posted this here
Да, но в сложном виде, я предпочитаю делать это в явном виде, плюс, чтобы удобно добавлять и изменять. А в простом, это все вообще не нужно, и так все ясно.

Херасе, а почему у меня в начале 00х был какой-то сраный ворд на информатике??

UFO just landed and posted this here
UFO just landed and posted this here

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

В шаге 5 не должны ли родительские условия оказаться первыми?
Для конечного результата не принципиально, т.к. имеем дело с коммутативностью.
Sign up to leave a comment.

Articles