Несколько лет назад я участвовал в письменной форме лучшие методы/стиль кодирования для нашего (довольно большой и часто использующий Perl) компания. Это было сделано комитетом "старших" разработчиков Perl.
Как что-либо сделанное на основе консенсуса, это имело части, с которыми все не согласились. Понятное дело.
Часть, которая протерла неправильно большинство, была сильной рекомендацией НЕ использовать многие Perlisms (неточно определенный как идиомы кода, не существующие в, сказать C++ или Java), те, которые "Избегают использования '... если X'; конструкции".
Основное объяснение, устанавливаемое для таких правил как этот, было то, что у разработчиков не-Perl будет намного более трудное время с кодовой базой Perl иначе. Предположение здесь, которое я предполагаю, - то, что жокеи кода Perl являются более редкой породой в целом - и среди новых наймов к компании - чем non-Perlers.
Я задавался вопросом, является ли ТАКЖЕ - какие-либо хорошие аргументы, чтобы поддерживать или отклонить эту логику... это главным образом академическим любопытством в этой точке, поскольку стандарт кодирования Perl компании ожесточен и никогда не будет пересматриваться снова насколько я знаю.
P.S. Только, чтобы быть ясным, вопрос находится в контексте, который я отметил - ответ все-Perl, меньший магазин разработки является, очевидно, звучным "Perl использования к своей максимальной возможности".
Какие перлизмы вы имеете в виду?
Хорошо:
for(1..5) {}
или for( @foo ) {}
мой $count = @items;
map
, grep
и sort
: мой %foo = карта { $_->id => $_ } @объекты;
OK if limited:
die "Bad juju\n", если только $foo eq "good juju";
мой $foo = сдвиг; $foo = 'blarg', если только не определено $foo;
. Это использование, IMO, чище чем мой $foo = определено $_[0] ? shift : 'blarg';
. map
. Прототипы - это подсказки компилятора, а не "прототипы" в смысле любого другого языка. и
и или
против &&
и ||
. Весь ваш код должен быть согласован. Лучше всего, если вы используете политику Perl::Critic для реализации. Avoid:
local
нигде не совпадает с local
. Я пишу код, предполагая, что компетентный программист PERL будет читать его. Я не стараюсь быть умным, но я тоже не тупой.
Если вы пишете код для людей, которые не знают языка, вы собираетесь пропустить большую часть точки использования этого языка. Я часто считаю, что люди хотят преуспевать перлизм, потому что они отказываются учиться больше, чем они уже знают.
Так как вы говорите, что вы находитесь в небольшом магазине PERL, должно быть довольно легко спросить человека, который написал код, что это значит, если вы этого не понимаете. Такие вещи должны придумать обзоры кода и так далее. Каждый продолжает узнать больше о языке, поскольку у вас есть периодические и регулярные шансы для рассмотрения кода. Вы не должны пропустить слишком много времени, пройдя без других глазных яблок, глядя на чье-то код. Вы, конечно, не должны ждать до недели после того, как они покинут компанию.
Что касается новых напрошений, я всегда озадачен, почему кто-то подумает, что вы должны сидеть их перед клавиатурой и повернуть их свободно, ожидая продуктивную работу в кодовой базе, которую они никогда не видели.
Это также не ограничивается Perl. Это общая проблема программирования. Вы всегда должны быть узнать больше о ваших инструментах. Большинство крупных магазинов, которые я знаю, имеет мини-загрузочные, чтобы добраться до разработчиков до скорости на кодовой базе, включая любые биты хитрых кода, которые они могут столкнуться.
Я бы сказал Moose Moose Убивает 99,9% Perl-Isms, по Конвенции, которые не должны использоваться: символ настольный буксир, блокирующие объекты, общие нарушения BlackBox: лечение объектов в качестве массивов или хэшей Отказ Великая вещь, это все это, не принимая функциональность попадания «не используя ее».
Если «Perl-Isms», вы действительно ссылаетесь, - это мутаторская форма (предупреждающая «плохой идею», если $ Jood_idea), , если
, а до
, то я не T думаю, что у вас действительно большая часть аргумента, потому что эти «перлизм», похоже, не препятствуют читабельности для пользователей Perl, либо пользователей NonL Perl.
Я спрашиваю себе два простых вопроса:
тогда это плохое представление. Но
Тогда это хорошая идея.
Я не вижу никакой оправданной причины отклонить, скажем, строку интерполяции только потому, что Java и C не имеют его. Если
не является забавным, но я думаю, что начну подпрограмма с случайного
return undef unless <something>;
не так плохо.
Должно быть, как вы говорите, несколько лет назад, потому что Дамиан Конвей выбрал «загнал рынок» в соответствии со стандартами Perl с лучшими практиками Perl для последних нескольких годы.
Я работал в аналогично обоснованной среде - там, где нам не было разрешено принять последние лучшие практики, потому что это будет изменение , и никто не на достаточно высоком уровне в корпоративной структуре понял (или может быть обеспокоен понимать) Perl и подписаться на переезд в 21 век.
Корпорация, которая разворачивает технологию и сохраняет ее, но не покупает в экспертизе, ни по тренировку в доме, является , спрашивая для неприятностей.
(Я догадаю, что вы работаете в очень контролируемой связи - финансовые возможно, возможно?)
Я согласен с Брайаном на этом.
Возьмите копию Эффективное программирование на Perl: способы писать лучше, более идиоматический Perl (2-е издание) и относитесь к этому как к руководству. Он содержит множество лучших идиом и упакован небольшими кусочками информации, которые помогут вам написать хороший код Perl в стиле Perl, в отличие от кода Perl в стиле C или Java (или любого другого).