Code snippets - ett behändigt hjälpmedel i Visual Studio 2005
Förord
"Automatisera" återkommande kod i Visual Studio 2005 med hjälp av Code Snippets.I och med Visual Studio 2005 så finns möjligheten att göra egna så kallade snippets för att slippa skriva samma kod om och om igen (för det vill väl ändå ingen göra?).
En snippet är ett block med text som infogas på lämpligt ställe men det innehåller även en del logik, så det betydligt bättre än att bara klippa och klistra.
För att ta ett exempel:
Låt säga att jag i mitt kodande märker att jag ofta återkommer till en sån här kodsnutt:
Då kan jag göra detta till en code snippet, där m_resource är en variabel, som ändras på alla ställen automatiskt ifall jag vill använda en annan variabel.
En code snippet definieras i en xml fil med extensionen .snippet. Denna kan med fördel editeras i Visual Studio eftersom du då får Intellisense från schemat för snippets. Vill man komma enkelt undan kan man utgå från en färdig snippet.
Filen består egentligen av tre huvuddelar, ett huvud (header), en deklarationsavdelning, och själva koden för snippeten.
I huvuddelen finns meta information om snippeten, så som namn, shortcut, beskrivning, typ och dylik information.
De flesta fälten här är självförklarande, shortcut är det man kan (börja) skriva för att infoga snippeten direkt via Intellisensen. Snippet typer finns det tre olika: Expansion, SurroundsWith och Refactoring. I denna artikel kommer främst att ta upp snippets av Expansion typ, men även nämna nåt kort om snippets av SurroundsWith typ.
Expansion typer är sådana som helt enkelt kan klistras in i koden som ett block av kod (eller annat önskat innehåll) vid kursorpositionen.
SurroundsWith typer är sådana som omringar markerad kod med ny kod. I dessa har man tillgång till variabeln $selection$ som motsvarar markerad kod. Mer om variabler senare.
I deklarationsdelen deklarerar man variabler som man använder i koddelen. $end$ är en fördefinerad variabel som visar vart man vill att kursorn skall hamna efter att man fyllt i snippeten.
För snippeten i exemplet behöver jag endast en variabel, jag ger den id:t var, vilket betyder att jag i koden kan använda den som $var$. Default anger vilket utgångsvärde variabeln skall ha.
Sen har vi bara koddelen kvar. Som man antagligen kan gissa sej fram till så är det här den egentliga koden för snippeten finns, den skrivs direkt i en CDATA sektion innanför Code taggarna. Language attributet talar om vilket språk det är frågan om. Jag kommer att använda mej av C# i mina exempel.
Koddelen för vårt exempel ser ut som följande:
Den fullständiga koden för exempel snippeten ser då ut så här:
Denna kan jag spara under My Documents\Visual Studio 2005\Code Snippets\Visual C#\My Code Snippets. När jag har gjort detta kan jag använda den i Visual Studio direkt via intellisensen alternativt via högerklick -> Insert snippet...
efter att jag tabbat två gånger och därmed infogat snippeten (första gången för att komplettera snippetnamnet i intellisensen och andra gången för att infoga snippeten) så ser det ut på följande vis:
Nu kan jag editera m_resource på lämpligt sätt, och alla ställen (i snippeten) uppdateras automagiskt. Ifall jag har flera variabla fält i min snippet så kan jag förflytta mej mellan dem med hjälp av tabben.
Ett annat möjligt användningsområde är boilerplate text/licenstext i början av filer. I programarkivet (Programarkivet:Code snippets exempel) finns ovanstående exempelsnippet och en med en header som ser ut ungefär så här:
Detta var ett liten introduktion till möjliga användningsområden för code snippets. (Noteras kan att VB.NET IDE:n verkar ha ännu bättre stöd för code snippets, men då jag inte använder VB.NET har jag inte utforskat dom möjligheterna desto mera)
Kommentarer mottas gärna!
PS. På grund av Pellesofts CMS var jag tvungen att lämna ett mellanrum i sluttaggen för Code ifall någon undrar varför det finns där..
Vad är en code snippet?
En snippet är ett block med text som infogas på lämpligt ställe men det innehåller även en del logik, så det betydligt bättre än att bara klippa och klistra.För att ta ett exempel:
Låt säga att jag i mitt kodande märker att jag ofta återkommer till en sån här kodsnutt:
if (m_resource != null) {
m_resource.Dispose();
m_resource = null;
}
Då kan jag göra detta till en code snippet, där m_resource är en variabel, som ändras på alla ställen automatiskt ifall jag vill använda en annan variabel.
Hur gör jag då en code snippet?
En code snippet definieras i en xml fil med extensionen .snippet. Denna kan med fördel editeras i Visual Studio eftersom du då får Intellisense från schemat för snippets. Vill man komma enkelt undan kan man utgå från en färdig snippet.
Strukturen i en .snippet fil
...
...
...
Filen består egentligen av tre huvuddelar, ett huvud (header), en deklarationsavdelning, och själva koden för snippeten.
Huvuddelen
I huvuddelen finns meta information om snippeten, så som namn, shortcut, beskrivning, typ och dylik information.
Dispose a resource
dres
dispose resource after null check
Expansion
De flesta fälten här är självförklarande, shortcut är det man kan (börja) skriva för att infoga snippeten direkt via Intellisensen. Snippet typer finns det tre olika: Expansion, SurroundsWith och Refactoring. I denna artikel kommer främst att ta upp snippets av Expansion typ, men även nämna nåt kort om snippets av SurroundsWith typ.
Expansion typer är sådana som helt enkelt kan klistras in i koden som ett block av kod (eller annat önskat innehåll) vid kursorpositionen.
SurroundsWith typer är sådana som omringar markerad kod med ny kod. I dessa har man tillgång till variabeln $selection$ som motsvarar markerad kod. Mer om variabler senare.
Deklarationsdelen
I deklarationsdelen deklarerar man variabler som man använder i koddelen. $end$ är en fördefinerad variabel som visar vart man vill att kursorn skall hamna efter att man fyllt i snippeten.
var
Name of resource
m_resource
För snippeten i exemplet behöver jag endast en variabel, jag ger den id:t var, vilket betyder att jag i koden kan använda den som $var$. Default anger vilket utgångsvärde variabeln skall ha.
Koddelen
Sen har vi bara koddelen kvar. Som man antagligen kan gissa sej fram till så är det här den egentliga koden för snippeten finns, den skrivs direkt i en CDATA sektion innanför Code taggarna. Language attributet talar om vilket språk det är frågan om. Jag kommer att använda mej av C# i mina exempel.Koddelen för vårt exempel ser ut som följande:
if ($var$ != null) {
$var$.Dispose();
$var$ = null;
}
$end$]]>
Den fullständiga koden för exempel snippeten ser då ut så här:
Dispose a resource
dres
Dispose resource
Simon Dahlbacka
Expansion
var
Name of resource variable
m_resource
if ($var$ != null) {
$var$.Dispose();
$var$ = null;
}
$end$]]>
Denna kan jag spara under My Documents\Visual Studio 2005\Code Snippets\Visual C#\My Code Snippets. När jag har gjort detta kan jag använda den i Visual Studio direkt via intellisensen alternativt via högerklick -> Insert snippet...
efter att jag tabbat två gånger och därmed infogat snippeten (första gången för att komplettera snippetnamnet i intellisensen och andra gången för att infoga snippeten) så ser det ut på följande vis:
Nu kan jag editera m_resource på lämpligt sätt, och alla ställen (i snippeten) uppdateras automagiskt. Ifall jag har flera variabla fält i min snippet så kan jag förflytta mej mellan dem med hjälp av tabben.
Ett annat möjligt användningsområde är boilerplate text/licenstext i början av filer. I programarkivet (Programarkivet:Code snippets exempel) finns ovanstående exempelsnippet och en med en header som ser ut ungefär så här:
Detta var ett liten introduktion till möjliga användningsområden för code snippets. (Noteras kan att VB.NET IDE:n verkar ha ännu bättre stöd för code snippets, men då jag inte använder VB.NET har jag inte utforskat dom möjligheterna desto mera)
Kommentarer mottas gärna!
PS. På grund av Pellesofts CMS var jag tvungen att lämna ett mellanrum i sluttaggen för Code ifall någon undrar varför det finns där..
Pelle Johansson
Kanoners, välskrivet och formulerat så alla förstår såväl hur man gör - som nyttan med funktionerna.