Resharper? Něco za něco, ale ...

Tomáš Herceg       03.09.2008       C#, VB.NET, Offtopic       16733 zobrazení

Visual Studio 2008 je nejlepší vývojové prostředí, které oplývá ohromnou škálou funkcí. Je však pár věcí, které by mohlo umět lépe, a právě tyto věci se snaží víceméně úspěšně doplnit plugin Resharper. Za poměrně slušnou cenu bude vaše Visual Studio umět lepší refactoring a mnoho dalších věcí.

Chvalozpěvů o úžasnosti tohoto doplňku lze najít na Internetu hodně, je pravda, že Resharper je nejkomplexnější a nejlepší rozšíření VS, který zvyšuje produktivitu a pomáhá při práci.

Automatické importování namespaces

Znáte to, potřebujete někde poskládat jeden dlouhý string, na to je přece třída StringBuilder ve jmenném prostoru System.Text. Pokud jsem tento namespace ještě v aktuálním souboru nepoužil, musím vyjet nahoru, dopsat příslušný Import (či using, ať mě C# přívrženci nerozšlapou) a vrátit se zpátky. Kdo to dělá takhle, jistě Resharper ocení, ten zobrazí poměrně jasné upozornění, že stačí zmáčknout Alt+Enter a tím namespace jednoduše naimportovat.

Automatický import v podání Resharperu

Visual Studio ale umí bez Resharperu to samé, akorát to tak nápadně nekřičí. Stačí ve chvíli, kdy napíšete slovo  StringBuilder, zmáčknout Ctrl+tečka. Navíc je Visual Studio rychlejší, ihned po dopsání slova je možné touto zkratkou případně myší namespace přidat, Resharper svoji nabídku zobrazí daleko později a těch pár sekund nemůžete použít IntelliSense, protože je v kódu chyba. Je to asi síla zvyku, na druhou stranu je to nejčastější featura, kterou používám.

Automatický import namespace v podání Visual Studia

Skákání na definici

Používáte nějakou metodu a zjistíte, že je v ní chyba. Zdlouhavě hledat soubor, ve kterém se ona metoda nachází, je nepraktické a otravné. Když máte Resharper, zmáčknete Ctrl a kliknete na její název, automaticky se otevře soubor, kde metoda je, a samozřejmě se hned skočí na její deklaraci. To funguje samozřejmě i s proměnnými, vlastnostmi, třídami atd. Bez Resharperu to umí Visual Studio také, stačí kliknout na ono slovo a zmáčknout F12. Opět tedy nic nového.

Lepší funkce Surround with

Když označíte kus kódu a zmáčknete kouzelnou klávesovou zkratku Ctrl-E,U, Resharper vám nabídne pár možností, čím se dá daný blok obklopit. Stiskem klávesy s číslem pak jednoduše obklíčení provedete, např. celý kus kódu obalíte for cyklem.

Surround With v podání Resharperu

To samé umí i Visual Studio samotné, s téměř stejně krkolomnou zkratkou - Ctrl-K, S.

 Surround With v podání Visual Studia

Tady bych Resharper ocenil, především z důvodu, že samotné Visual Studio to bůhvíproč neumí pro VB.NET, jen pro C#. Resharper to umí pro oba jazyky, a zvlášť pro vytváření regionů se to více než hodí. Když je to for cyklus přes dva řádky, je úplně stejně rychlé napsat nad ně hlavičku a pod ně patičku, vyjde to nastejno.

Vygenerovat tělo metody

Když píšu nějakou metodu, často se mi stane, že chci nějakou složitější činnost vyčlenit do samostatné metody, kterou ale teď řešit nebudu (tzv. prokrastinace, tedy "co můžeš udělat dnes, odlož na pozítří a získáš tím dva dny volna"). Takže jen vymyslím nejaký název a funkci použiju, nasypu jí parametry a pracuji s výsledkem. Resharper nás opět upozorní, že metoda neexistuje, a nabídne vygenerování její deklarace.

To samé ale zase umí Visual Studio samotné, stačí kouzelná zkratka Ctrl+tečka, stejně jako u doplnění namespace. Zase to ale není ve VB.NET, nechápu proč. C# to samozřejmě má.

Redundantní a zbytečný kód

Resharper pěkně analyzuje kód, který je zbytečný a nikde se nepoužívá. Pokud nadeklarujete proměnnou, se kterou se nikde nepracuje, zbarví se světle šedě. To samé, pokud třeba někde napíšete this.něco resp. Me.něco a to this resp. Me tam není nutné. I pokud importujete namespace, který ale nikde nepoužijete, zbarví se došeda taky a opět pomocí Alt-Enter můžete tyto nepoužívané namespaces odstranit.

Moc se mi nelíbí, když jsou v kódu určitá slova šedá, protože jsou blbě vidět. U importů nahoře se to hodí a jejich automatické řazení a odstraňování nepoužitých je pěkná a užitečná funkce, kterou Visual Studio samo neumí.

Navíc pomocí funkce CodeCleanup můžete tyto zbytečnosti a mnoho dalších neduhů v kódu nechat odstranit automaticky buď v celém souboru, nebo rovnou v celém projektu.

Milion refaktorovacích fičur

Než bych složitě popisoval, co Resharper všechno umí, přiložím obrázek celé nabídky funkcí. Přejmenovávat umělo i samotné Visual Studio, stejně tak po označení určitého bloku kódu z něj vyextrahovat metodu (i když občas mi to nevygenerovalo přesně to, co jsem potřeboval), velmi často jsem používal Encapsulate Field pro dogenerování deklarace vlastnosti, tato volba je s Resharperem zahrabaná o menu níž, možná na to bude nějaká zkratka. Kvůli VB.NET jsem si stejně na propertu a readonly propertu napsal code snippet, který ji vygeneruje sám.

Hezké je zkonvertování vlastnosti na metodu a opačně, znegování podmínky, pokud je else větev výrazně delší než větev za if, a mnoho dalších věcí, ale na druhou stranu je člověk nepoužívá zas tak často, aby se vyplatilo pamatovat si ty klávesové zkratky nebo to lovit myší v menu, když máte ruce zrovna na klávesnici. Navíc si velmi často ani neuvědomíte, že tuhle věc umí Resharper a stejně ji uděláte ručně.

Co všechno to umí

Překopaná IntelliSense

Resharper ve Visual Studiu překope téměř všechno, mimo jiné taky IntelliSense. Ta by se měla chovat lépe, nějaké zásadní rozdíly jsem nezaznamenal, téměř ihned jsem ji přepnul na tu klasickou z Visual Studia. Ta Resharperová se mi moc nelíbila a byla o trochu pomalejší.

Kontrola kódu na pozadí

Když máte Resharper, odpadá jedna nepříjemná vlastnost C# - to, že ihned nekontroluje chyby. Když zapomenete závorku anebo uděláte syntaktickou chybu, pak na to přijde a upozorní hned i samotné Visual Studio, ale pokud například voláte metodu a nepřetypujete parametr z float na int, dozvíte se to až při kompilaci před spuštěním. Resharper tuto vlastnost přidává, někdo mi ale říkal, že ji Visual Studio 2008 už podporuje v C# samo od SP1, u VB.NET to umí odpradávna.

Želbohu v této kontrole na pozadí jsem v Resharperu objevil jednu nepříjemnou cbyhu, pokud píšete v ASP.NET. Komponenty uvnitř NamingContainerů, jejichž ID se nesmí zpřístupnit z kódu, Resharper zpřístupní. Takže když máte v Repeateru komponentu s ID TextBox1 a nadeklarujete si vlastnost TextBox1, která najde tento textbox třeba v první položce Repeateru, ohlásí to Resharper jako chybu (duplikátní deklarace jména TextBox1), ale zkompiluje se to, protože k této komponentě přes identifikátor TextBox1 přistupovat nemůžeme, může být ve stránce víckrát. Jiný problém jsem nenašel, kontrola jinak přišla na všechny chyby a problémy.

Shrnutí

Resharper podporuje mnoho dalších funkcí, např. pokročilejší skoky v kódu, dále třeba tzv. live templates (nevidím ale moc velký rozdíl mezi těmito šablonami a code snippety, které si můžete sami napsat a vytvořit) a kompletně překopaný je třeba příkaz Find References, který najde místa, ze kterých se daná metoda (vlastnost, proměnná atd.) používá. Také jste během psaní upozorňováni na mnoho různých neduhů a věcí, jimž byste se měli vyvarovat (některé z nich jsou velmi spekulativní, třeba jestli ručně určovat typ, nebo používat var v C#).

Resharper rozšíří vaše Visual Studio o mnoho užitečných vlastností a funkcí, většinu z nich sice umělo už dříve, ale na druhou stranu s Resharperem je umí o trochu lépe. Otázkou je, zda-li ta trocha stojí za to. Bez tohoto balíku sebere jedna instance Visual Studia kolem 100 MB operační paměti, s Resharperem si ukousne klidně 300 MB, což je dost znát na jeho odezvě. Samotné Visual Studio je znatelně zpomalené (bodejť ně, polovinu věcí dělá dvakrát a navíc některé analýzy kódu, které Resharper provádí, jsou dost komplikované a jistě nějaký výkon potřebují atd.).

Během pár dní mi skončí 30denní trial verze tohoto rozšíření. Některé věci mi budou chybět, ale v zásadě se bez něj obejdu. Extrémní rozežranost bych toleroval, pokud by Resharper uměl více funkcí, které Visual Studio samo o sobě vůbec nemá. Většinu ale umí VS i bez něj a je navíc mnohonásobně rychlejší. Skoro by se dalo říct, že čas, který ušetří Resharper pokročilými refactorovacími funkcemi, ztratíte čekáním a pomalejší odezvou vývojového prostředí.

Samotné Visual Studio toho umí opravdu hodně, málokdo zná všechny vymoženosti a skryté klávesové zkratky. Škoda, že ve VB.NET se vykašlali na některé featury, které umí C#, to Surround with mi bude chybět asi nejvíc. Možná si do VS napíšu jednoduché rozšíření pro VB.NET, které jej bude podporovat. Možná už něco takévo i existuje.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

Diskuse: Resharper? Něco za něco, ale ...

"Moc se mi nelíbí, když jsou v kódu určitá slova šedá, protože jsou blbě vidět. U importů nahoře se to hodí a jejich automatické řazení a odstraňování nepoužitých je pěkná a užitečná funkce, kterou Visual Studio samo neumí." Neni pravda, umi. Right click kdekoli v kodu - polozka Organize usings

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No jo, máte pravdu, této položky jsem si dřív nevšimnul, myslel jsem, že ji tam také přidal Resharper.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Resharper? Něco za něco, ale ...

VS 2008 to už zvládá (tedy pro C#, u VB.NET si nejsem jistej).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Resharper? Něco za něco, ale ...

Takže pro psaní C# to nemá cenu moc pořizovat, VS vše podstatné již umí a ještě rychleji, ačkoliv možná trochu hůře.

Mimochodem, znáš nějaký doplněk pro Visual Studio, který by stálo za to pořídit (kromě VS.php, pokud člověk musí něco psát v PHP)?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No i když to není přímo doplněk (ale do Visual Studia se integruje), tak každému kdo vytváří nějakou dokumentaci zdrojového kódu nebo profesionální nápovědu bych doporučil aplikace Innovasys Document! X a Innovasys HelpStudio 3. Neznám lepší aplikace v této oblasti a to jsem zkoušel i například Adobe RoboHelp. HelpStudio Lite pro vytváření dokumentace zdrojového kódu (ve stylu MSDN) je k dispozici zdarma pro vlastníky Visual Studia 2005/2008.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Resharper? Něco za něco, ale ...

Já jsem zase zkoušel Visual Assist X, což je záležitost vychvalovaná především Visual C++ vývojáři (co si budeme povídat, IntelliSense ve Visual C++ je naprosto k ničemu). Z hlediska funkčnosti to bylo dobré, ovšem nebylo tam nic co bych neudělal pomocí standardního IntelliSense z VB.NET/C#. A mělo to mimořádně kýčovité a hnusné uživatelské rozhraní pro nastavování.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback