O snippetach słów kilka

Witam serdecznie w kolejnym wpisie dotyczącym programowania w technologiach .NET. Dzisiaj zajmiemy się króciutkim tematem dotyczącym ułatwiania sobie pracy z naszym IDE przy użyciu skrótów klawiszowych zwanych snippetami.

Snippety to tak na prawdę wybrane fragmenty kodu, które są automatycznie generowane po wpisaniu krótkiego ciągu znaku i  wciśnięciu klawisza TAB. Nie wiem jak to wygląda w innych środowiskach takich jak PyCharm czy RubyMine, natomiast postaram się co nieco powiedzieć o snippach w samymy Visual Studio.

Jak korzystać ze snippetów?

Cała lista snippetów dostepna jest w internecie i nie ma sensu omawiać tutaj wszystkich. Ja postaram się przedstawić kilka z nich, tak na prawdę najbardziej popularnych i najczęściej używanych. Natomiast to co oferuje nam nasze IDE to nie wszystko, my sami jesteśmy w stanie tworzyć swoje własne snippety co pokarzę trochę później.

Przykładowy snippet dla Console.WriteLine():

W naszym IDE wpisujemy cw i wciskamy klawisz TAB:

1

Jak widzimy nasz snippet wygenerował konieczny kod dla pewnej funkcjonalności i nasz kursor znajduje się w miejscu gdzie musimy wypełnić funkcję WriteLine() tekstem.

2

 

Ok ale to było proste. Co jeszcze potrafią nasze snippety? Tak na prawdę to wszystko co sobie sami w nich zaprojektujemy. Większość bardziej rozbudowanych instrukcji warunkowych czy pętli posiada swój własny snippet.

Tak jak IF wpisujemy if i TAB:

3

Instrukcja SWITCH… CASE… wpisujemy switch i TAB:

4

Dodatkowo nie możemy zapomnieć o naszych ukochanych pętelkach takich jak for:

5

Oczywiście while…do:

6

Dodatkowo do… while ?

7

Oczywiście foreach…

 

8

 

Jak widzimy, nasze snippety stanowią tak jakby gotowe szablony, które tylko wrzucamy do naszego kodu i modyfikujemy według swoich potrzeb.

A co z klasami czy interfejsami?

Klasy generujemy wpisując class i TAB:

9

 

A interfejsy wpisując interface i TAB:

10

Właściwie praktycznie każda bardziej złożona instrukcja zawiera swój snippet co pozwala nam na ogromne oszczędności czasu w kodowaniu. Nie musimy ręcznie wklepywać kodu litera po literze tylko wpisujemy początek instrukcji i TAB.

Pamiętajmy również o konstruktorach, ich snippet wygląda trochę inaczej niż by nam się mogło wydawać. Aby wygenerować sobie automatycznie konstruktor wpisujemy ctor i TAB:

11

Konstruktor automatycznie dostosowuje swoją nazwę do klasy w jakiej go generujemy. Bardzo przydatne.

Podobnie jest w przypadku regionów:

12

Typów enumerycznych:

13

Dodatkowo nie możemy zapominać o blok try… catch… bo w jego przypadku jest trochę dużo pisania 🙂

14

 

Oprócz tego chyba najczęściej używany snippet podczas tworzenia właściwości w naszych klasach, wpisujemy prop i TAB:

15

Ostatnim snippem o którym chciałbym tutaj powiedzieć, ale nie ostatecznym w kontekście wszystkich jest using:

16

Jeśli ktoś jest zainteresowany większą ilością snippetów to zapraszam do dokumentacji języka C# lub samego MSDNA:

http://msdn.microsoft.com/en-us/library/z41h7fat.aspx

A co z pozostałymi instrukcjami, które nie są domyślnie dostępne w naszym IDE? Musimy je sobie sami dopisać. Pokarzę za chwile jak 🙂

Tworzenie własnych snippetów

Można to zrobić na wiele sposobów i nie każdy z nich jest prosty i oczywisty. Pokarzę Wam najpierw jak zrobić to sobie ręcznie, troszkę na około, będzie to wymagało ingerencji w pliki znajdujące się w katalogu naszego IDE.

Aby to zrobić musimy udać się do katalogu Snippets znajdującego się w miejscu gdzie zainstalowaliśmy nasze IDE. W moim przypadku jest to C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC#\Snippets\1033\Visual C#. 

Pamiętajmy, że każda technologia ma swoje odrębne snippety, my w tym wpisie zajmiemy się snippetami dla Visual C#.

17

 

Jak widzimy, katalog ten zawiera wszystkie domyślne snippety instalowane podczas instalacji Visual Studio IDE, nazwane w taki sposób w jaki musimy się do nich odwoływać. Na celownik weźmy sobie znowu nasz snippet cw.snippet.

Jak możemy zauważyć nie ma snippeta, który tworzył by nam w szybki sposób metodę Console.Read(). Zaraz sobie ją stworzymy. Skopiujmy plik cs.snippet zmieńmy jego nazwę na cr.snippet.

18

Teraz zobaczmy co tak na prawdę siedzi w środku. Jak zbudowany jest taki plik o rozszerzeniu snippet?

Plik zawiera zwyczajne instrukcje zapisane w języku XML, które są przejrzyste i proste do modyfikacji.

19

Postarajmy się krok po kroku przeanalizować co każda z poszczególnych linii oznacza abyśmy później wiedzieli w którym miejscu wprowadzić zmiany.

Najpierw zauważmy, że cały plik XMLowy snippeta składa się z dwóch członów:

  • <Header></Header>
  • <Snippet></Snippet>

Pierwszy z nich zawiera informacje dotyczące samej nazwy snippeta i skrótu jaki ustalimy do jego generacji. Dodatkowo pozwala wprowadzić nazwę firmy oraz informację o typie snippetu.

Jakie mamy typy snippetów? Tak na prawdę istnieją dwa rodzaje:

  • Expansion snippets ( snippety generujące jakiś rodzaj kodu )
  • SurroundWith Snippets ( snippety „okalające” nasz kod w jakiś inny kod )

Drugi z nich zawiera całą deklaracje kodu snippeta w wybranym przez nas języku:

  • <Literal editable=false> // zawiera informację o tym czy dana część snippeta może zostać edytowana czy nie
  • <ID> // id klasy z której będziemy korzystać
  • <Function> // stanowi namespace gdzie nasza funkcja się znajduje
  • <Code language=”csharp”> // zawiera ostateczną deklarację snippetu w kodzie

Ok. Więc chcemy przygotować teraz snippet, który po wywołaniu cr i TAB wypisze nam Console.ReadLine(). Zedytujmy teraz poszczególne miejsca.

20

Teraz pozostaje nam uruchomić nasze IDE ( lub zrestartować ) aby nasz nowy snippet został wczytany a następnie wpiszmy cr i TAB

21

Oczywiście ten przykład był bardzo trywialny a konstrukcja snippetów może być dużo bardziej skomplikowana. Ale jak sami widzicie, tworzenie takich rozszerzeń nie jest rzeczą trudną a pozwala nam na zaoszczędzenie sporej ilości czasu podczas pracy.

Snippet Designer

Oczywiście istnieją również inne metody na tworzenie code snippetów. Do tego celu możemy wykorzystać narzędzie Snippet Designer, które możemy pobrać tutaj http://visualstudiogallery.msdn.microsoft.com/B08B0375-139E-41D7-AF9B-FAEE50F68392 a później doinstalować do naszego IDE.

Załóżmy, że chcemy przygotować sobie metodę na dodawanie dwóch integerów i wywoływać tę metodę add i TAB.

22

Tak spreparowaną metodę zaznaczamy i klikamy na nią ppm, wybierając opcję Export as snippet:

23

Wyświetli nam się kreator edycji dla naszego zaznaczonego kodu. Możemy dokonać tutaj ostatecznych modyfikacji przed zapisaniem konkretnego snippetu.

24

Widzimy na dolę tabelę w której możemy dokonywać deklaracji odpowiednich faktów, czyli zachowań dla naszego snippetu.

25

Dopisujemy ID naszego snippetu i zapisujemy wszystko 🙂 Miłej zabawy 🙂