Tijdens het trainen probeer ik mijn cursisten natuurlijk zo veel mogelijk te leren over .Net en (andere) super interessante onderwerpen. Opmerkelijk hierbij is dat ze vaak erg enthousiast worden als ik ze de mogelijkheden van code snippets uitleg. Vandaar ook deze blog over het gebruik van code snippets en het zelf maken van nieuwe code snippets.

Tijdens het trainen probeer ik mijn cursisten natuurlijk zo veel mogelijk te leren over .Net en (andere) super interessante onderwerpen. Opmerkelijk hierbij is dat ze vaak erg enthousiast worden als ik ze de mogelijkheden van code snippets uitleg. Vandaar ook deze blog over het gebruik van code snippets en het zelf maken van nieuwe code snippets.
Wat is een code snippet
In je code gebruik je vaak de zelfde structuren, bijvoorbeeld een for-loop of een if-statement. Vaak ben je deze aan het uittypen, maar om het leven van de developer gemakkelijker te maken hebben ze in Visual Studio stukjes voorgedefinieerde code zitten die je eenvoudig in je code kunt plaatsen.
Er zijn 2 manieren om code snippets te gebruiken. De eerste is de omslachtigste, maar geeft wel een goed overzicht van de beschikbare snippets: Via het 'Edit' menu kies je voor 'IntelliSense' en vervolgens voor 'Insert Snippet'.
Code Snippets in Visual Studio
Je krijgt vervolgens een menuutje waar je de gewenste snippet kunt uitzoeken en in je code kunt plaatsen.
Code Snippets in Visual Studio
Als ik kies (zoals in het bovenstaande plaatje) voor 'tryf' zal er dus een 'try-finaly' blok in mijn code geplaatst worden.
Aangezien dit toch best wat handelingen zijn en de (tijd)winst dus vrij beperkt is, is er ook een snellere manier om ze op te roepen. Je typt de naam van de code snippet in en vervolgens 2x op [Tab]. Bijvoorbeeld 'foreach' [tab] [tab] levert het volgende op:
Code Snippets in Visual Studio
Het woordje 'var' is nu geselecteerd en kun je gemakkelijk aanpassen in het gewenste type, bijvoorbeeld 'Control'. Met de [Tab] wordt 'item' geselecteerd en is aan te passen in de naam die je de variabele wilt geven, bijvoorbeeld 'ctl'. Door nog een keer op [Tab] te drukken kunnen we aangeven welke collectie gebruikt moet worden, bijvoorbeeld 'this.Controls'.
Vervolgens plaats ik de cursor in tussen de accolades van de foreach-statement en gebruik een volgende code snippet: 'mbox' [tab] [tab]. De code voor het weergeven van een messagebox wordt ingevoegd en hier kan ik aangeven dat ik de 'ctl.Name' wil tonen.
Code Snippets in Visual Studio
Je ziet hoe snel, makkelijk en zonder fouten je nu code kunt genereren. Bij elke versie van Visual studio komen er meer code snippets bij. Zo zullen er in Visual Studio 2010 ongeveer 200 code snippets beschikbaar zijn. Niet alleen voor C# en VB, maar ook voor HTML en Javascript.
Zelf creëren van code snippets
Naast de bestaande code snippets is het ook mogelijk om je eigen snippets te maken. Op deze manier kun je dus binnen snel stukken code in voeren die je zelf vaak gebruikt. Bijvoorbeeld het aanmaken van database connecties, datasets, standaard opzet voor classes, etc.
Ik ga nu een code snippet maken voor het snel invoegen van een property. 'Die bestaat toch al', zul je jezelf afvragen. Dat klopt, maar in Visual Studio 2008 is deze anders dan in Visual Studio 2005 terwijl ik die in 2005 veel handig vind en graag in 2008 ook zou willen hebben.
In VS2005 zit er een code snippet 'prop' die een private variable aanmaakt en een property met een getter en een setter. Omdat in het VS2008 niet meer per se nodig is om de getter en setter uit te werken, levert de code snippet 'prop' het volgende resultaat in VS2008:
Code Snippets in Visual Studio
In veel gevallen prima, maar vaak wil ik niet de default getter of setter, maar wil ik daar wat intelligentie aan koppelen en dan ben ik toch weer een hoop aan het uit typen. De oplossing is dus zelf een nieuwe snippet aanmaken. Het resultaat is onderstaande snippet.
Code Snippets in Visual Studio
Als ik het type van de private variabele aanpas, dan wordt ook automatisch het type van de property aangepast en als ik de naam van de variabele aanpas, dan wordt dat ook automatisch in de property doorgevoerd. Super handige en snelle manier om een property te maken dus. Hoe gaat dit nu in zijn werk?
Stap 1 is het maken van een XML file, met de extensie '.snippet'. In mijn voorbeeld wordt het 'propertyComplete.snippet'.
Stap 2 is het schrijven van de XML voor de snippet. Een lege snippet ziet er als volgt uit:
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title></Title>
      <Shortcut></Shortcut>
      <Description></Description>
      <Author></Author>
      <SnippetTypes>
        <SnippetType></SnippetType>
      </SnippetTypes>
    </Header>  
    <Snippet>
      <Declarations></Declarations>
      <Code Language="CSharp">
        <![CDATA[
       ]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>
Je ziet dat het bestand een Header bevat met informatie over de snippet (title, description, shortcut, etc.). Daarnaast is er een element 'snippet' waarin de daadwerkelijke code geplaatst gaat worden. Ook kunnen we in dit element de 'Declarations' plaatsen. Deze declarations zijn de onderdelen van de snippet die we kunnen wijzigen en waar we met de [Tab] toets naar toe kunnen springen (de groene en blauwe vlakjes van de snippet dus). Hieronder vind je de complete snippet, met de ingevulde header, de declaraties en de code.
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>Property complete</Title>
      <Shortcut>propc</Shortcut>
      <Description>
        Code snippet for placing a property, fully written. Like "prop" in VS2005
      </Description>
      <Author>Christian Peeters</Author>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
    </Header>  
    <Snippet>
      <Declarations>
        <Literal>
                <ID>field</ID>
                <ToolTip>backing store</ToolTip>
                <Default>myVar</Default>
        </Literal>
        <Literal>
                <ID>type</ID>
                <ToolTip>Property type</ToolTip>
                <Default>int</Default>
        </Literal>
        <Literal>
                <ID>property</ID>
                <ToolTip>Property name</ToolTip>
                <Default>MyProperty</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[
                  private $type$ $field$;
                               public $type$ $property$
                               {
                                         set {return this.$field$;}
                                         set {this.$field$ = value;}
                               }
                  $end$
       ]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>
Je ziet hoe de declaraties een ID, tooltip en default value hebben en dat deze vervolgens in de code gebruikt worden.
De snippet is nu klaar. Als laatste stap moeten we de snippet nog in Visual Studio bekend maken. Daarvoor gebruiken we de 'Code Snippet Manager' die je kunt vinden onder het menu-item 'Tools'.
Klik op 'Add' en verwijs naar de map waar de snippet staat.
Code Snippets in Visual Studio
De snippet wordt herkend en voortaan kan ik 'propc' gebruiken om een compleet uitgewerkte property in mijn code te krijgen!
Meer Informatie
Het is misschien één keer wat werk, maar vervolgens kun je er een hoop lol van hebben, dus ik zou zeggen; probeer het een keer. Op de MSDN site kun je meer informatie vinden over het creëren van code snippets: http://msdn.microsoft.com/en-us/library/ms165393(VS.80).aspx