Ruby/Przetwarzanie wyjątków: ensure: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje) Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 1:
== Przetwarzanie wyjątków: ensure ==
Może się tak zdarzyć, że potrzebne jest dodatkowe sprzątanie, gdy metoda kończy swoją pracę. Być może otwarty plik powinien być zamknięty, bufor opróżniony, itp. Jeżeli byłby zawsze tylko jeden punkt wyjścia dla każdej metody, moglibyśmy z pełną ufnością umieść kod czyszczący w jednym miejscu i wiedzielibyśmy, że zostanie on wykonany. Jednakże, metoda może zwracać wartość z różnych miejsc, lub nasze zamierzone czyszczenie może niespodziewane ominięte z powodu wyjątku.
<pre>
begin
file = open("/tmp/some_file", "w")
Linia 9:
file.close
end
</pre>
W powyższym przykładzie, jeżeli wyjątek wystąpiłby w sekcji kodu, w której dokonujemy zapisu do pliku, plik mógłby pozostać otwarty. A my nie chcemy uciekać się tego rodzaju [[w:Redundancja|redundancji]]:
<pre>
begin
file = open("/tmp/some_file", "w")
Linia 20 ⟶ 22:
fail # raise an exception
end
</pre>
Ten kod nie dość, że niezdarny, to odrzuci nas od niego gdy stanie się on bardziej skomplikowany, ponieważ będzie wymagał obsługi każdego <tt>return</tt> i <tt>break</tt>.
<pre>
begin
file = open("/tmp/some_file", "w")
Linia 33 ⟶ 37:
file.close # ... and this always happens.
end
</pre>
<noinclude>
{{ProstaNawigacja|spis=Ruby|poprzart=Ruby/Przetwarzanie wyjątków: rescue|poprz=Przetwarzanie wyjątków: rescue|nastart=Ruby/Akcesory|nast=Akcesory}}
|