Не индусский код это когда все предельно логично и сделано со знанием возможностей языка.
В нашем случае не индусский код означает, что мы переведем ГГММДД в формат числа дней от 1 января 1900 года потому что это в любом случае нужно (см. таблицу). И потом из этого уже есть функции которые предельно просто выдергивают месяц, год и день, что тоже требуется сделать.
Salevol, те, ты хочешь сказать, что если индусы зальют на дропбокс свой код, он станет не индусским? _________________ Hikari WoE|MvP|PvM 99/68 High Wizard {Roses}
Хикару - ацкий смит барыга {Trading Roses} GoldenGirl - ацкий мерк барыга {GM Witherless Roses}
Мы забытое поколение, которое любит "пихать кнопки компа, жрать чипсы и пить пиво на тусовках"(С) Neaxion
"Человек - это часть целого, которое мы называем Вселенной, часть, ограниченная во времени и в пространстве"(C) Альберт Эйнштейн И не сомкнуть кольцо седых холмов, И узок путь по лезвию дождя, И не ищи - ты не найдешь следов, Что Воин Вереска оставил, уходя.
Воин Вереска(C)Хэлависа группа Мельница
Doredel
Моя формула предельно логична (любая формула, являющаяся частью точной науки, логична по определению), сделана со знанием возможностей языка (я их именно знал, в справку не смотрел)
Но таки в данном случае согласен, о дальнейшем использовании преобразованных данных я не подумал
С этой точки зрения мой код действительно индусский, т.е. не оптимальный и трудноадаптируемый в процессе эволюции программы _________________ Насекомый профф
Doredel всегда считал, что индусский код это что-то типа вставок:
if 2 > 1 then
null;
end if;
Не считаю, что если задачу можно решить, написав решение в одну строчку типа твоего решения или решения Гжы - это индусский код. Скорее по индуски было бы в данном случае написать новую функцию решающую задачу размером строчек в 20, в которой задействовать с десяток имеющихся функций.
Вот мне больше интересно, можно ли подобный код считать индусским:
Код:
main(l
,a,n,d)char**a;{
for(d=atoi(a[1])/10*80-
atoi(a[2])/5-596;n="@NKA\
CLCCGZAAQBEAADAFaISADJABBA^\
SNLGAQABDAXIMBAACTBATAHDBAN\
ZcEMMCCCCAAhEIJFAEAAABAfHJE\
TBdFLDAANEfDNBPHdBcBBBEA_AL\
H E L L O, W O R L D! "
[l++-3];)for(;n-->64;)
putchar(!d+++33^
l&1);}
а так же всякие эзотерические языки типа Брейнфака _________________ Hikari WoE|MvP|PvM 99/68 High Wizard {Roses}
Хикару - ацкий смит барыга {Trading Roses} GoldenGirl - ацкий мерк барыга {GM Witherless Roses}
Мы забытое поколение, которое любит "пихать кнопки компа, жрать чипсы и пить пиво на тусовках"(С) Neaxion
"Человек - это часть целого, которое мы называем Вселенной, часть, ограниченная во времени и в пространстве"(C) Альберт Эйнштейн И не сомкнуть кольцо седых холмов, И узок путь по лезвию дождя, И не ищи - ты не найдешь следов, Что Воин Вереска оставил, уходя.
Воин Вереска(C)Хэлависа группа Мельница
Скорее в по индусски было бы в данном случае написать новую функцию решающую задачу размером строчек в 20
Это уже китайский код.
Индусский код это код который противоречит правилу наименьшего удивления (ну то есть ты смотришь на кусок кода и тебя удивляет способ, которым была решена задача). В этом плане мое решение с умножением на 31 более индусское (но зато легче поддерживаемое, если допустим названия месяцев поменяются, они автоматически заменятся с апдейтом экселя) чем способ который написал Гжы, но если считать, что есть способ преобразовать дату в экселевский формат, то оба решения противоречат этому правилу.
Darkman писал(а):
множно ли подобный код считать индусским
Это больше похоже на намеренные попытки взорвать мозг читающего, чем на индусский код.
Это очень редко когда индусский код. Обычно это либо закладки на будущий рефакторинг, либо артефакты уже проведенного рефакторинга.
Darkman писал(а):
Вот мне больше интересно, можно ли подобный код считать индусским:
Нет, это намеренная обфускация.
Есть много критериев "индусности" кода. В частности:
1) Неоптимальные решения тривиальных задач. От незнания языка ли, по глупости ли - не важно. Как пример:
Код:
if (b.toString().length() == 5)
вместо
Код:
if (b == false)
или более простого
Код:
if (!b)
2) write-only код. Код, который работает, но проще переписать заново, чем понять как и почему это работает.
3) отличительной особенностью не индусского кода является простота и понятность. Ты видишь код, ты понимаешь сразу что он делает и как он это делает. _________________ На опушке маленький мальчик плакал от страха и кричал: "Волк, волк!", а волк, стоя за кустом, с тоской думал, что главная беда с маленькими мальчиками - их совершенное неумение расставаться.
ок. спасибо, интересно было почитать, совсем я в своих SQLях погряз.
BTW: "Неоптимальные решения тривиальных задач. От незнания языка ли, по глупости ли - не важно." да да вот оно - наверно лучшее определение индусского кода.
Еще один вопрос: А как назвать код написанный читаемо по правилам ОПП, хорошо отформатированный, но с избыточной архитектурой. Например, нужна программа строящая ряд Фибоначчи и ряд Леонардо. Делаем абстрактный класс, от него наследуем классы с мат.функциями и там делаем функцию вычисления ряда Фибоначчи и вычисление ряда Леонардо. Причем интерфейс этих классов будет использовать инкапсуляцию, а сама функция будет использовать полиморфизм через абстрактный класс. Возможно, еще что-то накрутить, те получится правильная красивая огромная болванка для тривиальной задачи, полезного кода в которой будет пару строк. _________________ Hikari WoE|MvP|PvM 99/68 High Wizard {Roses}
Хикару - ацкий смит барыга {Trading Roses} GoldenGirl - ацкий мерк барыга {GM Witherless Roses}
Мы забытое поколение, которое любит "пихать кнопки компа, жрать чипсы и пить пиво на тусовках"(С) Neaxion
"Человек - это часть целого, которое мы называем Вселенной, часть, ограниченная во времени и в пространстве"(C) Альберт Эйнштейн И не сомкнуть кольцо седых холмов, И узок путь по лезвию дождя, И не ищи - ты не найдешь следов, Что Воин Вереска оставил, уходя.
Воин Вереска(C)Хэлависа группа Мельница
Только такой код и надо писать, работая в большой компании в команде. Когда неизвестно, что от твоего кода захотят завтра, и кто именно это будет реализовывать. _________________ Насекомый профф
Гжыррракх, ну приведенный мной вариант, когда именно нужно написать только программку для рядов Фибоначчи и Леонардо, не подразумевается, что на основе ее потом будет делаться инженерный калькулятор или маткад. _________________ Hikari WoE|MvP|PvM 99/68 High Wizard {Roses}
Хикару - ацкий смит барыга {Trading Roses} GoldenGirl - ацкий мерк барыга {GM Witherless Roses}
Мы забытое поколение, которое любит "пихать кнопки компа, жрать чипсы и пить пиво на тусовках"(С) Neaxion
"Человек - это часть целого, которое мы называем Вселенной, часть, ограниченная во времени и в пространстве"(C) Альберт Эйнштейн И не сомкнуть кольцо седых холмов, И узок путь по лезвию дождя, И не ищи - ты не найдешь следов, Что Воин Вереска оставил, уходя.
Воин Вереска(C)Хэлависа группа Мельница
Тут вот какое дело. Нужно искать золотую середину между избыточностью и простотой. Можно же разбивать на слои, на классы, вводить интерфейсы до бесконечности. Понимание, где следует остановится, а где следует сделать более гибко приходит только с опытом и всегда зависит от задачи. В некоторых случаях такая "избыточная" архитектура оправдана (ну там мат. библиотеку пишем, допустим, там понятно, что расширять функционал можно до бесконечности), в некоторых - нет.
Насколько я знаю, какого-то одного определения нет. Я не встречал такого. Есть принцип KISS (с которым можно считаться, а можно нет) и такая архитектура его нарушает очевидным образом.
Гжыррракх писал(а):
Только такой код и надо писать, работая в большой компании в команде. Когда неизвестно, что от твоего кода захотят завтра, и кто именно это будет реализовывать.
Не согласен. Всё очень ситуативно. _________________ На опушке маленький мальчик плакал от страха и кричал: "Волк, волк!", а волк, стоя за кустом, с тоской думал, что главная беда с маленькими мальчиками - их совершенное неумение расставаться.
Последний раз редактировалось: Narsil (26 Ноябрь, 2012 15:27), всего редактировалось 1 раз
Doredel, это питон-way кодинг. Не все его принимают полностью. Лично мне некоторые пункты не кажутся разумными, хотя в основном согласен.
В самой кстати архитектуре питона есть крайне сомнительные решения. _________________ На опушке маленький мальчик плакал от страха и кричал: "Волк, волк!", а волк, стоя за кустом, с тоской думал, что главная беда с маленькими мальчиками - их совершенное неумение расставаться.
все основные принципы расписаны очень хорошо и это можно применять к любому языку программирования.
Да, но не к каждой задаче. Нет, ну то есть можно, конечно, но не следует. _________________ На опушке маленький мальчик плакал от страха и кричал: "Волк, волк!", а волк, стоя за кустом, с тоской думал, что главная беда с маленькими мальчиками - их совершенное неумение расставаться.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах