Mam takie głupie pytanie , dawno nie bawiłem się ruby on rails.
Wróciłem do tego W edytorze mam ustawione tab na 4 spacje (korzystam z sublimetext3)
W konsoli daje rails new test.
i to mi generuję app gdzie wszędzie jest ustawione tab na 2 spację można z jakimś parametrem to zrobić by było na 4 spacje… i nie musiał kombinować w edytorze żeby mi to prze konwertował czy coś …
Jest jakiś powód dla którego chcesz jednak używać 4 spacji? Wcięcia na dwie spacje są dość mocno przyjęte w rubym i raczej lepiej jest się dostosować. A samego sublime’a można łatwo skonfigurować żeby domyślnie używał 2 spacji pod tabem.
Bo masz ustawione na cztery Po prawej na dole będąc w pliku możesz sobie na szybko przełączyć na dwie i zobaczyć te pionowe linie od wcięć trochę gęściej Oprócz tego poszukaj gdzieś konfiguracji sublime’a pod ruby’ego, tam są domyślnie ustawione 2 spacje.
Dodatkowo gdybyś miał używać hamla - a nie widze powodu dla którego byś nie miał, to tam musisz używać 2spacjowych. Ogólnie to jeżeli całe środowisko używa 2 spacji to dorabiasz sobię masę problemów stosując inne rozwiązanie.
@sarin są ludzie, którzy uparcie nie lubią hamla (wolą stare, “poczciwe” erb), slim chyba też ma dwu spacjowe wcięcia (jeśli dobrze pamiętam).
Dwie spacje w Ruby to tak jakby nieoficjalny standard. Jak planuje się pracować z kimś w zespole nad projektem w Ruby/RoR to trzeba się dostosować i przestawić na 2 spacje.
Sam większość tego co pisałem to był Python, 4 spacje to standard wcięcia. Jak przyszło do pisania w Rubym… zmieniłem szerokość taba na 2 i tyle. Wcięcie to wcięcie, im mniejsze tym lepsze, bo się więcej kodu w linijce może zmieścić, zwłaszcza jak masz zagnieżdżone wywołania funkcji. Nikt mi nie powie, że przestawienie się z 4 spacji na 2 to jakiś problem, bo sam przez to przechodziłem i wszelkie problemy znajduje się na siłę, a nie dlatego, że coś naprawdę przeszkadza.
Do Sinatry właśnie używam Slima, i faktycznie ma wcięcia na 2 spacje. Przy okazji dowiedziałem się z powyższego cytatu, że jest jeszcze ten Haml.
Owszem, optycznie 4 spacje są trochę głębszym wcięciem niż 2, co rzuca się w oczy porównując kod Rubiego do Pythona, ale właściwie jest to tylko kwestia ustawienia odpowiedniej wartości w edytorze, i załatwione.
Dla mnie jako dla osoby początkującej zagadnienie takiej czy innej głębokości wcięcia praktycznie nie istnieje, w przeciwieństwie do trudności z zaakceptowaniem “niedomkniętych” bloków kodu w Pythonie, definiowanych właśnie wcięciami. Ciężko mi je przyjąć (bo przypominają i działają jak wcięcia akapitów w poezji lub prozie), w porównaniu z eleganckimi blokami w Rubim, kończącymi się słowem end. Może to wpływ nauki Pascala na studiach.
Ruby czy Python to nie jest C. W C nie ma czegoś takie jak przekazywanie funkcji jako argumentu innej funkcji i nie ma też chainowania funkcji. Z resztą czytelny kod, niezależnie ile będzie miał poziomów wcięć będzie nadal czytelny. czasem lepiej zmieścić w kilkunastu linijkach kodu niż rozdzielać na dziesiątki funkcji, bo dopiero wtedy takie skakanie po kodzie powoduje że kod nie jest czytelny.
W każdym kontrolerze w RoR masz na dzień dobry już dwa poziomy wcięć.
Hm… to dlaczego ostatnim argumentem funkcji qsort jest wskaźnik na ‘komparator’ ? Bez jaj - przekazywanie funkcji jako argumentu jest w C dość częste).
A ponieważ funkcja to jedynie wskaźnik na pewne miejsce a pamięci, może być zwracana jako wynik (albo być polem w strukturze zwracanej jako wynik), więc chainowanie w C jak najbardziej istnieje.
Też stosuję 2 spacje jako wcięcia, ale pamiętam że swego czasu ta kontrowersyjna reguła 8 była prostym sposobem na wymuszenie pisania krotkich/prostych funkcji.
W kontekscie Railsow i czytelnosci, Sandi Metz zaproponowala 4 reguły:
Classes can be no longer than one hundred lines of code.
Methods can be no longer than five lines of code.
Pass no more than four parameters into a method. Hash options are parameters.
Controllers can instantiate only one object. Therefore, views can only know about one instance variable and views should only send messages to that object (@object.collaborator.value is not allowed).
Kilka linijek na w akcji kontrolera to się zgodzę, jeśli chodzi o klasy przechowujące logikę aplikacji, to już się z tym nie zgodzę. Początkowo też tak uważałem, jednak w końcu doceniłem ten sposób pisania kodu. Ważne jest tutaj aby nazwy metod były dobrze nazwane. Zgodzę się, że w pewnych sytuacjach (ale tylko w pewny) kilka linijek w metodzie może być, ale nie kilkanaście. Kilkanaście linijek w metodzie powoduje, że metoda jest bardzo ciężka w testowaniu, a później we wprowadzaniu zmian (po jakimś czasie).