Está en la página 1de 19

INTRODUCCIN

A LOS SNIPPETS
POOHV

Grupo 4:
Ventura Rodrguez, David
Balao Rondn, Julio
Fernndez Burgos, Rafael
Garca Montes, Daniel
Garca Prez, Jos Manuel

NDICE:
PRLOGO

1-CMO USAR LOS SNIPPETS

2-ADMINISTRADOR DE SNIPPETS

3-CREACIN DE NUEVOS SNIPPETS

4-EXPLICACIN DE LAS ETIQUETAS

5-CMO AGREGAR NUEVOS SNIPPETS

11

6-EJEMPLOS

13

7-BIBLIOGRAFA

16

8-APNDICE

17

9-GLOSARIO

18

10-CONCLUSIONES

19

PRLOGO:
Snippet es un trmino en programacin referido a fragmentos de cdigo que se usan con
bastante frecuencia en un programa y que a su vez tiene una estructura muy bien
definida, como podra ser el caso de la instruccin if:
if (expresin lgica)
{
instrucciones
}

As pues al aplicar el Snippet se inserta en el programa dicho fragmento, ahorrndonos


el tener que teclear toda la instruccin y teniendo tan solo que retocar algunos aspectos
que vendrn encuadrados en color verde, que es donde deberemos escribir la parte
especfica del snippet seleccionado, por ejemplo, en el caso de la instruccin if, vendr
encuadrado la expresin true y en su lugar escribiremos la expresin que se debe de
cumplir para ejecutar las instrucciones (que tambin debern ser escritas por el
programador), en el caso de la instruccin for aparecer una caja para la variable de
control y otra para la expresin lgica.
Por esto, podemos decir que resultan de gran ayuda al programador, a pesar de que
inicialmente requiere un esfuerzo mayor, ya que como hemos expuesto anteriormente si
se usa de forma correcta le ahorra muchas lneas a lo largo de su labor permitindole
escribir el cdigo ms rpido.

1-CMO USAR LOS SNIPPETS:


Nos centramos ahora en el entorno de desarrollo Visual Studio 2005.
En la versin en castellano los snippets se llaman Fragmentos de cdigo.
Para insertar un Snippet basta con pulsar el botn derecho sobre el editor de texto y
pulsar en Insertar fragmento de cdigo

De este modo sale algo como:

Donde elegimos por su abreviatura (shortcut) el snippet que queremos insertar.


Tal y como expusimos en el prlogo, segn el snippet y los parmetros que contenga
este, tendremos la opcin de retocar los nombres de las variables, (como sera por
ejemplo el caso del for) o algunos valores (como en el while).

2-ADMINISTRADOR DE SNIPPETS:
Para acceder al Administrador de Snippets pulsamos en el men herramientas,
Administrador de fragmentos de cdigo.

Aparece una ventana desde la cual podemos seleccionar de cada lenguaje los Snippets
que hay, agregar nuevos, importarlos, eliminarlos y buscar en lnea.

En el apartado ubicacin aparece la ruta en la cual se encuentran los snippets, donde se


puede observar el cdigo en XML que los compone y servir de ejemplos.

3-CREACIN DE NUEVOS SNIPPETS:


Como ya hemos comentado anteriormente el snippet es un archivo escrito en XML con
extensin .snippet. Para crearlo, en esta gua usaremos Visual Studio, ya que es la
herramienta que usaremos a lo largo de la asignatura, aunque se podr usar cualquier
editor de texto que soporte el encoding (consultar apndice) que estemos usando en el
archivo XML.
Para crear un archivo XML en Visual Studio pulsamos en el men en Archivo, Nuevo,
Archivo.

En la siguiente pantalla seleccionamos Archivo XML y hacemos clic en abrir.

Escribimos nuestro snippet en el archivo XML (el cdigo se explicar a continuacin) y


guardamos el archivo con el nombre que le vayamos a dar al snippet y con la extensin
.snippet (quedando en nuestro ejemplo singleton.snippet).

Ya est creado el snippet. Solo falta agregarlo al Visual Studio, que se explicar ms
adelante.

4-EXPLICACIN DE LAS ETIQUETAS:


Las secciones principales de un snippet son:
1. El encabezado o header, que contiene principalmente datos relacionados con
cmo interactuaremos con l a la hora de utilizarlo.
2. Las definiciones de cdigo, donde especificaremos elementos que luego
utilizaremos en el snippet.
3. Y el cdigo a insertar, donde haciendo uso de las definiciones anteriores
crearemos un fragmento de cdigo en el lenguaje deseado. Esto ser ms que un
simple copy&paste ya que nos permitir editar ciertos fragmentos que se
repiten en el cdigo insertado.
La etiqueta raz de todos los archivos .snippets es <CodeSnippets> en su interior
colocaremos etiquetas donde especificaremos el snippet.
La etiqueta <CodeSnippet> tiene un atributo requerido Format, donde se indica la
versin del esquema xml, nosotros utilizaremos la versin 1.0.0 (<CodeSnippet
Format="1.0.0">)
Los hijos de <CodeSnippet> son <Header> y <Snippet>.
<Header>: La cabecera del Snippet, contiene datos identificativos como son:
<Title> (nombre por el que aparecer en Visual Studio).
<Author> (el autor del Snippet).
<Shortcut> (al escribir el contenido de esta etiqueta en el editor de texto si
pulsamos el tabulador lo sustituir automticamente por el snippet).
<Description> (la descripcin).
<SnippetTypes> (contiene etiquetas <SnippetType>). En su interior se
puede especificar el tipo de snippet que queremos. Los tipos posibles son:
1. SurroundsWith permite que el snippet rodee a un fragmento de cdigo
seleccionado.
2. Expansion permite que el snippet se inserte en la posicin del cursor.
3. Refactoring es un tipo de snippet especial que se utilizar en la
refactorizacin (este tipo de snippet no se permite a la hora de crear snippets
propios).
<HelpUrl> (debera indicar una pgina web que proporcione la ayuda para la
configuracin del snippet). [1]
Todas las etiquetas que contiene el header son opcionales a excepcin de <Title>,
por lo tanto podramos crear un snippet en cuyo header solo escribamos dicha etiqueta.
<Header>
<Title>ttulo</Title>
<Author>autor</Author>
<Shortcut>acceso directo</Shortcut>
<Description>descripcin</Description>
<SnippetTypes>
<SnippetType>SurroundsWith</SnippetType>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
<HelpUrl>Pgina web de ayuda</HelpUrl>
</Header>

<Snippet>: Comienza el cdigo en esencia de nuestro snippet, adems aqu


tendremos la posibilidad de hacer la declaracin de literales y objetos mediante la
etiqueta <Declarations> de realizar los imports y de utilizar los assemblys
necesarios para el cdigo a insertar utilizando las etiquetas <References> e
<Imports>.
<Declarations>: Esta etiqueta agrupa elementos <Literal> y <Object>:
<Literal> podemos definir fragmentos del cdigo que vamos a insertar de
forma que una vez insertado, al modificar cualquiera de estos fragmentos se
modifiquen todos los dems. Esta etiqueta contiene a su vez a las etiquetas:
<ID> (ser el nombre con el que lo identificaremos en el fragmento de cdigo).
<ToolTip> (comentario acerca del literal, esta etiqueta es opcional).
<Default> (es el valor por defecto que aparecer al insertar el snippet).
<Object> son etiquetas parecidas a las <Literal>, pero sirven para
especificar elementos que se utilizan en el snippet pero que posiblemente se definan
fuera del fragmento que va a insertar, como por ejemplo objetos.
Esta etiqueta tiene los mismos hijos que <Literal> adems de <Type>donde
se indica el tipo de los objetos ( Ej.: <Type>System.Array</Type> )
<Code>: Esta etiqueta es hija de <Snippet>, y en ella definiremos el cdigo que
queremos insertar. Tiene 3 atributos:
Delimiter (atributo opcional), que permite modificar el carcter que delimita los
literales y objetos utilizados en el cdigo, por defecto es $ (Ej.: $literal$).
Kind (atributo opcional), indica el tipo de cdigo que queremos introducir, esto
nos va a restringir los lugares donde queremos insertar el cdigo, por ejemplo no
podemos insertar la definicin de un mtodo dentro de otro mtodo, habra que
definirla en el cuerpo de una clase. Los valores de este atributo pueden ser:
1. method body especifica que el fragmento de cdigo es un cuerpo de
mtodo por lo que debe insertarse dentro de la declaracin de un mtodo.
2. method decl especifica que el fragmento de cdigo es la declaracin de
un mtodo por lo que se debe insertar dentro de una clase o mdulo.
3. type decl especifica que el fragmento de cdigo es un tipo por lo que se
debe insertar en una clase, modulo o espacio de nombres.
4. file especifica que el fragmento es un archivo de cdigo completo por lo
que se pueden insertar solos en un archivo de cdigo o dentro de un
espacio de nombres.
5. any especifica que el fragmento se puede insertar en cualquier parte, se
utiliza para fragmentos de cdigo que son independientes del contexto,
como por ejemplo los comentarios.
Language, que especifica el lenguaje de programacin en que est escrito el
cdigo, este puede ser VB, CSharp, VJSharp o XML. Esto se debe a que
IntelliSense y por tanto los snippets son tecnologas de VS2005, por lo que solo
implementan soluciones para los editores que integra VS2005.
El cdigo lo escribiremos en el interior de la etiqueta <Code>, envuelto entre
<![CDATA[ Cdigo]]>
En el fragmento de cdigo podemos hacer referencia a los literales y objetos antes
declarados en la etiqueta <Declarations> utilizando el delimitador $literal$ o el
que definamos en la etiqueta <Code>, si utilizamos ms de una vez un literal, una vez
insertado el cdigo al modificar uno se modifica automticamente el otro.
9

<Snippet>
<Declarations>
<Literal>
<ID>nombre</ID>
<ToolTip>breve descripcin</ToolTip>
<Default>valor</Default>
</Literal>
<Object>
<ID>nombre</ID>
<ToolTip>breve descripcin</ToolTip>
<Default>valor</Default>
<Type>tipo</Type>
</Object>
</Declarations>
<References>
<Reference>
<Assembly>librera</Assembly>
<Url>direccin</Url>
</Reference>
</References>
<Imports>
<Import>
<Namespace>espacio de nombre</Namespace>
</Import>
</Imports>
<Code Language="Lenguaje" Delimiter=$ Kind=Tipo>
<![CDATA[
Cdigo
]]>
</Code>
</Snippet>
Es aconsejable que una vez se tenga cierta soltura se utilice el snippet XML para la
creacin de snippets, ya que ahorra gran parte del trabajo en la escritura de las etiquetas.
Para utilizarlo es necesario escribir los snippets en Visual Studio, e introducir el snippet
como se describe al principio del tutorial.
Para ms informacin acerca de las etiquetas, ir a la referencia [2]:

10

5-CMO AGREGAR NUEVOS SNIPPETS:


Una vez escrito y guardado el snippet slo queda agregarlo al Visual Studio para poder
utilizarlo como otro snippet ms, para eso tenemos que ir al administrador de
fragmentos de cdigo (click en herramientas en la barra de men, administrador de
fragmentos de cdigo).

Una vez ah, primero seleccionamos el lenguaje para el cual est hecho el snippet, en
nuestro caso C#.

Hacemos click en el botn importar, y en el explorador que aparece elegimos el archivo


que queremos aadir y hacemos click en abrir
11

Nos pregunta la carpeta en la que queremos aadir el snippet, seleccionamos una (o


varias), hacemos click en finalizar y ya podemos utilizar nuestro nuevo snippet como
cualquier otro.

12

6-EJEMPLOS:
A continuacin se muestra el cdigo de un par de snippets para que sirvan de ejemplo.
Snippet Singleton:
Este snippet ayuda a implementar el patrn de diseo Singleton. Este patrn sirve
asegurar que una clase tiene una sola instancia y proporciona un nico punto de acceso
para esta.
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets>
<CodeSnippet Format="1.0.0">
<Header>
<Title>singleton</Title>
<Shortcut>singleton</Shortcut>
<Description>Code
snippet
for
the
singleton
pattern</Description>
<Author>Grupo 4</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>classname</ID>
<ToolTip>Class name</ToolTip>
<Default>ClassName</Default>
</Literal>
<Literal>
<ID>field</ID>
<ToolTip>field name</ToolTip>
<Default>instance</Default>
</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[
public class $classname$$end${
private static $classname$ $field$;
private static readonly object semaph=new object();
private $classname$ (){
}
public static $classname$ GetInstance(){
if($field$ == null)
{
lock(semaph)
{
if($field$ == null)
$field$ = new $classname$();
13

}
}
return $field$;
}
} ]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>

Snippet property:
Este snippet sirve para crear una propiedad rpidamente, sin tener que recurrir a la
refactorizacin.
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippet Format="1.0.0"
xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSni
ppet">
<Header>
<Title>property</Title>
<Author>Grupo 4</Author>
<Shortcut>property</Shortcut>
<Description>Code snippet for adding
property</Description>
<SnippetTypes>
<SnippetType>SurroundsWith</SnippetType>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<Default>Object</Default>
</Literal>
<Literal>
<ID>field</ID>
<Default>field</Default>
</Literal>
<Literal>
<ID>Prop</ID>
<Default>Prop</Default>
</Literal>
</Declarations>
14

<Code Language="csharp">
<![CDATA[private $type$ $field$;
public $type$ $Prop$
{
get
{
return $field$;
}
set
{
if (value != null)
{
$field$ = value;
}
Else
throw new ArgumentNullException();
}
}]]>
</Code>
</Snippet>
</CodeSnippet>

15

7-BIBLIOGRAFA:
[1] http://bitworking.org/HowTemplatesWork.html
[2] MSDN,http://msdn2.microsoft.com/en-us/library/ms171418(VS.80).aspx

16

8-APNDICE:
Encoding (o codificacin de caracteres): Es un mtodo que permite convertir un
carcter de un lenguaje natural a otro sistema de representacin diferente, para ello a
cada carcter se le asigna un cdigo en binario, por tanto, el nmero total de caracteres
posibles en una codificacin vendr dado por el nmero de bits que utilice la misma, asi
si tuviera 8 bits el encoding dispondr de 256 caracteres.
As pues si un texto se pasa a un encoding diferente es muy posible que se produzcan
incompatibilidades y no se pueda ver el verdadero contenido del documento.
El ms relevante dentro del contexto de la informtica es el Unicode, que es la
codificacin estandar y cuyo objetivo es proporcionar el medio por el cual un texto en
cualquier idioma pueda ser codifiado para el uso informtico, motivo por el cual ha
sufrido numerosas revisiones aadiendo nuevos caracteres posibles a representar.

17

9-GLOSARIO:
XML: eXtensible Markup Language (lenguaje de marcas extensible). Ms que un
lenguaje, es una forma de hacer lenguajes de etiquetas, muy til para mostrar
informacin de forma estructurada.
Etiqueta: Cada uno de los elementos del lenguaje XML, las etiquetas pueden tener
atributos.
Atributos: Manera de incorporar caractersticas o propiedades a las etiquetas, el valor
de los atributos debe ir entre comillas.
Encoding: Cdigo que empareja un juego de caracteres con otro tipo de smbolos (en el
entorno de la informtica ceros y unos) con el fin de poder representar ese juego de
caracteres de otra manera.

18

10-CONCLUSIONES:
Sobre los snippets:
Como ya se ha expuesto durante el manual, la utilizacin de los snippets nos permite
ahorrar bastante tiempo en la escritura de las diferentes estructuras, por tanto seremos
mucho ms eficientes utilizando los mismos que haciendo caso omiso de su existencia y
escribiendo todo carcter a carcter, aprovechando ese tiempo para la escritura de ms
lineas, mejorando as la productividad del programador. Adems como se ha visto, crear
tu propio snippet es muy sencillo. En unos pocos minutos y sin tener mucho
conocimiento de XML se podra crear uno.
Sobre la realizacin del trabajo:
En la realizacin de este documento hemos encontrado una serie de problemas que no
estaban previstos en un primer momento.
La primera versin del documento se hizo sin muchas complicaciones, con una buena
organizacin y entregado en la fecha prevista. La nica duda que tenamos surgi en un
ltimo momento, sobre algo que no tenamos previsto, y le preguntamos al cliente
mediante un correo cuando la fecha de entrega del documento venca en un da.
Cuando nosotros cremos que habamos hecho un buen trabajo, el cliente nos envi un
correo con una gran serie de cosas a mejorar o de ampliar en el documento. Qu fall?
La mayora de estos problemas son por un mal entendimiento entre el cliente y los
desarrolladores. Nosotros cremos que haba que hacer una introduccin a los snippets
(de hecho el ttulo del documento es Introduccin a los snippets) y el cliente quera
algo ms que una introduccin.
Para evitar esta situacin, la elaboracin de los requisitos del documento deben ser
responsabilidad compartida entre cliente, desarrolladores e incluso de usuarios finales.
De esta forma, debamos haber comunicado con nuestro cliente con ms asiduidad, y no
solo cuando el plazo de entrega vence en pocos das. Adems cuando el cliente te
manda una lista de cosas a mejorar o ampliar y no te ponga fecha, es de buen ver el que
los desarrolladores le propongan una fecha de entrega al cliente. Desde este documento,
tambin queremos aconsejar que no se d al cliente una fecha de entrega ajustada, ya
que siempre hay imprevistos y complicaciones que hace que el proyecto se alargue.

19

También podría gustarte