Una sinfonía en C#

Un pequeño aporte a la comunidad de habla hispana.

[VIDEO] Tips de Typescript: Interpolación de strings

Al igual que en el paso he publicado videos sobre Azure para desarrolladores web en ese caso he agregado un nuevo video sobre Typescript, más específicamente acerca de la interpolación de string, el video está disponible en éste link, aprovecho para dejar un listado con todos los videos sobre Typescript que he publicado hasta el momento:

Seguramente seguiré haciendo más videos sobre Typescript, nos leemos.

Primeros pasos con .NET Core

.NET Core es una plataforma rápida, modular y multiplataforma para crear aplicaciones.

¿Multiplataforma?

Sí, NET Core corre en Windows, macOS y Linux utilizando no solo el mismo lenguaje sino que también las mismas librerías.

¿Rápida?

Según estos benchmarks, es 8 veces más rápido que Node.js y 3 veces más que Go.

¿Modular?

El modelo de desarrollo se basa en paquetes, una aplicación .NET Core sólo incluye aquellas partes de la plataforma que utiliza, a diferencia de hoy en .NET Framework.

¿Dónde puedo descargarlo?

El sitio de .NET Core es éste, desde ahí elegimos la versión que necesitamos según nuestro sistema operativo

¿Cómo sé si está correctamente instalado?

Simplemente vamos a la línea de comandos (la que corresponda al sistema operativo) y tipeamos

dotnet

Si todo está bien deberíamos ver esto:

image

¿En qué lenguaje programamos?

En C#, tal cual como lo hacemos en Visual Studio con un proyecto ,NET.

¿Necesito Visual Studio?

No, con .NET Core instalado es suficiente, podemos usar Visual Studio, o Visual Studio Code (que también es corre en macOS y Linux) o cualquier editor que querramos.

¿Cómo empezamos?

Bien, para crear la primer aplicación tenemos que crear un directorio donde residirá el código de la aplicación, una vez creamos y dentro de este directorio tenemos que inicializar la aplicacion tipeando el siguiente comando

dotnet new

Nota: Si usamos Visual Studio estos pasos son realizados por Visual Studio automáticamente.

Una vez hecho esto vemos que se crean dos archivos

image

Program.cs, el archivo de inicio de la aplicación,

using System;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Sencillo, el típico archivo por defecto que imprime hello world, el otro archivo que fue creado en el directorio es project.json, veamos qué tiene adentro

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        }
      },
      "imports": "dnxcore50"
    }
  }
}

Este archivo tiene la información del proyecto, vemos que “dependencies” está vacío y tiene sentido, no hemos agregado dependencias, vemos que dentro de “frameworks” dice que utilizamos Microsoft.NETCore.App versión 1.0.0, sin embargo dentro del directorio no hay nada mas, lo que tenemos que hacer ahora es restaurar para ello tipeamos

dotnet restore

Después de hacer restore la aplicación está lista para correr pero antes nos damos cuenta que un nuevo archivo fue creador project.lock.json

image

El archivo project.lock.json no debe ser modificado a mano, ni debemos subirlo a nuestro control de versiones; durante el proceso de restore se calculan las dependencias del proyecto en el estado actual, esta tarea no es sencilla por lo tanto el archivo project.lock.json es creado como una forma de cache y actualizado cada vez que hacemos restore (deberemos hacer esto cuando agregemos o quitemos dependencias del proyecto).

Corriendo la aplicación por primera vez

Para correr la aplicación simplemente tipeamos

dotnet run

Y listo

image

Seguimos en la proxima, nos leemos.

¿Cómo obtengo la geolocalización del browser?

Los hemos visto muchas veces, entramos a un sitio y el navegador no dice que el sitio en custión quiere obtener nuestra ubicación, ¿pero cómo lo hace?

Es muy simple

Desde hace tiempo que los navegadores traen incluído un objeto dentro navigator llamado geolocation que nos permite consultar la ubicación

navigator.geolocation.getCurrentPosition(function(pos){
	console.log(pos);
});

El único tema es que el navegador por defecto nos advierte que el sitio en cuestión quiere saber nuestra ubicación (lo cual, en principio, no está mal)

 

image

Complicando un poco las cosas

Podeoms hacer un poco más que obtener la position, si nos referimos a la documentación del método getCurrentPosition vemos que acepta 3 parámetros, además del callback que nos devuelve la posicion tenemos otros para errores y un objeto para indicar algunos detalles, como el timeout y la precisión.

function getLocation() {
	navigator.geolocation.getCurrentPosition(function(position){
		console.log(position);
	}, function(error){
		console.log(error);
	}, 
	{
		enableHighAccuracy: true,
		timeout: 5000
	});
}

 

image

Un poco más bonito, en caso de que la obtención de la posición tome más tiempo llama al callback de error

PositionError { code: 3, message: "Position acquisition timed out" }

 

No nos queda más que usar la posición para hacer nuestras cosas.

Nos leemos.

Novedades de C#7

Vamos a ver un resumen de algunas de la novedades que trae C#7.

Variable de salida:

Hasta hoy si queríamos usar una variable de salida (out) por ejemplo en un TryParse, hacíamos así:

int i = 0;
string s = "10";

if(int.TryParse(s, out i)) {
  //hacer algo
}

No está mal, una vez confirmado el if podemos usar el valor en i, con C#7 podemos hacerlo de una manera más resumida

string s = "10";

if(int.TryParse(s, out int i)) {
  //hacer algo
}

Nos ahorramos la declaración de i por fuera del if, sin embargo dentro del if tenemos acceso a i.

Pattern matching

Esta característica es mucho más potente, nos permite hacer varias cosas, vamos a ver una de las que más me llama la atención, usar tipos en los switch

switch(shape)
{
    case Circle c:
        WriteLine($"circle with radius {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        WriteLine($"{s.Length} x {s.Height} square");
        break;
    case Rectangle r:
        WriteLine($"{r.Length} x {r.Height} rectangle");
        break;
    default:
        WriteLine("");
        break;
    case null:
        throw new ArgumentNullException(nameof(shape));
}

Como vemos podemos hacer un switch y poner tipos en los case, incluso con condiciones dentro de los mismos, obviamete las condiciones se evalúan solo si el tipo coincide, genial.

Notemos que incluso se evalúa null como un tipo, no nos confundamos a pesar de que el default está antes del null siempre se evalúa defaul en último lugar.

Sin llegar a usar un case podemos hacer otras cosas interesantes como ésta

if ((shape is Rectangle s) && s.Width == s.Length)  

Básicamente evaluamos si shape es del tipo Rectangle y si lo es asignamos el resultado de la igualación de tipos a la variable s, nuevamente, el scope de la variable es el if. Muy bueno.

Y hay más

Hay otras funcionalidades que se agregan a C# y otras que están planificadas, hay una buena lista acá.

Seguramente iremos viendo más en la medida que estén disponibles.

Nos leemos.

Sacando el jugo a console.log en el navegador web

La buena consola del navegador (esa que llamamos al hacer dumps de variables por ejemplo) hace algunas cosas que todos sabemos, como el famoso console.log(“algo”); sin embargo con el correr del tiempo se fueron agregando funcionalidades que no todos conocemos/usamos, y algunas son realmente interesantes.

console.log y más allá

Todos hemos usado console.log, bien en lo que se refiere a visualizar texto en realidad tenemos 4 métodos con los que lo podemos hacer:

  • console.log()
  • console.linfo()
  • console.warn()
  • console.error()

Uso básico

El uso más simple es pasar como parámetro un objeto o variable (o texto, claro) y el navegador nos mostrará la representación del objeto en forma de string.

image

Nótese que el navegador (Chrome en este caso) muestra un ícono diferente dependiendo del método usado, de hecho el último que hicismo con error genera un error en la consola y el warn una adverencia

image

También podemos pasar texto junto con el objeto

image

Sustituciones de strings

Existe la posiblidad de usar patrones de string para que la cadena haga reemplazos, para ser más claro mejor una tabla

String de sustitución Descripción
%o o %O Muestra un objeto y permite abrir el detalle
%d o %i Mustra un número,permite formato, ej. %.2d
%s Muestra un string
%f Muestra un número de punto flotante, soporta formato

 

Gracias al soprote de sustitución de string podemos hacer cosas como ésta en Firefox:

image

Cool, hay muchas otras cosas que se puden hacer en console, pero lo dejamos para más adelante.

Nota: no todos los navegadores dan el mismo resulado.

Nos leemos.