Większość blogów, samouczków lub książek ma prywatne metody na dole każdej klasy / modułu. Czy to najlepsza praktyka?
Uważam, że korzystanie z prywatnych metod jest dla mnie wygodniejsze. Na przykład:
public
def my_method
# do something
minion_method
end
private
def minion_method
# do something
end
public
def next_method
end
W ten sposób uważam, że kod jest bardziej czytelny, zamiast ciągłego przewijania w górę iw dół, co jest bardzo irytujące.
Czy w tym podejściu jest coś strasznego? Czy posiadanie prywatnych metod na dole to nie tylko najlepsza praktyka i coś innego?
ruby
conventions
ZX12R
źródło
źródło
private def my_method...end
Odpowiedzi:
Moim zdaniem najlepszą praktyką jest pójście sekwencyjnie i deklarowanie swoich metod bez zachowania tajemnicy z punktu widzenia.
Na koniec możesz ustawić dowolną metodę jako prywatną, dodając po prostu:
private :xmethod
Przykład:
Czy to uzasadnia twoje pytanie?
źródło
Istnieje również opcja dodania
private
przed definicją metody od Ruby 2.1.Patrząc na definicję, od razu wiesz, czy metoda jest prywatna, bez względu na to, gdzie w pliku jest zdefiniowana. To trochę więcej pisania (jeśli nie uzupełniasz autouzupełniania) i nie wszystkie twoje
def
będą ładnie wyrównane.źródło
private
tylko raz, przedymethod
, również działa. Nie ma potrzeby wielokrotnego dodawania.zmethod
bezprivate
, ta metoda nie byłaby prywatna. Więc musisz to powtórzyć (przynajmniej z Rubim 2.3).Jak inni już zauważyli, konwencja polega na umieszczeniu metod prywatnych na samym dole, w ramach jednej klasy prywatnej. Jednak prawdopodobnie powinieneś również wiedzieć, że wielu programistów używa do tego metody z podwójnym wcięciem (4 spacje zamiast 2). Powodem jest to, że często nie widzisz słowa „prywatne” w swoim edytorze tekstu i zakładasz, że mogą one być publiczne. Poniżej znajduje się ilustracja:
Ta metoda powinna zapobiec konieczności przewijania w górę iw dół i sprawi, że inni programiści będą wygodniejsi w kodzie.
źródło
begin..end
zaraz poprivate
. Wtedy wcięcie może być ustawione automatycznie przez edytor, ponieważ kod wewnątrz elementubegin
jest (w powyższym przykładzie) wcięty semantycznie z 4 spacjami.public
a potemprivate
Myślę, że metody publiczne są pewnego rodzaju interfejsem obiektu i logiczne jest umieszczenie ich w najbardziej widocznym miejscu, tj. Na górze pliku.
źródło
Nie musisz umieszczać
public
aniprivate
powyżej każdej metody. Zwykle wszystkie moje metody prywatne umieszczam na końcu moich zajęć. Nie musisz też wyraźnie mówić,public
ponieważ metody są domyślnie publiczne. Na przykład:źródło
Pochodzę z tła Java i nienawidzę przewijania, aby zobaczyć typ metody. Myślę, że to szaleństwo, że nie można określić widoczności poszczególnych metod bez brzydoty. Skończyło się na umieszczeniu komentarza
#private
przed każdą metodą ssania, a następnie zadeklarowaniuprivate :...
.źródło
private def method...
że jest ładniejszyNie podoba mi się konieczność określania publicznego lub prywatnego dla każdej metody. Umieszczenie wszystkich metod prywatnych na dole pozwala mi mieć pojedyncze wystąpienie „prywatnego” na plik. Myślę, że to kwestia gustu.
źródło
Jeden styl polega na grupowaniu metod razem, tak aby można było używać tylko
private
iprotected
maksymalnie raz na klasę. Innym stylem jest określenie widoczności zaraz po definicji metody:Począwszy od Ruby 2.1.0
def
zwraca nazwę metody jako symbol, więc możliwy jest bardziej uproszczony styl:(Zauważ, że używamy
private_class_method
dla metod klasowych - w przeciwnym razie otrzymalibyśmyNameError: undefined method
odprivate
oczekuje metody instancji. Nawet jeśli używamy jej jako makra, jak w oryginalnym przykładzie, wpływa to tylko na widoczność metod instancji.)Najbardziej podoba mi się ten styl widoczności w wierszu, ponieważ pozwala on na dowolną organizację metod. Zmniejsza ryzyko dodania nowej metody w niewłaściwym miejscu i nieumyślnego uczynienia jej prywatną.
Jeśli chodzi o składnię metody klas, możesz to obsłużyć w ten sposób:
źródło
private_class_method
wezwaniu, a ostatnia część dotycząca używaniaclass << self
bloku, aby uniknąć konieczności korzystania z niego, to dobra wskazówka. Do tej pory nie wiedziałem, że metody klasy „nornal” (zadeklarowane za pomocądef self.foo; end
zamiastclass << self; def foo; end
nie będą miały wpływu naprivate
specyfikator.Dennis miał idealną odpowiedź, to znaczy, używając ruby> = 2.1, po prostu przedrostek def z private (lub protected, public)
Ale uważam, że teraz można również używać prywatnego jako bloku, jak w:
źródło
Generalnie moje metody zamawiam w następujący sposób:
private
, napisane tylko razUżywam funkcji „przejdź do definicji” w moim edytorze, aby nie wymagało to dużego przewijania. W każdym razie, jeśli klasa jest na tyle duża, że przewijanie staje się problematyczne, prawdopodobnie należy ją podzielić na kilka klas.
źródło
to_s
) pod koniec sekcji publicznej.