Curso C# con Mono – Conversión de tipos e información cultural

Cuando estamos trabajando con diferentes tipos de datos, siempre conviene conocer los mecanismos para convertir un tipo de datos en otros. Si a eso le sumamos, que podamos hacer aplicaciones en las que se trabaje introduciendo datos siguiente el formalismo español (comas para separar decimales, puntos para separar miles) o viceversa (podéis ver un mapa de dónde se usa cada separador decimal aquí).

Esto es lo que se llama la información cultural, que se sitúa dentro del ensamblado: System.Globalization, y que aparte de en este tema es conveniente conocer para otras tareas.

Casting

Es la forma más simple de hacer una conversión de datos. Está directamente heredada de C y puede ser implícita (si no se especifica) o explícita (cuando sí lo hacemos). Tiene grandes limitaciones porque básicamente sólo permite no convertir, sino camuflar, para una instrucción en concreto el tipo de dato.

Veamos un ejemplo:

int i = 10;
float f = 0;
f = i;  // conversión implícita
f = 0.5F;
i = (int)f;  // conversión explícita. Existe pérdida de información, los decimales

Métodos ToString

Al igual que en otros muchos lenguajes de programación, a este nivel de abstracción, existe un método ToString, definido en cada clase, que convierte cualquier objeto en una cadena. Si tenemos un entero que tiene dentro el valor 1, devolverá una cadena “1”; igualmente pasará  con un decimal, pero aquí es donde entra la información cultural en juego. Si tenemos la cultura predefinida como la española, mostrará comas y punto de acuerdo a nuestra forma de hacerlo, si definimos otra cultura predefinida, el comportamiento cambiará conforme a eso. También podemos cambiar de forma puntual la cultura predefinida para un punto en concreto.

Veamos ejemplos de uso avanzado de ToString usando especificadores, para mostrar el mismo número por pantalla con decimales, sin ellos, en formato moneda, con porcentaje…

decimal valor = 16325.62m; string especificador; // Sin especificador Console.WriteLine("Sin el especificador tenemos el valor: " + valor.ToString()); // Especificador numérico estándar especificador = "G"; Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador)); // Muestra: 16325,62 especificador = "C"; Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador)); // Muestra: 16.325,62€ especificador = "E04"; Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador)); // Muestra: 1,6326E+004 especificador = "F"; Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador)); // Muestra: 16325,62 especificador = "N"; Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador)); // Muestra: 16.325,62 especificador = "P"; Console.WriteLine("Con el especificador: " + especificador + " tenemos el valor: " + valor.ToString(especificador)); // Muestra: 1.632.562,00% read more

Leer más » 6 Comentarios

Kinect + DepthJS + Ubuntu + FX = Minority Report

¿Te gustaría navegar a lo Minority Report? Pues bien, demos la bienvenida a DepthJS, una extensión del navegador web Mozilla Firefox que nos permite que cualquier página web interactue con Kinect a través de JavaScript.

DepthJS es mucho más que una nueva forma de navegar. La idea fundamental es que ahora los desarrolladores web que se especializen en Javascript pueden trabajar con el Kinect sin tener que aprender un nuevo lenguaje o código especial de comunicación. Esto permitirá una nueva serie de interacciones más allá de lo que desarrolló por primera vez. read more

Leer más » 10 Comentarios

¿Una base de datos completamente en la nube?

Si el otro día os hablábamos de un generador de presentaciones en la nube, hoy os presento otra idea que me ha llamado mucho la atención, una base de datos en la nube. Muchos pensaréis ya que hay servicios que podríamos considerar “bases de datos en la nube” como cualquier alojamiento con MySQL que podamos contratar en un proveedor de hosting. Sin embargo, en este caso la idea es mucho más amplia.

Su nombres database.com (¿original verdad?) y el valor añadido que tiene respecto a las bases de datos en línea “normales” es que aparte de proveer el sistema en sí, nos proporciona una herramienta gráfica con la que hacer nuestros esquemas entidad-interrelación y controlar todos los aspectos que podamos necesitar: relaciones, atributos, tablas, disparadores y hasta procedimientos almacenados. read more

Leer más » 3 Comentarios

Instalar y Configurar Samba en Linux

Suponiendo que todos conocéis SAMBA. Para instalarla dentro de nuestro servidor:

  • Sobre Debian / Ubuntu / y derivados:

ahornero@6581-D:~$ sudo apt-get install samba smbfs

  • Sobre Red Hat / CentOS / Fedora:

ahornero@6581-D:~$ yum install samba smbfs (como superusuario)

Para iniciar, detener o reiniciar el servicio:

ahornero@6581-D:~$ /etc/init.d/samba stop / start / restart

ó

ahornero@6581-D:~$ restart smbd

Y para realizar la configuración de usuarios, acceso a directorios y permisos, recomendamos utilizar la aplicación system-config-samba; por defecto en CentOS viene instalada. Para instalarla en otros servidores Linux: read more

Leer más » 9 Comentarios

Resultado de los premios Portal Programas al Mejor Software Libre del año 2010

En estas mismas líneas ya hablamos hace días de la realización de los Premios Portal Programas al Mejor Software Libre 2010, de hecho, os pedimos que apostarais por TBO el creador de cómics creado por Danigm. Ya tenemos los resultados.

Por desgracia, TBO no ha podido ser ganador pero ha conseguido unas plazas un tanto decentes:

  • 10º como Mejor software libre
  • 5º como Software libre más revolucionario
  • 8º como Software que necesita más donaciones

Aún así, creo que el resultado es excelente porque miles de visitantes lo habrán conocido y en años posteriores seguro que podrá obtener mejores puntuaciones.

Los ganadores de las distintas categorías han sido: read more

Leer más » 3 Comentarios

Prezi, otra forma de hacer presentaciones

Desde estas líneas siempre he defendido los servicios en la nube. Creo que son el modelo de negocio ideal para que cualquiera pueda hacer algo relativamente grande y lo que se provee es un servicio, no un producto, por lo que podemos usar y proveer Software Libre sin problemas.

El servicio que os presento hoy, me ha sorprendido tanto por el resultado que proporciona, como por lo novedoso que me resulta. Su nombre es Prezi y se definen así mismos como The zooming presentation editor, es decir, “el editor de presentaciones haciendo zoom” (o algo así podríamos traducir, creo que queda mejor en inglés). read more

Leer más » 8 Comentarios

Mirror

Leer más » 9 Comentarios

Lo mejor de mi RSS del 29 de noviembre al 5 de diciembre

Leer más » 2 Comentarios

Curso C# con Mono – Declaración de clases y estructuras

Llegados a este punto, podríamos hablar tan profundamente y durante tanto tiempo sobre clases, objetos, métodos, atributos… que desvirtuaría el sentido de este curso. Supongo que tenéis nociones básicas de todo este paradigma de la orientación a objetos y veremos cómo implementar clases en C# con Mono.

Podríamos decir a muy grosso modo que:

  • Las clases son la unidad básica de estructuramiento en un programa de C#
  • Las estructuras son una herencia de lenguajes más antiguos, como C, donde creamos un grupo común para varias variables, sin atribuirles posibilidades de ejecución (métodos)

En C#, las estructuras pueden tener métodos básicos para la lectura o modificación de las variables.

¿Cómo crear una clase?

Digo cómo crear y no cómo declarar una clase, porque el curso está basado en MonoDevelop y tras crear una clase con el interfaz, veremos cómo se declara en el código.

Declaración de nueva clase con MonoDevelop

Dentro del espacio de nombres, a la izquierda de la interfaz, hacemos: clic derecho, “Añadir”, “Nuevo archivo”, “Clase vacía” e indicamos el nombre. Se nos creará un esqueleto básico de clase como el que sigue:

using System;

namespace holaMundo
{
	public class persona
	{
		public persona ()
		{
		}
	}
}

Veamos ahora la clase un poco más rellena. Como veréis, estoy dentro del mismo espacio de nombres en el que hemos hecho los ejemplos anteriores, “holaMundo”. Incluimos: atributos, métodos para manejar los atributos, el constructor y un método de ejemplo.

using System; namespace holaMundo { public class persona { // atributos string nombre; int edad; // propiedades: métodos para manejar los atributos public string Nombre { get { return nombre; } set { nombre = value; } } public int Edad { get { return edad; } set { edad = value; } } // constructor public persona (string _nombre, int _edad) { // usamos los métodos para manejar atributos en lugar de this.nombre Nombre = _nombre; Edad = _edad; } // método para imprimir datos de la instancia public void print() { System.Console.WriteLine("Nombre: " + nombre + " - Edad: " + edad.ToString()); } } } read more

Leer más » 9 Comentarios

Instalar World Of Goo en Ubuntu

Sí, sí y sí, hoy mismo la gente de Canónical acaba de agregar en el Ubuntu Software Center el juego World Of Goo que, a mi juicio, se trata de uno de los mejores juegos del mercado. Ya lo compré en su día, hace ya tiempo, creo que tarde exactamente 30 minutos después de probar la versión demo. Simplemente me encantan estas bolitas, ¡son geniales!

Se trata de una aplicación propietaria y de pago. Me considero un amante del software libre, de Linux y de la libertad que ofrece, pero también pienso que si alguien hace un trabajo bueno, ¿por qué no pagarlo? Este es el caso de este juego, una aplicación buena que merece la pena pagar por ella. Sus autores se han preocupado bastante de su fluidez y que corra en Linux al igual que en Windows o Mac OS X. read more

Leer más » 10 Comentarios