/ / Co jest najlepszą praktyką w zakresie używania perl-isms (wyrażeń idiomatycznych) w Perlu? - perl, styl kodowania, idiomatic-perl

Co to jest najlepsza praktyka w zakresie używania perl-isms (wyrażeń idiomatycznych) w Perlu? - perl, styl kodowania, idiomatic-perl

Kilka lat temu uczestniczyłem w pisaniu dobrych praktyk / stylu kodowania dla naszej (dość dużej i często używającej Perla) firmy. Zrobił to komitet "starszych" twórców Perla.

Cokolwiek zrobiono w drodze konsensusu, miało części, z którymi wszyscy się nie zgadzali. Duh.

Ta część, która była najtrudniejsza, była silnazalecenie, aby NIE używać wielu perioryzmów (luźno zdefiniowanych jako idiomy kodowe nieobecne w, powiedzmy C ++ lub Java), takich jak "Unikaj używania" ... chyba że X; "konstruuje".

Główne uzasadnienie dla takich zasad jak toJednym z nich było to, że programiści spoza Perla mieliby znacznie trudniejsze czasy z bazą kodową Perla w przeciwnym razie. Przypuszczam, że tutaj kodek dżokejów Perla jest rzadkością w całej gamie - i wśród nowych ofert dla firmy - niż poza Perlerami.

Zastanawiałem się, czy SO ma jakieś dobre argumentyaby wesprzeć lub odrzucić tę logikę ... w tej chwili jest to głównie ciekawość akademicka, ponieważ standard kodowania firmy Perl jest skostniały i nigdy nie zostanie zmieniony, o ile wiem.

P.S. Żeby było jasne, pytanie jest w kontekście, który zauważyłem - odpowiedź na cały mniejszy sklep perłowy Perla to oczywiście "wykorzystanie Perla do jego maksymalnej zdolności".

Odpowiedzi:

6 dla odpowiedzi № 1

Jakie perlisms masz na myśli?

Dobry:

  • idiomatyczny dla pętli: for(1..5) {} lub for( @foo ) {}
  • Skalarna ocena kontekstu tablic: my $count = @items;
  • map, grep i sort: my %foo = map { $_->id => $_ } @objects;

OK, jeśli jest ograniczony:

  • sterowanie modyfikatorem oświadczenia - końcowe jeśli, chyba, itp.
    • Ogranicza pułapkowanie błędów i wczesne zwroty. die "Bad jujun" unless $foo eq "good juju";
    • Jak zauważył Schwern, innym dobrym zastosowaniem jest warunkowe przypisywanie wartości domyślnych: my $foo = shift; $foo = "blarg" unless defined $foo;. To użycie jest IMO czystsze niż my $foo = defined $_[0] ? shift : "blarg";.
    • Powód uniknięcia: jeśli chcesz dodać dodatkowe zachowania do czeku lub innego, masz duże zadanie ponownego formatowania. IMO, kłopot z powtórzeniem instrukcji (nawet w dobrym edytorze) jest bardziej destrukcyjny niż wpisywanie kilku "niepotrzebnych" bloków.
  • Prototypy - używaj tylko do tworzenia funkcji takich jak map. Prototypy są kompilatorami, a nie "prototypami" w znaczeniu jakiegokolwiek innego języka.
  • Operatory logiczne - standaryzuj kiedy używać and i or vs. && i ||. Cały twój kod powinien być spójny. Najlepiej, jeśli użyjesz zasady Perl :: Critic do egzekwowania.

Uniknąć:

  • Zmienne lokalne. Zakres dynamiczny jest cholernie dziwny, i local nie jest taki sam jak local gdziekolwiek indziej.
  • Zmienne pakietowe. Włącza złe praktyki. Jeśli uważasz, że potrzebujesz globalnego współdzielonego państwa, refaktorze. Jeśli nadal potrzebujesz globalnie udostępnionego stanu, użyj singletonu.
  • Hackery stołu symboli

30 dla odpowiedzi nr 2

Piszę kod, zakładając, że kompetentny programista Perl będzie go czytał. Nie robię tego, by być sprytnym, ale też nie jestem głupi.

Jeśli piszesz kod dla osób, które nie wiedząw języku, będziesz tęsknił za większością punktów używania tego języka, często stwierdzam, że ludzie chcą zakazać perloryzmów, ponieważ nie chcą uczyć się więcej, niż już wiedzą.

Ponieważ mówisz, że jesteś w małym sklepie Perla,powinno być całkiem łatwo zapytać osobę, która napisała kod, co to znaczy, jeśli go nie rozumiesz. Tego rodzaju rzeczy powinny pojawiać się w recenzjach kodu itd. Każdy nadal uczy się więcej o języku, ponieważ masz okresowy i regularne szanse na sprawdzenie kodu, nie powinno się pozwolić, aby zbyt dużo czasu minęło, gdy inne gałki oczne nie spojrzałyby na kod kogoś, na pewno nie powinny czekać do tygodnia po opuszczeniu firmy.

Co do nowych pracowników, zawsze zastanawiałem się, dlaczego ktokolwiek mógłby pomyśleć, że powinieneś usiąść przed klawiaturą i odwrócić ich, oczekując produktywnej pracy w bazie kodu, której nigdy nie widzieli.

To też nie ogranicza się do Perla. To jest ogólny problem programistyczny, zawsze powinieneś uczyć się więcej o swoich narzędziach. Większość dużych sklepów, które znam, ma mini-bootcampy, aby przyspieszyć pracę programistów w bazie kodu, w tym wszelkie fragmenty trudnego kodu, który mogą napotkać.


7 dla odpowiedzi nr 3

Zadaję sobie dwa proste pytania:

  • Czy robię to, ponieważ jest to diabelnie sprytnie i / lub pokazuje moją rozległą wiedzę na temat arcana Perla?

To zły pomysł.

  • Czy robię to, ponieważ jest to idiomatyczny Perl i korzysta z wyraźnych zalet Perla?

To jest dobry pomysł.

Nie widzę żadnego uzasadnionego powodu, aby odrzucić, powiedzmy, interpolację ciągów tylko dlatego, że Java i C jej nie mają. unless jest zabawny, ale myślę, że podprogram zaczyna się sporadycznie

return undef unless <something>;

nie jest tak źle.


2 dla odpowiedzi № 4

To musiało być, jak mówisz, kilka lat temu, ponieważ Damian Conway "opanował rynek" w standardach Perla Perl Najlepsze praktyki przez ostatnie kilka lat.

Pracowałem w podobnie skostniałym środowisku - gdzie nie wolno nam było przyjmować najnowszych najlepszych praktyk, bo tak by było Zmianai nikt na wystarczająco wysokim poziomie w strukturze korporacyjnej nie rozumiał (ani nie mógł zrozumieć) Perla i nie podpisał się w momencie przejścia do 21 wieku.

Korporacja, która wdraża technologię i ją zachowuje, ale nie nabywa doświadczenia ani nie trenuje w domu, jest pytając na kłopoty.

(Domyślam się, że pracujesz w środowisku kontrolowanym przez wysoce zmienne - może finansowo?)

Zgadzam się z Brianem na to przy okazji.


1 dla odpowiedzi nr 5

Powiedziałbym Łoś zabija 99.Zwykle 9% Perl-izmów, których nie powinno się używać: symboliczne hacki stołowe, obiekty reblessingu, powszechne łamanie blackboxów: traktowanie obiektów jako tablic lub skrótów. "nie używać tego".

Jeśli "perl-isms", do których naprawdę się odnosisz, to forma mutatora (ostrzeż "zły pomysł", chyba że $ good_idea), unless, i until wtedy nie sądzę, że naprawdę masz wiele kłótni, ponieważ te "perlizmy" nie hamują czytelności ani dla użytkowników perla, ani dla użytkowników innych niż perl.


0 dla odpowiedzi № 6

Odbierz kopię Skuteczne programowanie perlowe: sposoby na lepsze pisanie, więcej peri idiomatycznych (wydanie drugie)i traktuj to jako wytyczną. Zawiera wiele lepszych idiomów i zawiera wiele informacji, które pozwolą ci napisać dobry kod Perla w stylu Perla, w przeciwieństwie do kodu Perla w języku C lub Java (lub czegoś podobnego).