Что такое лучшая практика до использования perl-измов (идиоматические выражения) в Perl?

Несколько лет назад я участвовал в письменной форме лучшие методы/стиль кодирования для нашего (довольно большой и часто использующий Perl) компания. Это было сделано комитетом "старших" разработчиков Perl.

Как что-либо сделанное на основе консенсуса, это имело части, с которыми все не согласились. Понятное дело.

Часть, которая протерла неправильно большинство, была сильной рекомендацией НЕ использовать многие Perlisms (неточно определенный как идиомы кода, не существующие в, сказать C++ или Java), те, которые "Избегают использования '... если X'; конструкции".

Основное объяснение, устанавливаемое для таких правил как этот, было то, что у разработчиков не-Perl будет намного более трудное время с кодовой базой Perl иначе. Предположение здесь, которое я предполагаю, - то, что жокеи кода Perl являются более редкой породой в целом - и среди новых наймов к компании - чем non-Perlers.

Я задавался вопросом, является ли ТАКЖЕ - какие-либо хорошие аргументы, чтобы поддерживать или отклонить эту логику... это главным образом академическим любопытством в этой точке, поскольку стандарт кодирования Perl компании ожесточен и никогда не будет пересматриваться снова насколько я знаю.

P.S. Только, чтобы быть ясным, вопрос находится в контексте, который я отметил - ответ все-Perl, меньший магазин разработки является, очевидно, звучным "Perl использования к своей максимальной возможности".

10
задан DVK 5 April 2010 в 00:46
поделиться

6 ответов

Какие перлизмы вы имеете в виду?

Хорошо:

  • идиома для петель: for(1..5) {} или for( @foo ) {}
  • Scalar context evaluation of arrays: мой $count = @items;
  • map, grep и sort: мой %foo = карта { $_->id => $_ } @объекты;

OK if limited:

  • statement modifier control - trailing if, unless, etc.
    • Ограничение на ловушку ошибок и ранние возвраты. die "Bad juju\n", если только $foo eq "good juju";
    • Как отметил Шверн, еще одним хорошим использованием является условное присвоение значений по умолчанию: мой $foo = сдвиг; $foo = 'blarg', если только не определено $foo;. Это использование, IMO, чище чем мой $foo = определено $_[0] ? shift : 'blarg';.
    • Причина, по которой следует избегать: если тебе нужно добавить в чек или в другое, у тебя есть большая работа по переформатированию. IMO, переделывать утверждение (даже в хорошем редакторе) более деструктивно, чем набирать несколько "лишних" блоков.
  • Прототипы - используйте только для создания функций фильтрации, таких как map. Прототипы - это подсказки компилятора, а не "прототипы" в смысле любого другого языка.
  • Логические операторы - стандартизируйте, когда использовать и и или против && и ||. Весь ваш код должен быть согласован. Лучше всего, если вы используете политику Perl::Critic для реализации.

Avoid:

  • Local variables. Динамическая область видимости чертовски странна, и local нигде не совпадает с local.
  • Переменные пакета. Допускает плохие практики. Если вы считаете, что вам нужно глобальное общее состояние, рефактор. Если вам все еще нужно глобальное общее состояние, используйте одиночку.
  • Хакерия таблицы символов
6
ответ дан 3 December 2019 в 13:32
поделиться

Я пишу код, предполагая, что компетентный программист PERL будет читать его. Я не стараюсь быть умным, но я тоже не тупой.

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

Так как вы говорите, что вы находитесь в небольшом магазине PERL, должно быть довольно легко спросить человека, который написал код, что это значит, если вы этого не понимаете. Такие вещи должны придумать обзоры кода и так далее. Каждый продолжает узнать больше о языке, поскольку у вас есть периодические и регулярные шансы для рассмотрения кода. Вы не должны пропустить слишком много времени, пройдя без других глазных яблок, глядя на чье-то код. Вы, конечно, не должны ждать до недели после того, как они покинут компанию.

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

Это также не ограничивается Perl. Это общая проблема программирования. Вы всегда должны быть узнать больше о ваших инструментах. Большинство крупных магазинов, которые я знаю, имеет мини-загрузочные, чтобы добраться до разработчиков до скорости на кодовой базе, включая любые биты хитрых кода, которые они могут столкнуться.

30
ответ дан 3 December 2019 в 13:32
поделиться

Я бы сказал Moose Moose Убивает 99,9% Perl-Isms, по Конвенции, которые не должны использоваться: символ настольный буксир, блокирующие объекты, общие нарушения BlackBox: лечение объектов в качестве массивов или хэшей Отказ Великая вещь, это все это, не принимая функциональность попадания «не используя ее».

Если «Perl-Isms», вы действительно ссылаетесь, - это мутаторская форма (предупреждающая «плохой идею», если $ Jood_idea), , если , а до , то я не T думаю, что у вас действительно большая часть аргумента, потому что эти «перлизм», похоже, не препятствуют читабельности для пользователей Perl, либо пользователей NonL Perl.

1
ответ дан 3 December 2019 в 13:32
поделиться

Я спрашиваю себе два простых вопроса:

  • Я делаю это, потому что это дворцы умно и / или показывает мои обширные знания о Perl Arcana?

тогда это плохое представление. Но

  • Я делаю это, потому что это идиоматическое Perl и преимущества от четких преимуществ Perl?

Тогда это хорошая идея.

Я не вижу никакой оправданной причины отклонить, скажем, строку интерполяции только потому, что Java и C не имеют его. Если не является забавным, но я думаю, что начну подпрограмма с случайного

return undef unless <something>;

не так плохо.

7
ответ дан 3 December 2019 в 13:32
поделиться

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

Я работал в аналогично обоснованной среде - там, где нам не было разрешено принять последние лучшие практики, потому что это будет изменение , и никто не на достаточно высоком уровне в корпоративной структуре понял (или может быть обеспокоен понимать) Perl и подписаться на переезд в 21 век.

Корпорация, которая разворачивает технологию и сохраняет ее, но не покупает в экспертизе, ни по тренировку в доме, является , спрашивая для неприятностей.

(Я догадаю, что вы работаете в очень контролируемой связи - финансовые возможно, возможно?)

Я согласен с Брайаном на этом.

2
ответ дан 3 December 2019 в 13:32
поделиться

Возьмите копию Эффективное программирование на Perl: способы писать лучше, более идиоматический Perl (2-е издание) и относитесь к этому как к руководству. Он содержит множество лучших идиом и упакован небольшими кусочками информации, которые помогут вам написать хороший код Perl в стиле Perl, в отличие от кода Perl в стиле C или Java (или любого другого).

0
ответ дан 3 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: