SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
Clean Code w Ruby
                 czyli kod musi być CZYSTY!




LRUG 3.07.2012                         © Rafał "RaVbaker" Piekarski
Kim jestem?
•   programista od 8 lat

•   znam Ruby/Rails od ponad
    5 lat - WorkingWithRails

•   ostatnio pracowałem
    w porównywarce Nokaut.pl

•   github: ravbaker

•   twitter: @ravbaker
Skąd ten cały szum?
Co to jest czysty kod?
• prosty
• elegancki
• wydajny
• czytelny
• bez powtórzeń (DRY)
• łatwy w rozbudowie
• jak dobrze napisana proza
Zgadzacie się?
Dlaczego warto?
Agenda
• zasada skautów   • obiekty i struktury
                     danych
• znaczące nazwy
                   • obsługa błędów
• funkcje
                   • testy jednostkowe
• komentarze
                   • klasy
• formatowanie
                   • systemy
Zostaw kod czystszym
   niż go zastałeś.
Znaczące nazwy
•   jeśli nazwa wymaga komenarza nie jest dobrą
    nazwą: d, af_objects, the_list, a2

•   unikaj dezinformacji:
    controller_for_efficient_handling_of_strings vs.
    controller_for_efficient_storage_of_strings

•   tworzenie nazw które można wymówić: time_ymdhis

•   rzeczowniki (lub wyrażenia rzeczownikowe) dla klas i
    czasowniki (lub wyrażenia czasownikowe) dla metod:
    AddressParser, Manager, Processor
    delete_page, save, wait_until

•   nie dodawać nadmiarowego kontekstu:
    LSBAccountAddress
Funkcje
• Celem jest aby opowiadały historię systemu
• Podstawową regułą jest aby były małe -
  mieściły się na jednym (małym) ekranie
• Powinny robić jedną rzecz!
• Zasada zstępująca i nie mieszanie
  poziomów abstrakcji
• Nie powtarzaj się! (DRY)
• Nazwy opisowe i wyjaśniające co się dzieje
  z argumentami: include_teardown_page()
  check_password(user_name, password)

• Idealna liczba argumentów to... "zero"
• Więcej niż 3 argumenty nie powinno
  być nigdy używane

• Argumenty-flagi są okropne: render(is_suite)
  lepiej render_for_suite() i render_for_single_test()

• Unikaj efektów ubocznych
Komentarze
 Nie komentuj złego kodu - popraw go.
          Brian w. Kernighan i P. J. Plaugher
Dobre komentarze           Złe komentarze

    Publiczne API       zamknięcia bloków i tagów

wyjaśnienie zamierzeń     zakomentowany kod

  ostrzeżenia przed
                         nadmiarowe komentarze
   konsekwencjami
                        komentarze niepublicznych
prawdziwe listy TODO
                                 metod
                            znaczniki pozycji:
                          # #### Action #####
• nie używaj komentarza kiedy możesz to
    wyjaśnić kodem:
    x = 10 # assigns number 10 to variable x

•   komentarze nie naprawią złego kodu

•   licz się z tym, że komentarze mogą zawierać
    kłamstwa

• celem komentarzy jest wyjaśnić kod,
    który nie wyjaśnia się sam
Formatowanie
 Bądź konsekwentny!
Obiekty i struktury danych
Prawo demeter
    głosi, że metoda f() klasy C powinna
        wywoływać tylko metody z:

•C
• obiektu utworzonego przez f()
• obiektu przekazanego jako argument do f()
• obiektu umieszczonego w zmiennej
  instancyjnej klasy C
ActiveRecord


• to struktura danych!
• do zasad biznesowych powinny być
  tworzone osobne obiekty!
Obsługa błędów
• wyjątki zamiast kodów powrotu
• osobne klasy wyjątków dla różnych potrzeb
• nie zwracamy nil
• nie przekazujemy nil
Testowanie
• testy i kod produkcyjny pisany razem!
• staraj się aby testy były czytelne
• testy są tak samo ważne jak kod
  produkcyjny

• pamiętaj, mając testy łatwiej refaktorować
• jedna asercja lub koncept na test *
zasada F.I.R.S.T.

• Szybkie (Fast)
• Niezależne (Independent)
• Powtarzalne (Repeatable)
• Samokontrolujące się (Self-Validating)
• O czasie (Timely)
Klasy

• Powinny być małe!
• SRP - Zasada pojedyńczej odpowiedzialności
• Organizuj zmiany
Systemy

• separowanie (rozcięcie) problemów
• DCI - Data Context Interaction
• DSL - Domain-specific language
z: single-page-applications-with-coffeescript-polish © Andrzej Krzywda
Dzięki za uwagę




mało? Prezentacja Uncle Boba o Clean Code w Ruby

Weitere ähnliche Inhalte

Ähnlich wie Clean code w Ruby

[PL] Jak programować aby nie zwariować?
[PL] Jak programować aby nie zwariować?[PL] Jak programować aby nie zwariować?
[PL] Jak programować aby nie zwariować?Jakub Marchwicki
 
[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?
[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?
[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?Andrzej Krzywda
 
Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegroallegro.tech
 
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...Future Processing
 
Wyboista droga do dobrego kodu. ...
Wyboista droga do dobrego kodu.                                              ...Wyboista droga do dobrego kodu.                                              ...
Wyboista droga do dobrego kodu. ...Future Processing
 
Dobre przepisy na cake php
Dobre przepisy na cake phpDobre przepisy na cake php
Dobre przepisy na cake phpDaniel Mendalka
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówMichal Lukaszewski
 
Zarządzanie pamięcią w i os 5
Zarządzanie pamięcią w i os 5Zarządzanie pamięcią w i os 5
Zarządzanie pamięcią w i os 5pawelqus
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
REvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w RailsachREvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w RailsachThe Software House
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Ewolucja architektury Getresponse Api
Ewolucja architektury Getresponse ApiEwolucja architektury Getresponse Api
Ewolucja architektury Getresponse ApiMichal Giergielewicz
 
Code review
Code reviewCode review
Code reviewDivante
 
Pisząc kod natywny C/C++, czyli nie taki diabeł straszny
Pisząc kod natywny C/C++, czyli nie taki diabeł strasznyPisząc kod natywny C/C++, czyli nie taki diabeł straszny
Pisząc kod natywny C/C++, czyli nie taki diabeł strasznyAdam Sawicki
 
HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymDariusz Jagieło
 

Ähnlich wie Clean code w Ruby (20)

[PL] Jak programować aby nie zwariować?
[PL] Jak programować aby nie zwariować?[PL] Jak programować aby nie zwariować?
[PL] Jak programować aby nie zwariować?
 
[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?
[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?
[PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?
 
Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegro
 
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
[Quality Meetup#12] P. Podsiadlik, R. Peroń - Testy regresji z perspektywy pi...
 
Wyboista droga do dobrego kodu. ...
Wyboista droga do dobrego kodu.                                              ...Wyboista droga do dobrego kodu.                                              ...
Wyboista droga do dobrego kodu. ...
 
Dobre przepisy na cake php
Dobre przepisy na cake phpDobre przepisy na cake php
Dobre przepisy na cake php
 
Olga Żądło - Robot Framework
Olga Żądło - Robot FrameworkOlga Żądło - Robot Framework
Olga Żądło - Robot Framework
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędów
 
Refaktoryzacja
RefaktoryzacjaRefaktoryzacja
Refaktoryzacja
 
Zarządzanie pamięcią w i os 5
Zarządzanie pamięcią w i os 5Zarządzanie pamięcią w i os 5
Zarządzanie pamięcią w i os 5
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
REvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w RailsachREvolution, czyli o bardziej obiektowym podejściu w Railsach
REvolution, czyli o bardziej obiektowym podejściu w Railsach
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Ewolucja architektury Getresponse Api
Ewolucja architektury Getresponse ApiEwolucja architektury Getresponse Api
Ewolucja architektury Getresponse Api
 
Code review
Code reviewCode review
Code review
 
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
 
Pisząc kod natywny C/C++, czyli nie taki diabeł straszny
Pisząc kod natywny C/C++, czyli nie taki diabeł strasznyPisząc kod natywny C/C++, czyli nie taki diabeł straszny
Pisząc kod natywny C/C++, czyli nie taki diabeł straszny
 
HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastym
 

Clean code w Ruby

  • 1. Clean Code w Ruby czyli kod musi być CZYSTY! LRUG 3.07.2012 © Rafał "RaVbaker" Piekarski
  • 2. Kim jestem? • programista od 8 lat • znam Ruby/Rails od ponad 5 lat - WorkingWithRails • ostatnio pracowałem w porównywarce Nokaut.pl • github: ravbaker • twitter: @ravbaker
  • 4. Co to jest czysty kod? • prosty • elegancki • wydajny • czytelny • bez powtórzeń (DRY) • łatwy w rozbudowie • jak dobrze napisana proza
  • 7. Agenda • zasada skautów • obiekty i struktury danych • znaczące nazwy • obsługa błędów • funkcje • testy jednostkowe • komentarze • klasy • formatowanie • systemy
  • 8. Zostaw kod czystszym niż go zastałeś.
  • 10. jeśli nazwa wymaga komenarza nie jest dobrą nazwą: d, af_objects, the_list, a2 • unikaj dezinformacji: controller_for_efficient_handling_of_strings vs. controller_for_efficient_storage_of_strings • tworzenie nazw które można wymówić: time_ymdhis • rzeczowniki (lub wyrażenia rzeczownikowe) dla klas i czasowniki (lub wyrażenia czasownikowe) dla metod: AddressParser, Manager, Processor delete_page, save, wait_until • nie dodawać nadmiarowego kontekstu: LSBAccountAddress
  • 11. Funkcje • Celem jest aby opowiadały historię systemu • Podstawową regułą jest aby były małe - mieściły się na jednym (małym) ekranie • Powinny robić jedną rzecz! • Zasada zstępująca i nie mieszanie poziomów abstrakcji • Nie powtarzaj się! (DRY)
  • 12. • Nazwy opisowe i wyjaśniające co się dzieje z argumentami: include_teardown_page() check_password(user_name, password) • Idealna liczba argumentów to... "zero" • Więcej niż 3 argumenty nie powinno być nigdy używane • Argumenty-flagi są okropne: render(is_suite) lepiej render_for_suite() i render_for_single_test() • Unikaj efektów ubocznych
  • 13. Komentarze Nie komentuj złego kodu - popraw go. Brian w. Kernighan i P. J. Plaugher
  • 14. Dobre komentarze Złe komentarze Publiczne API zamknięcia bloków i tagów wyjaśnienie zamierzeń zakomentowany kod ostrzeżenia przed nadmiarowe komentarze konsekwencjami komentarze niepublicznych prawdziwe listy TODO metod znaczniki pozycji: # #### Action #####
  • 15. • nie używaj komentarza kiedy możesz to wyjaśnić kodem: x = 10 # assigns number 10 to variable x • komentarze nie naprawią złego kodu • licz się z tym, że komentarze mogą zawierać kłamstwa • celem komentarzy jest wyjaśnić kod, który nie wyjaśnia się sam
  • 18. Prawo demeter głosi, że metoda f() klasy C powinna wywoływać tylko metody z: •C • obiektu utworzonego przez f() • obiektu przekazanego jako argument do f() • obiektu umieszczonego w zmiennej instancyjnej klasy C
  • 19. ActiveRecord • to struktura danych! • do zasad biznesowych powinny być tworzone osobne obiekty!
  • 21. • wyjątki zamiast kodów powrotu • osobne klasy wyjątków dla różnych potrzeb • nie zwracamy nil • nie przekazujemy nil
  • 23. • testy i kod produkcyjny pisany razem! • staraj się aby testy były czytelne • testy są tak samo ważne jak kod produkcyjny • pamiętaj, mając testy łatwiej refaktorować • jedna asercja lub koncept na test *
  • 24. zasada F.I.R.S.T. • Szybkie (Fast) • Niezależne (Independent) • Powtarzalne (Repeatable) • Samokontrolujące się (Self-Validating) • O czasie (Timely)
  • 25. Klasy • Powinny być małe! • SRP - Zasada pojedyńczej odpowiedzialności • Organizuj zmiany
  • 26. Systemy • separowanie (rozcięcie) problemów • DCI - Data Context Interaction • DSL - Domain-specific language
  • 28. Dzięki za uwagę mało? Prezentacja Uncle Boba o Clean Code w Ruby