Pokazywanie postów oznaczonych etykietą Narzędziownia. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Narzędziownia. Pokaż wszystkie posty

niedziela, 12 września 2010

[Narzędziownia] CodeRush Express

CodeRush Express jest narzędziem, które niesamowicie ułatwia mi pracę z kodem. Co prawda jest to tylko darmowa wersja potężnego programu jakim jest pełna wersja CodeRush i zawiera masę ograniczeń oraz nie posiada wielu funkcjonalności. Jest zaledwie odbiciem tego co można uzyskać po zapłaceniu całkiem sporej kwoty (od 249$). Pomimo tego po krótkim okresie przyzwyczajenia daje całkiem sporego boosta podczas pisania.
Niestety w wersji dla Visual Studio 2010 cześć już i tak ograniczonych funkcjonalności została jeszcze bardziej obcięta , gdyż niektóre operacje przejęło samo Visual Studio. Wprowadza to trochę zamieszania i niejednolity interfejs współpracy z programistą; oczywiście w wersji płatnej wszystkie te operacje wykonywane są przez CodeRush. Te wyłączone z Visual Studio 2010 opcje ciągle działają prawidłowo w wersji 2008, dlatego też praca w starszej wersji jest nawet wygodniejsza. O ironio.
Dużą część funkcji wywołuje się za pomocą "magicznego skrótu", domyślnie jest to Ctrl+~ (tylda). Dostępne opcje będą się zmieniać w zależności od kontekstu z jakiego jest ten skrót wywoływany (miejsce umieszczenia kursora lub zaznaczony fragment kodu).
Poniżej kilka z ułatwień, z których korzystam podczas normalnej pracy. Jest i tak tylko część z dostępnych w darmowej wersji, na poznanie ich wszystkich trzeba poświęcić trochę więcej czasu, może kiedyś uda mi się opanować ich trochę więcej.

Deklarowanie zmiennych bez znajomości typu
Nie chodzi mi bynajmniej o słowo kluczowe var, chodzi o odwrotny niż zwykle sposób deklarowanie zmiennych. Jeśli nie pamiętamy jaki typ zwraca funkcja najpierw wywołujemy funkcję, potem wciskamy magiczny skrót i wybieramy Declare local, CodeRush sam rozpozna typ i pozostawi zaznaczenie na nowej nazwie zmiennej. Doskonale sprawdza się to w połączeniu z funkcjami o oczywistych funkcjach, na przykład wykonanie powyższych czynności dla funkcji GetSession() zaproponuje nam nazwę session, więc nie pozostanie nic innego jak tylko wdusić Enter.
Deklarowanie nieistniejących jeszcze funkcji
Przydatne jeśli właśnie wymyśliliśmy, że jest nam potrzebna nowa metoda/właściwość/event, której jeszcze nigdzie nie ma. Możemy wpisać w kodzie wywowałnie tej funkcji wraz z parameterami, a po naciśnięciu magicznego skrótu zostanie zadeklarowana nowa funkcja z już odpowiednio ustawionymi parametrami i typem zwracanym.

Rozdzielanie deklaracji od inicjalizacji
Zaznaczjąc typ zmiennej i jej nazwę w linijce z deklaracją możemy z linijki:
TreeViewItem item = new TreeViewItem();
otrzymać:
TreeViewItem item;
item = new TreeViewItem();
a następnie poszerzyć zakres zmiennej lub wypromować na składową klasy, albo też skorzystać z następnej możliwości. Możemy też łatwo przenieść inicjalizację w pobliże pierwszego wykorzystanie zmiennej.

Wprowadzanie stałych z już istniejących wartości
Jeśli użyliśmy tymczasowej wartości wpisanej na sztywno (na przykład stringa lub jakiejś liczby) to możemy łatwo podmienić je na stałe (wraz ze wszystkimi wystąpieniami w danym zakresie). Można także wyeksportować takie wyrażenia do zasobów (Resources).
Przenoszenie bloku tekstu w górę lub w dół
Za pomocą skrótu Alt+[strzałka w górę] lub Alt+[strzałka w dół] przenosimy linijkę lub zaznaczony blok tekstu o jedną linijkę w górę lub w dół. Zamiast zaznaczać linijkę wycinać ją, przenosić kursor wyżej, robić linijkę odstępu i tam wklejać. Szybciej i bardziej intuicyjnie.

Tworzenie metody z zaznaczonego tekstu
Najbardziej spektakularna funkcjonalność. Zaznaczamy fragment kodu, naciskamy magiczny skrót i na ekranie pojawia się kolorowe podsumowanie formy nowej funkcji (parametry, typy zwracane). Po zaakceptowaniu i wybraniu nowej nazwy cieszymy się nową funkcją z już gotowym kodem.

Operacje na stringach
Zamiast maszkar w stylu:
string tmp = "Name: " + person.Name + ", Age: " + person.Age.ToString() + ".";
po naciśnięciu magicznego skrótu otrzymujemy:
string tmp = String.Format("Name: {0}, Age: {1}.", person.Name, person.Age);
To samo tyczy się przekształcania wielolinijkowego łączenia stringów w jeden za pomocą StringBuildera (jak wiadomo jest to o wiele bardziej wydajna metoda):
string longString = person.GetName();
longString += person.CalculateAge() + Environment.NewLine;
longString += Greetings.Hello();
dostajemy:
StringBuilder longStringBuilder = new StringBuilder(person.GetName());
longStringBuilder.Append(person.CalculateAge() + Environment.NewLine);
longStringBuilder.Append(Greetings.Hello());
Dodawanie kontraktów do metody
Czasem na początku metody należy sprawdzić czy przekazane do niej wartości są na tyle poprawne, że można kontynuować wykonywanie metody. CodeRush udostępnia trzy metody wygenerowania kontraktów na początku metody :
  • rzucenie wyjątkiem
  • wykorzystanie asercji 
  • wyjście z metody
Nawigacja wewnątrz wielbłądzich nazw
Nie wiedziałem jak inaczej przetłumaczyć konwencję nazewnictwa Camel Case. Ogólnie chodzi o to, że pomiędzy składowymi nazwy możemy poruszać się przez naciśniecie kombinacji Alt+[strzałki w bok]. Umożliwia to szybsze zaznaczanie fragmentów nazw lub zmianę nazwy funkcji.
Poszerzanie lub zawężanie obszaru zaznaczenia
Dzięki klawiszom Num+ i Num- można łatwo zaznaczać obszary tekstu bez udziału myszki. Jedno wciśnięcie plusa pozwala zaznaczyć całe aktualne wyrażenie, drugie całą linijkę, następne cały aktualny blok i tak dalej. Minus kolejno redukuje zaznaczenie. 
Duplikowanie linii
Po prostu wciskamy Shift+Enter i bieżąca linia zostaje zduplikowana pod spodem. Prosta funkcjonalność, ale przydatna, podczas deklaracji wielu pól tego samego typu.

Usuwanie niepotrzebnych nawiasów klamrowych
Z przyzwyczajenia objąłeś ciało if'a lub for'a klamrami, a ma on tylko jedną linijkę? Nie szkodzi, wystarczy ustawić kursor na nawiasie i nacisnąć magiczny skrót, a nawiasy znikają.

Co jeszcze?
Wymienione powyżej możliwości to i tak tylko część dostępnych funkcjonalności. Można jeszcze wykonywać całą masę operacji, których albo jeszcze nie odkryłem albo nie miałem okazji zastosować. Zainteresowanych odsyłam do artykułu opisującego możliwości darmowej wersji CodeRush'a. Jest tam tego naprawdę dużo, aż trudno wszystko zapamiętać.

Czego brakuje
Najbardziej brakuje mi możliwości używania w kodzie szablonów (templates). Jest to coś podobnego do snippetów z Visual Studio, jednak mają większe możliwości i jest bardzo dużo. Dostosowują się one do kontekstu w jakim są wywoływane. Na przykład w jeśli w miejscu, w którym możemy zadeklarować metodę wpiszemy:
ml.
i naciśniemy Spację zostanie zadeklarowana metoda zwracająca generyczną listę z polami do edycji typu oraz nazwy funkcji. 
Równie przydatna może być możliwość uruchamiania pojedynczych testów jednostkowych z poziomu edytora.
Poza tym nie jest dostępna spora ilość z opcji refactoringu, jak na przykład przeniesienie klasy do osobnego pliku, czy zmiana dostępności metody jednym skrótem.

Podsumowanie
Pluginy zwiększające produktywność programisty są niewątpliwie niesamowicie przydatne i nie na darmo noszą taką nazwę. Pełne wersje takich programów wykorzystuje i zachwala wielu programistów. Na przykład Procent w serii postów pod niebiosa wychwala konkurencję dla CodeRush, czyli Resharpera.
Zdecydowanie polecam zainstalowanie darmowego CodeRush Express i samodzielne wypróbowanie jego możliwości. Osobiście nie stać mnie na zakup pełnej wersji, ale jestem ciekaw czy istnieją jakieś darmowe alternatywy dla tego pluginu.

poniedziałek, 30 sierpnia 2010

[Narzędziownia] TestDriven.Net

Ten post jest pierwszym z grupy, którą pozwoliłem sobie nazwać Narzędziownia. Będę w niej umieszczał krótkie posty opisujące ciekawe programy, biblioteki lub serwisy, z których korzystałem w trakcie pracy nad projektem i które mógłbym polecić innym. 

Co to za ustrojstwo?
TestDriven.Net jest pluginem do Visual Studio pozwalającym na wygodne uruchamianie testów jednostkowych. Niby nic, a bardzo ułatwia i przyśpiesza pracę. 
Wtyczka współpracuje z najpopularniejszymi narzędziami do testów jednostkowych, takich jak NUnit, MbUnit czy MSTest. Nie trzeba ich nawet osobno pobierać, instalator TestDriven.Net zadba o pobranie i zainstalowanie odpowiedniej wersji.
Testy możemy uruchamiać z poziomu menu kontekstowego w pliku z testami. I tu objawia się bardzo przydatna funkcja tej wtyczki. Jeśli klikniemy wewnątrz ciała testu zostanie uruchomiony tylko ten jeden test, co przy większej ilości napisanych testów może być sporą oszczędnością czasu. Oczywiście jeśli menu kontekstowe wywołamy z innego miejsca w pliku, zostaną wykonane wszystkie testy

Niesłychanie przydatną funkcją jest możliwość uruchomienia testów z debuggerem. Można łatwo sprawdzić co tak naprawdę wykonuje nasz nowo stworzony kod.
Bez problemu można też uruchomić interfejs graficzny frameworka testującego (w moim przypadku NUnita) czy przerwać aktualnie wykonywane testy. 
Wtyczka automatycznie buduje wymagane projekty, więc nie musimy o tym sami pamiętać. Jeszcze jeden krok to maksymalnej prostoty działania.

Podsumowanie
Mogę z całą stanowczością polecić TestDriven.Net. W znacznym stopniu przyspiesza pracę z testami jednostkowymi i nie wymaga żadnej wstępnej konfiguracji. Oczywiście jeśli ktoś posiada narzędzia w stylu Resharpera, to nie jest mu potrzebne nic więcej do uruchamiania testów. Jednak dla mnie było to znaczne ułatwienie w pracy.