CodeRush with Refactor! Pro vs ReSharper

Jul 9, 2008 - 4 minute read -

Every programmer knows, that samo Visual Studio jako narzędzie do pisania kodu źródłowego już nie wystarcza. Istnieje szereg Addon-ów do Visual Studio, które w znaczący sposób potrafią usprawnić pracę. Ja na codzień wykorzystuję takie narzędzia jak: ViEmu, GhostDoc oraz Smart Paster. Przez ostatnie 1,5 roku korzystałem również z CodeRush + Refactor! Pro, ale od momentu pojawienia sie publicznych wersji ReSharper-a 4.0 beta postanowiłem przyjrzeć się bliżej osławionemu ReSharper-owi.

Po kilkumiesięcznej pracy z tym narzędziem spróbuję dokonać porównania obu produktów z zakresu tych funkcji, z których najczęściej korzystam.

Pod niektórymi obrazkami kryją się linki z animacją.

Refactoring

W obu produktach występuje bardzo podobna ilość jak i funkcjonalność oferowanych sposobów refactorowania. Małą niedogodnością ReSharpera jest czasem potrzeba korzystania z pomocy myszki. Do obsługi CodeRush wystarczy wyłącznie klawiatura.

Przykład zamiany sygnatury metody

R#

CR

Generowanie kodu

W generowaniu kodu oba produkty mają swoje mocne i słabe strony. Możliwości tworzenia inteligentnych szablonów kodu w CodeRush (Templates) są dużo większe aniżeli w ReSharper (Live Templates). Chodzi tu przede wszystkim o zdefiniowanie warunków kiedy dany szablon może wygenerować kod. W CodeRush możemy zdefiniować, że wpisanie ‘c’ + spacja będzie co innego znaczyło w ciele “switch” np. wygeneruje się “case” a co innego w “foreach” np. wygeneruje się “continue”. W ReSharper elastyczność ta jest o wiele mniejsza. Da się jednak bez tego żyć. Większym problemem, tym razem w CodeRush, jest brak możliwości współdzielenia szablonów. Szablony są zdefiniowanie w katalogu użytkownika oraz istnieje jedynie ręczny export i import. W ReSharper możemy mieć zbiór szablonów:

  • dla systemu
  • dla użytkownika
  • dla solution - wszyscy programiści pracujący nad danym projektem mają tą samą cześć zbioru szablonów np. specyficzną dla danego projektu solution
  • dla użytkownika i solution
  • zdefiniowany w zewnętrznym pliku

ReSharper posiada jeszcze jeden rodzaj szablonów,którego nie ma CodeRush, a mianowicie szablon pliku.

Bardzo często w trakcie pisania testów jednostkowych traktujemy test jako nasz poligon API. Zaczynamy pisać kod również pod kątem dostępności naszych metod czy properties na zewnątrz klasy. Po napisaniu testu oba programy potrafią wygenerować tzw. method stubs i property stubs.

ReSharper czasem bywa mało intuicyjny, co sprawia że warto jednak przejrzeć dokumentację w celu zapoznania się ze wszystkimi funkcjami. To jest powód dlaczego R# potrafi zaskakiwać użytkowników nawet po dłuższym okresie korzystania z niego. Sam o tym się przekonałem kiedy poszukiwałem sposobu na łatwe tworzenie przeciążonej metody. W CodeRush wystarczyło aby kursor był na nazwie metody wcisnąć Ctrl+´ a potem operować strzałkami i spacją w celu wybrania parametrów metody…

… W ReSharper należy zaznaczyć parametry a następnie Alt+Enter …

A to oznacza ze nią da się zrobić przeciążenia metody kiedy chcemy zrezygnować np pierwszego i trzeciego parametru metody.

Ciekawym sposobem jest generowanie properties na podstawie fields. W ReSharper wystarczy nacisnąć Alt+Insert i wybrać odpowiednią pozycję.

CodeRush posiada coś co się nazywa SmartPaste i SmartCopy. W tym wypadku wystarczy skopiować field i po prostu wkleić w puste mieście. Czyli to co programiści lubią najbardziej ;) copy & paste :).

Wada powyższego rozwiązania ujawnia się wówczas kiedy mamy duża ilość zmiennych o różnorodnych typach. Wtedy SmartPaste nie zawsze chce działać i rozwiązanie z ReSharper mimo ze mniej efektowne, jest bardziej efektywne.

Dodatkowe cechy ReSharpera …

… których nie posiada CodeRush.

Analiza kodu

ReSharper analizuje kod na bieżąco pod względem jego składni. Dzięki temu możemy zauważyć błędy już przed samą kompilacją. Dodatkowo potrafi podpowiadać nam jak możemy lepiej napisać kawałek kodu.

Niestety ma to czasem swoją cene. Wymaga więcej pamięci oraz potrafi nieźle spowolnić pracę Visual Studio zwłaszcza kiedy korzystamy ze składni typu DSL-like np. Podczas korzystania z NBehave kiedy to piszemy 30 linii kodu taktując je jako jeden ciąg.

Wiecej o analizie kodu.

Organizacja i czyszczenie kodu

Javowcy posiadają coś co się nazywa Jalopy, a CSharpowcy dość długo nie posiadali nic. ReSharper nie jest może tak dobry jak Jalopy ale jest to wg mnie najlepsze aktualnie rozwiazanie na rynku dla C#. Sposób automatycznego sortowania kodu można zdefiniować sobie wg własnego życzenia za pomocą składni XML. Oczywiście organizacja kodu może być współdzielona przez innych programistów w celu stosowania wspólnego standardu.

Więcej o organizacji i czyszczeniu kodu

ToDo Explorer

Mała rzecz a cieszy. Visual Studio mimo iż pozwala na zdefiniowanie znaczników typu TODO, FIX, HACK etc. w komentarzach to nie potrafi później wyświetlać kompletnej, zbiorczej listy występowania miejsc z tego typu komentarzami. ReSharper to potrafi.

Unit Testing

Teraz juz mamy wszystko w jednym narzędziu, łącznie z uruchamianiem, debugowaniem i profilowaniem (o ile mamy zainstalowany JetBrains Profiler) testów. Standardowo ReSharper potrafi obsługiwać framework NUnit, ale udostępnia API do integrowania się z innymi TestRunnerami np. z Gallio. Gallio jest ciekawym projektem. Docelowo ma być to platforma do uruchamiania testów z najróżniejszych frameworków. Gallio udostępnia plugin do ReSharpera dzięki czemu automatycznie powiększa nam się ilość obsługiwanych frameworków do testowania przez ReSharper-a.

… Przy okazji pierwszego postu witam serdecznie wszsytkich bloggerów jak i czytelników zine.net.pl :) …

Tags: resharper

Ignoring test in MbUnit 3.0.5

comments powered by Disqus