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.

4 komentarze:

  1. Tutaj jest PDF w którym są zgromadzone skróty:
    http://community.devexpress.com/blogs/markmiller/archive/2008/11/24/shortcuts-and-templates-quick-start-sheets-for-coderush.aspx

    A tutaj opisuję inny dodatek - DPack, który również pomaga w programowaniu:
    http://kurzyniec.pl/article/DPack.php

    OdpowiedzUsuń
  2. @Łukasz: Dzięki za tego PDFa ze skrótami w jednym miejscu, przyda się żeby czasem szybko sobie przypomnieć. Szkoda, że w darmowej wersji nie działają wszystkie :/, ale to by było zbyt piękne.

    OdpowiedzUsuń
  3. 21 year-old Business Systems Development Analyst Bevon Govan, hailing from Brandon enjoys watching movies like "Tale of Two Cities, A" and Geocaching. Took a trip to Historic Area of Willemstad and drives a Ferrari 250 GT Berlinetta Competizione. Oficjalna strona

    OdpowiedzUsuń
  4. edge titanium - Titanium-arts.com
    The iconic stone-cut titanium machining stone-cut bronze statue of titanium granite countertops Alexander titanium nitride coating service near me I. has a wide apple watch stainless steel vs titanium range of ford ecosport titanium items that will bring you $11.95 · ‎In stock

    OdpowiedzUsuń