Właśnie spędzam troszkę czasu nad pewnym programikiem. Staram sobie ułatwić pracę jak mogę, więc szukam różnych możliwości poprawy efektywności pracy. Snippet's są właśnie takim ułatwieniem. Niestety podstawowe funkcje to troszkę za mało, więc postanowiłem zwiększyć sobie ich ilość dodając kolejne. Na pierwszy ogień poszedł Singleton.
Snippet Singleton
Szybkie wstawienie wygenerowanego kodu można wykonać na dwa sposoby, albo klikamy prawym klawiszem i wybieramy opcję 'Insert Snippet', albo wpisujemy skrót, który zostanie wylistowany przez Intellisence.
Klikamy Tab i kod wstawiony. No tak, ale klasa potrzebuje nazwy. Przydało by się także jakoś nazwać prywatną nazwę instancji klasy singleton'a. Nie ma problemu. Po wstawieniu kodu Visual Studio wskazuje kolorem zielonym (w standardowym schemacie kolorów) aktywne miejsca, których wypełnienie odpowiednio zamienia standardowe nazwy na te, które wprowadzamy.
Klikamy w zielone pole SingletonName i wpisujemy własną nazwę. Enter kończy tworzenie kodu, ale możemy jeszcze wpisać własną nazwę statycznej właściwości przetrzymującej instancję naszego obiektu. W tym celu wystaczy kliknąć Tab, wpisać nazwę i teraz dopiero Enter. W tym momencie Snippet został całkowicie zamieniony na kod, czyli nową klasę realizującą wzorzec Singleton.
Tworzenie Snippet'ów
Snippet to nic innego jak plik XML z odpowiednią strukturą, która wcale nie jest trudna do opanowania. Składa się z dwóch podtsawowych części: nagłówka i definicji kodu. Nagłówek opisują takie tagi jak:
-
Title - nazwa snippeta
-
Shortcut - skrót, który zostanie użyty w Intellisence
-
Description - opis
-
Author - autor snippeta
-
SnippetTypes - lista typów, np.: Expansion - wstawia się zamiast zaznaczonego fragmentu kodu lub w miejsce postawionego kursora
Druga część pliku to definicja kodu. W niej definiujemy te "zielone nazwy", o których pisałem wyżej. Służy do tego tag Declarations, gdzie każda "zielona nazwa" opisana jest tagiem Literal. Każdy Literal składa się z:
-
ID - kod nazwy, np.: kod dla nazwy klasy w moim przykładzie to "$name$"
-
Tootip - nie wymaga tłumaczenia ;)
-
Default - domyślna nazwa, która w przypadku pominięcia określenia nazwy zostanie użyta w wygenerowanym kodzie
Dalej w tej samej sekcji jest jeszcze tag Code, który jest niczym innym jak pseudo-kodem generowanego kodu - w naszym przypadku Singleton'a. Poniżej przykładowy pseudo-kod:
1: public class $name$
2: {
3: private static $name$ $private$ = null;
4:
5: public static $name$ Current
6: {
7: get
8: {
9: if($private$ == null)
10: {
11: lock(typeof($name$))
12: {
13: if($private$ == null)
14: {
15: $private$ = new $name$();
16: }
17: }
18: }
19: return $private$;
20: }
21: }
22:
23: private $name$()
24: {
25: }
26: }
Napisany przeze mnie snippet generujący klasę Singleton oczywiście można pobrać i wgrać do własnej kolekcji. Snippety kodu C# mieszczą się standardowo w katalogu: "C:\Program Files\Microsoft Visual Studio 9.0\VC#\Snippets\1033\Visual C#".
Mam nadzieję, żę choć troszkę przybliżyłem temat snippet'ów. W miarę możliwości będę udostępniał kolejne :)
Ten post jest widoczny także na:
ZINE.NET