Zasady pisania poprawnego kodu w Ruby

Zaciekawiły mnie zasady pisania poprawnego kodu w Ruby, i szukając informacji o tym znalazłem taki oto przewodnik dla estetów: The Ruby Style Guide. Opisano tam bardzo dużo zasad, i jak dla mnie, w większości są one bardzo ezoteryczne ;).

Podobno konwencje są jak jednorożce czyli mocno fikcyjne :slight_smile:

Jak piszesz sam, to możesz olać konwencje lub przyjąć swoje. Jak ktoś jeszcze pisze i/lub czyta, to już lepiej się trzymać jakiejś konwencji. Szczególnie ważne jak tych osób jest kilkadziesiąt :stuck_out_tongue_winking_eye:

1 Like

Batsov spoko. Do pary: https://github.com/bbatsov/rails-style-guide

1 Like

Z częścią się zgadzam, z innymi nie.

Natomiast błagam, formatuj kod. To jest IMHO najważniejsze, bo o ile do każdego stylu kodowania można się przyzwyczaić (a pracowałem już z bardziej i mniej despotycznymi seniorami), tak losowe wstawianie spacji jest po prostu niekulturalne. :wink:

+100000000000000

Choć, ciekawa anegdota: na eurucampie w ostatni weekend pojawiła się b. ciekawa prezentacja Austina Seraphina na temat accessibility w różnych aplikacjach mobilnych. Austin jest niewidomy. W dyskusji po prezentacji w pewnym momencie powiedział, że nie widzi (ba-dum-psh) sensu w indentacji, gdyż jego czytnik audio utrudnia w takich sytuacjach zrozumienie kodu. Jakby jednak nie patrzeć, Austin jest przypadkiem brzegowym. Po prostu świeże wspomnienie odrobinę powiązane z tematem, więc postanowiłam się podzielić. :wink:

A to nie jest tak, że przyjmujesz wtedy złe nawyki? Jasne, konwencje są różne, i w zespołach warto ustalić wspólne, ale imho przyjęcie jakichkolwiek we własnej pracy ułatwia późniejsze utrzymanie dyscypliny. Plus, jeśli piszesz coś OS, to prędzej czy później ktoś inny to przeczyta. :wink:

Jak @filiptepper powiedział konieczne jest dobre formatowanie. Myślę, że najprostsze i podstawowe zasady dobrze wyłożył Russ Olssen, tutaj ściągawka, której warto się trzymać i jest wspólna dla większości projektów Rubiowych: https://gist.github.com/fknappe/1806524#file-1-eloquent_ruby_basics-markdown

Faktycznie, przejrzyście i zwięźle.
Z tym zaleceniem: Avoid comments to explain how the code works, to chyba nie warto być takim ortodoksyjnym w stosunku do osób początkujących. Myślę że w ich przypadku konieczne jest opisywanie, jak i po co działa dany fragment kodu. Np. ja właśnie tak robię, bo muszę.
Jest jeszcze jedna sprawa: Ruby indentation convention: two space per level (don’t ever use tab spaces for Ruby indentation). Czy to oznacza, że te wcięcia trzeba “nabijać” klawiszem spacji? W edytorze ustawiłem wielkość tabulacji na dwie spacje, i wcięcia robię właśnie takim tabulatorem. Ale to chyba jednak niedobrze, czytając powyższe zalecenia?

Wcięcia zazwyczaj robi się tabulatorem, chodzi tylko o ustawienie edytora żeby go zamieniał na spacje.

Oczywiście, pisałem w kontekście sytuacji, gdzie ktoś nie ma zamiaru dzielić się kodem. Jak trafi do teamu, to i tak będzie się musiał nauczyć i trzymać panującej tam konwencji :wink:

podejrzewam, że to kwestia przyzwyczajenia

Ale jakiego przyzwyczajenia? W sensie, że ktoś jest przyzwyczajony do “nabijania” wcięć klawiszem spacji, a ktoś inny odpowiednio dopasowanym tabulatorem?

Dodam jeszcze, że istnieją również gemy, które pozwalają sprawdzać jakość naszego kodu w praktyce.
Rubycritic (to chyba coś świeżego, prawda?) https://github.com/whitesmith/rubycritic
Rubocop: https://github.com/bbatsov/rubocop

Choć promowana przez rubocop zasada korzystania z pojedynczych ciapków wokół stringów, w których nie ma interpolacji jest dla mnie dosyć, hm, arbitralna. Na szczęście dokumentacja opisuje, jak możemy wyłączać kontrowersyjne dla nas zasady.