2015-07-06 7 views
6

wiem Ruby obsługuje przyrostek if jak:Jaki jest cel używania sufiksu "if" w Ruby?

number = -42 if opposite 

ale to, co jest celem tego? Dlaczego miałby on być używany zamiast oświadczenia prefiksu if?

+0

Myślę, że ta forma "sprytnego" zadania jest brzydka, ale w innych przypadkach: 'raise some_exception if something_bad'. – user2864740

+0

Ruby ma to, ponieważ Perl ma to, Perl ma to, ponieważ (AFAIK) czasami czyta się lepiej. –

+2

@ user2864740, Całkowicie się z Tobą zgadzam. Pamiętam, jak czytałem wiersz "Wszystko dobrze, jeśli wszystko się dobrze kończy" i myśląc, o ile lepiej byłoby, gdyby: "Jeśli wszystko się dobrze skończy, wszystko jest w porządku". –

Odpowiedz

1

Jest taki sam jak przedrostek, ale krócej. Jedynym powodem jest zachowanie pionowej przestrzeni w edytorze tekstu.

3

Może to ułatwić czytanie kodu w niektórych przypadkach. Uważam, że jest to prawda, szczególnie w przypadku unless, gdzie masz jakieś działanie Państwo zwykle chcesz wykonać:

number = -42 unless some_unusual_circumstance_holds 

Gdy masz go za unless, dla symetrii ma sens wspierać go if także.

+0

Nie rozumiem, dlaczego mówisz "jeśli" tylko pośrednio Jeśli masz "chyba" dla rzeczy, które zwykle chcesz wspierać, masz "jeśli" dla rzeczy, które wyjątkowo chcesz wspierać. – sawa

3
number = -42 if opposite 

jest taka sama jak

if opposite 
    number = -42 
end 

Niektórzy ludzie preferują jedną wkładkę ze względów czytelności. Wyobraź sobie linię podobną do:

process_payment if order_fulfilled? 

Czy to nie jest miłe?

6

Przyrostek stylu if i unless może być dobry dla "klauzul ochronnych", w formie:

return if ... 
return unless ... 

Oto przykład:

# suffix-style 
def save 
    return false if invalid? 
    # go for it 
    true 
end 

Versus:

# indented style 
def save 
    if valid? 
    # go for it 
    true 
    else 
    false 
    end 
end 

W drugim przykładzie cała implementacja metody ma o przesuń się o jedno wcięcie ze względu na sprawdzanie valid? i potrzebujemy dodatkowej klauzuli else. W stylu sufiksu kontrola invalid? jest uznawana za skrzynkę krawędziową, którą obsługujemy, a następnie wyskakujemy, a pozostała część metody nie wymaga klauzuli indent lub else.

Jest to czasami określane jako "klauzula strażnicza" i jest oznaczone jako recommended przez przewodnik stylowy Ruby.

+0

@vgoff Edytowałem swoją odpowiedź, aby wyjaśnić, że przykładowy kod powinien zwracać różne wartości dla poprawnych i nieprawidłowych ścieżek kodu. –

2

Styl Postfix nie ma sekcji else. Jest to przydatne, gdy chcesz zrobić coś tylko z jednym z dwóch przypadków podzielonych przez warunek i nie chcesz zadzierzgnąć z innym przypadkiem.