Ruby/Komentarze i organizacja kodu: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m nav |
Szymon wro (dyskusja | edycje) Nie podano opisu zmian |
||
Linia 1:
Ten rozdział zawiera kilka praktycznych porad.
=== Separatory instrukcji ===
Niektóre języki wymagają pewien rodzaj znaków przestankowych, często średników (<tt>;</tt>), by zakończyć każdą instrukcję w programie. Zamiast tego Ruby podąża za konwencją używaną w powłokach systemowych takich jak ''[[w:sh|sh]]'' i ''[[w:csh|csh]]''. Wiele instrukcji w jednej linii musi być odseparowanych średnikami, ale nie są one wymagane na końcu linii. Znak końca wiersza traktowanych jest jako przecinek. Jeżeli linia kończy się znakiem odwróconego ukośnika (<tt>\</tt>), znak końca linii jest ignorowany, co pozwala na utworzenie jednej linii logicznej podzielonej na kilka linii.
=== Komentarze ===
Po co pisać komentarze? Chociaż dobrze napisany kod ma tendencję do bycia dokumentowania siebie samego, skrobanie po marginesach jest często pomocne, a błędem jest sądzić, że inni będą w stanie spojrzeć na nasz kod i natychmiast zobaczyć go w ten sposób co ty. Poza tym, dla celów praktycznych, ty też jesteś inną osobą co parę dni... Kto z nas nie wrócił kiedyś do kodu programu, by go poprawić lub rozszerzyć program po pewnym czasie i powiedział, ''wiem, że to napisałem, ale co u licha to znaczy?''
Niektórzy doświadczeni programiści wskażą, całkiem poprawnie, że sprzeczne lub przestarzałe komentarze mogą być gorsze niż żadne. Z pewnością, komentarze nie powinny być substytutem czytelnego kodu. Jeżeli twój kod jest nieczytelny, prawdopodobnie zawiera również błędy. Możesz odkryć, że potrzebujesz więcej komentować, gdy uczysz się Rubiego, a mniej, jak staniesz się lepszy w wyrażaniu pomysłów w prostym, eleganckim, czytelnym kodzie.
Ruby podąża za ogólną konwencją skryptów, która używa symbolu <tt>#</tt> by oznaczać początek komentarza. Wszystko co występuje za znakiem <tt>#</tt> do końca linii jest ignorowane przez interpreter.
Również, by ułatwić wprowadzanie dużych bloków komentarzy, interpreter Rubiego ignoruje wszystko pomiędzy linią zaczynającą się od "<tt>=begin</tt>" a drugą linią zaczynającą się od "<tt>=end</tt>".
<pre>
#!/usr/bin/env ruby
Linia 22 ⟶ 25:
**********************************************************************
=end
</pre>
=== Organizacja kodu ===
Niezwykle wysoki poziom dynamizmu Rubiego oznacza, że klasy, moduły oraz metody istnieją tylko, gdy definiujący je kod zostanie uruchomiony. Jeżeli nawykłeś do programowania w bardziej statycznym języku, może to czasami prowadzić do niespodzianek.
<pre>
# The below results in an "undefined method" error:
Linia 33 ⟶ 39:
x + 1
end
</pre>
Nie zmusza to, jak mogło by się wydawać, do organizacji ściśle według stylu "od dołu do góry". Kiedy interpreter napotka definicję metody, może ona bezpiecznie zawierać niezdefiniowane referencje, dopóki będziesz pewny, że będą one zdefiniowane nim metoda zostanie wywołana.
<pre>
# Conversion of fahrenheit to celsius, broken
# down into two steps.
Linia 50 ⟶ 58:
printf "%.1f is a comfortable temperature.\n", f_to_c(72.3)
</pre>
So while this may seem less convenient than what you may be used to in Perl or Java, it is less restrictive than trying to write C without prototypes (which would require you to always maintain a partial ordering of what references what). Putting top-level code at the bottom of a source file always works. And even this is less of an annoyance than it might at first seem. A sensible and painless way to enforce the behavior you want is to define a main function at the top of the file, and call it from the bottom.
|