Los code snippets, o, fragmentos de código, son otra de las grandes prestaciones que nos ofrece el entorno de desarrollo Visual Studio, conocerlos y usarlos, puede ayudarnos a la hora de desarrollar. En este post hablaré de ellos: ¿qué son y cómo funcionan? ¿cuáles tiene VS instalados? y cómo crear tus propios fragmentos.

¿Qué son?

Pues como su nombre lo indica son fragmentos de código son "pequeñas" porciones de código que podemos reutilizar una y otra vez dentro de los archivos de código de nuestra aplicación, todo esto se hace en al momento de escribir el código y nada tiene que ver con alguna característica de C#.

Estos fragmentos de código se cargan de un directorio cuando arranca Visual, y podemos acceder a ellos a través de un menú contextual o aprovechar una de las ventajas de los snippets, la cual nos permite acceder a ellos a través de una especie de "palabra reservada" o atajo y la tecla tab.

Funcionamiento

Su funcionamiento es sencillo, mientras estamos editando escribimos el atajo y presionamos dos veces la tecla tab, tras lo cual como por arte de magia aparecerá el fragmento de código completo:

En este caso, si revisas bien, el atajo usado fue cw, que podríamos interpretar como la C de Console y la w de WriteLine, el hecho de que sea así solo es una coincidencia o un gran acierto del creado, pero no es necesario que el atajo tenga que ver con el código que genera, más adelante, cuando veamos cómo crear tus propios fragmentos, verás por qué lo digo.

También hay fragmentos de código que contienen partes editables dentro de ellos, de tal manera que podamos personalizarlo con el contexto de la aplicación que estamos desarrollando. Por ejemplo, mira este:

El atajo usado fue prop y una vez insertado, señaló dos partes del código a las cuales accedemos presionando tab nuevamente, en este caso permite editar el tipo de la propiedad y su nombre, para finalizar la edición presionamos enter.

Snippets de Visual Studio

Apenas terminas de instalar VS puedes comenzar a usar los fragmentos que trae por default, para C# son aproximadamente unos 35.

En este enlace está la lista entera, pero la siguiente es una lista de los que yo uso más:

  • #region que podemos usar para crear una agrupación física de líneas de código en nuestro archivo
  • ctor que se usa para crear un constructor de la clase en la que se declara
  • for crea un ciclo for con valores editables para la variable de iteración y sobre la que se va a comprobar el ciclo
  • foreach crea un ciclo "para cada", nos permite editar el tipo de dato y los nombres de los objetos
  • prop que crea una propiedad autoimplementada

  • propg que crea una propiedad autoimplementada que únicamente define un getter

  • propfull que crea una propiedad con su respectivo campo de respaldo

Si ya usas los fragmentos seguramente coincidiremos en algunos, y si no, cuando los empieces a usar, me cuentas.

Creando fragmentos

¿Qué sería de un IDE si no pudieramos personalizarlo? con VS podemos crear fragmentos para usarlos e inclusive compartirlos con nuestros amigos o compañeros de trabajo.

Primero que nada, los fragmentos se almacenan en archivos con extensión .snippet (que por dentro son XML). Y a pesar de que existen algunas extensiones que permiten manipularlos, para mi siempre ha sido mejor editarlos manualmente.

El lugar por default en donde debes colocar tus snippets es dentro de la carpeta \Documents\Visual Studio 20[XX]\Code Snippets\[Lenguaje]\My Code Snippets.

Bien, ahora que sabemos esto, vamos a crear un snippet, descarga este archivo (clic derecho, guardar cómo), este archivo contiene una plantilla para lograr al menos algo básico, ábrelo con tue editor de texto o XML favorito, yo uso Notepad++ y revisa su contenido.

Es sencillo como puedes ver, las partes esenciales son:

  • Header en donde va el título, el autor, la descripción y el atajo.
  • Snippet en donde va el código que queremos que se inserte en el documento.

Reemplaza los valores como desees, y no olvides poner tu código dentro de <![CDATA[ y ]]>, mira, este es el que yo he creado:

<CodeSnippet Format="1.0.0">
    <Header>
        <Title>I love C# snippet</Title>
        <Author>Antonio Feregrino</Author>
        <Description>Tells the world you love C#</Description>
        <Shortcut>love</Shortcut>
    </Header>
    <Snippet>
        <Code Language="CSharp">
            <![CDATA[Console.WriteLine("I love C#");]]>
        </Code>
    </Snippet>
</CodeSnippet>

Es hora de copiarlo en el directorio desde el que serán cargados e iniciar Visual Studio (hasta el día de hoy sigue siendo necesario reiniciar el IDE cada vez que cambiamos un snippet).

Entonces al escribir en un archivo de código C# el atajo love y presionar tab tab, sucede esto:

<img src="https://thatcsharpguy.github.io/postimages/code-snippets/love.gif" title=I love C# />

Vamos a crear algo un poco más complejo, algo que permita reemplazar valores dentro del fragmento de código, como el caso de prop, para realizar la tarea puedes seguir trabajando con el archivo que tienes, o descargar este otro.

Lo importante es añadir un hijo llamado Declarations como hijo de Snippet. Dentro de Declarations es donde debemos definir los reemplazos que vamos a necesitar. Existen dos tipos de reemplazos Literal y Object, por ahora vamos a quedarnos solo con Literal, así que añade un elemento d este tipo dentro de Declarations, a su vez, Literal debe tener como hijos los elementos ID y Default. Suena bastante complicado... y por eso pongo un ejemplo de lo que digo:

<CodeSnippet Format="1.0.0">
    <Header>
        <Title>I love ?? snippet</Title>
        <Author>Antonio Feregrino</Author>
        <Description>Tells the world you love something</Description>
        <Shortcut>lovesth</Shortcut>
    </Header>
    <Snippet>
        <Declarations>
            <Literal>
                <ID>something</ID>
                <Default>C#</Default>
            </Literal>
        </Declarations>
        <Code Language="CSharp">
            <![CDATA[Console.WriteLine("I love $something$");]]>
        </Code>
    </Snippet>
</CodeSnippet>

Como puedes ver, dentro del código del fragmento está el ID que puse dentro de la declaración del reemplazo, la novedad es que el ID está delimitado por $ lo cual indica que es un valor que será reemplazado.

##### Cambiando la ruta de los fragmentos Si lo que quieres es cambiar la ruta de tus fragmentos a otra carpeta dentro de tu PC, puedes acceder al Administrador de Fragmentos de Código que está en el menú Herramientas, dar clic en Añadir y seleccionar la carpeta de la que deseas que se carguen los fragmentos. En mi caso, lo tengo configurado de esa manera porque uso GitHub para sincronizar algunos de los fragmentos que uso, si quieres verlos, visita el repositorio.

Ventajas

La ventaja de los snippets va más allá del ahorro de tiempo que introduce en nuestro proceso de desarrollo, y esto lo digo porque tal vez la ventaja de escribir un if completo o usar el snippet no sea tan significativa. Si no el simple hecho de liberar nuestras mentes de colocar el cursor en la posición correcta o de cerrar correctamente los corchetes, es en sí, la gran ventaja de estos.

Además de que a través de los snippets se puede implementar un estilo de programación dentro de la organización en la que trabajamos, imagínate que todos usan los mismos fragmentos para programar, seguramente las diferencias entre el código de un programador y otro se disminuirían.

Desventajas

(...) La única desventaja real que existe es que podríamos acostumbrarnos a usarlos y que cuando no los tengamos nos costará un poco de trabajo programar sin ellos... pero vamos, que todos los IDE que son comúnmente usados para programar en .NET tienen soporte para fragmentos de código.