<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cristian</title>
    <description>The latest articles on DEV Community by Cristian (@crpaz).</description>
    <link>https://dev.to/crpaz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1341158%2F4694f5c0-9b76-43ec-97c4-c918f1d51463.png</url>
      <title>DEV Community: Cristian</title>
      <link>https://dev.to/crpaz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/crpaz"/>
    <language>en</language>
    <item>
      <title>Tipos de Tablas en Bases de Datos: Una Guía Simplificada</title>
      <dc:creator>Cristian</dc:creator>
      <pubDate>Fri, 11 Apr 2025 19:32:30 +0000</pubDate>
      <link>https://dev.to/crpaz/tipos-de-tablas-en-bases-de-datos-una-guia-simplificada-1iam</link>
      <guid>https://dev.to/crpaz/tipos-de-tablas-en-bases-de-datos-una-guia-simplificada-1iam</guid>
      <description>&lt;p&gt;En el mundo de las bases de datos, es común trabajar con diferentes tipos de tablas según la necesidad del proyecto. Hoy quiero explicar los cuatro tipos más comunes: Tablas Primarias, Tablas Históricas, Tablas de Configuración y Tablas Híbridas. No te preocupes, no vamos a entrar en detalles técnicos demasiado complicados, solo ejemplos prácticos para que puedas comprender cómo y cuándo se utilizan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Tabla Primaria&lt;/strong&gt;&lt;br&gt;
Las tablas primarias son las más importantes en una base de datos. Contienen los datos más relevantes y actuales, y en muchos casos también incluyen tablas relacionales, que son aquellas que almacenan información conectada entre sí mediante claves foráneas (aunque las tablas relacionales también son consideradas tablas primarias).&lt;/p&gt;

&lt;p&gt;Por ejemplo, en un sistema de gestión de ventas, la tabla de productos puede considerarse una tabla primaria, mientras que la tabla de ventas podría ser otra tabla primaria que se conecta con la de productos para hacer un seguimiento de las compras.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo de Tabla Primaria (Productos):&lt;/strong&gt;&lt;br&gt;
Una tabla primaria contiene los datos más importantes y actuales. En este caso, una tabla de productos para una tienda en línea podría tener la siguiente estructura:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID Producto&lt;/th&gt;
&lt;th&gt;Nombre&lt;/th&gt;
&lt;th&gt;Precio&lt;/th&gt;
&lt;th&gt;Categoría&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;001&lt;/td&gt;
&lt;td&gt;Camisa&lt;/td&gt;
&lt;td&gt;$20&lt;/td&gt;
&lt;td&gt;Ropa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;002&lt;/td&gt;
&lt;td&gt;Pantalón&lt;/td&gt;
&lt;td&gt;$40&lt;/td&gt;
&lt;td&gt;Ropa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;003&lt;/td&gt;
&lt;td&gt;Zapatos&lt;/td&gt;
&lt;td&gt;$60&lt;/td&gt;
&lt;td&gt;Calzado&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Esta tabla contiene información clave sobre los productos disponibles, como el nombre, el precio y la categoría. Las tablas primarias, como esta, son esenciales para el funcionamiento de un sistema y son las más utilizadas en una base de datos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Tabla Histórica&lt;/strong&gt;&lt;br&gt;
Las tablas históricas almacenan datos que ya no están activos pero que son importantes para análisis o auditoría futura. Por ejemplo, si un cliente cambia su dirección o si un producto tiene un precio distinto en diferentes momentos, es esencial guardar estos cambios en una tabla histórica.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo de Tabla Histórica (Precios de Productos)&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID Producto&lt;/th&gt;
&lt;th&gt;Precio Anterior&lt;/th&gt;
&lt;th&gt;Fecha Cambio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;001&lt;/td&gt;
&lt;td&gt;$18&lt;/td&gt;
&lt;td&gt;01/01/2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;002&lt;/td&gt;
&lt;td&gt;$35&lt;/td&gt;
&lt;td&gt;01/02/2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;003&lt;/td&gt;
&lt;td&gt;$55&lt;/td&gt;
&lt;td&gt;01/03/2025&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Esta tabla guarda un registro de los cambios de precio para referencia futura. Así, aunque el precio actual esté reflejado en la tabla primaria de productos, la tabla histórica mantiene un historial de todos los cambios realizados a lo largo del tiempo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Tabla de Configuración&lt;/strong&gt;&lt;br&gt;
Las tablas de configuración no almacenan datos de usuarios o productos, sino parámetros que definen el comportamiento general del sistema. Estas tablas son esenciales para establecer límites, configuraciones predeterminadas o ajustes del sistema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo de Tabla de Configuración (Ajustes Globales)&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parámetro&lt;/th&gt;
&lt;th&gt;Valor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Límite Intentos Login&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Envío Gratis Desde&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Activar Descuentos&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Las tablas de configuración permiten personalizar el comportamiento del sistema sin necesidad de modificar el código constantemente. Si se necesita cambiar algún valor, solo basta con modificar esta tabla, lo cual facilita la administración del sistema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Tabla Híbrida&lt;/strong&gt;&lt;br&gt;
Las tablas híbridas combinan las características de las tablas primarias y las históricas. Estas tablas permiten almacenar tanto los datos actuales como los históricos en una sola estructura. Son útiles cuando necesitas consultar tanto los datos actuales como los antiguos de manera rápida y eficiente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo de Tabla Híbrida (Empleados)&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID Empleado&lt;/th&gt;
&lt;th&gt;Nombre&lt;/th&gt;
&lt;th&gt;Cargo Actual&lt;/th&gt;
&lt;th&gt;Salario Actual&lt;/th&gt;
&lt;th&gt;Fecha Cambio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;001&lt;/td&gt;
&lt;td&gt;Juan&lt;/td&gt;
&lt;td&gt;Gerente&lt;/td&gt;
&lt;td&gt;$3500&lt;/td&gt;
&lt;td&gt;01/03/2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;002&lt;/td&gt;
&lt;td&gt;Ana&lt;/td&gt;
&lt;td&gt;Desarrollador&lt;/td&gt;
&lt;td&gt;$2000&lt;/td&gt;
&lt;td&gt;01/02/2025&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Esta tabla muestra tanto los datos actuales de los empleados como sus registros anteriores de cargos y salarios. Las tablas híbridas son útiles cuando necesitas tener toda la información en un solo lugar para facilitar su consulta.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;br&gt;
Cada tipo de tabla tiene un propósito específico y se adapta a las necesidades del sistema. Las tablas primarias contienen los datos actuales y esenciales, incluyendo tablas relacionales que conectan información de diferentes entidades. Las tablas históricas mantienen un registro de los datos pasados, las tablas de configuración almacenan parámetros del sistema, y las tablas híbridas combinan lo mejor de las dos anteriores para facilitar la consulta de información actual e histórica.&lt;/p&gt;

&lt;p&gt;La elección de qué tipo de tabla usar dependerá de cómo necesites organizar y acceder a los datos de tu sistema.&lt;/p&gt;

</description>
      <category>database</category>
      <category>architecture</category>
      <category>cleancode</category>
      <category>beginners</category>
    </item>
    <item>
      <title>La Solución del Billón de Dólares</title>
      <dc:creator>Cristian</dc:creator>
      <pubDate>Tue, 19 Mar 2024 17:20:54 +0000</pubDate>
      <link>https://dev.to/crpaz/la-solucion-del-billon-de-dolares-1ol</link>
      <guid>https://dev.to/crpaz/la-solucion-del-billon-de-dolares-1ol</guid>
      <description>&lt;p&gt;Seguramente eso fue un poco de ClickBait, pero presta atención, antes que puedas conocer la solución del billón de dólares debes conocer el Error del Billón de Dólares, no te parece?&lt;/p&gt;

&lt;h2&gt;
  
  
  El Problema del Billón de Dólares
&lt;/h2&gt;

&lt;p&gt;En realidad es sencillo, pero aunque sencillo, se calcula que ha costado Mas de un Billón de Dólares. El Tema en cuestión al cual muchos lenguajes modernos quieren escapar es el NULL, sencillo verdad? Claro ahora existen lenguajes que son “Null-Safety”, pero ¿Por qué han tenido que volverse Null-Safety muchos lenguajes modernos de hoy en día?. La respuesta no es solo por comodidad, o mejor manipulación de tu código, la verdad es que simplemente un null causa demasiados problemas si no se lo ha contemplado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Un poco de Historia
&lt;/h2&gt;

&lt;p&gt;Tony Hoare, un Científico informático británico, introdujo las referencias nulas en ALGOL W en1965 "simplemente porque era muy fácil de implementar", según el mismo.  Posteriormente hablaría de esa decisión considerándola "mi error de mil millones de dólares". Cuando se encontraba desarrollando un nuevo lenguaje, el Lenguaje Internacional ALGOL60, se encontraron con varios problemas pero el principal de ellos fue, que al agregar controles a las matrices aumento costo en memoria y tiempo de ejecución al programa. Por ende su solución fue sacrificar estabilidad a cambio de velocidad. Se incorporo el concepto de valor nulo, que representa una referencia que apunta, a un espacio de memoria inexistente(o no accesible) o un objeto inválido. Esto con el Fin de omitir dichos controles, así al momento de que es consultado un valor en un espacio de memoria no definido o se hace referencia a un índice fuera de la matriz esto ya no devuelve un error o una excepción inesperada, en su lugar devuelve un valor nulo, el cual puede ser manejado y manipulado fácilmente durante el proceso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Una solución simple a un valor simple
&lt;/h2&gt;

&lt;p&gt;La solución que propongo es sencilla, en este momento con el auge de los lenguajes de programación “Null-Safety” los valores “Null” son uno más dentro del rango de valores posibles que puede adoptar una variable u objeto, por lo tanto simplemente no debemos olvidarlos, y usarlos a nuestro favor. A Continuación presentare 3 ejemplos conceptuales apoyados en código en lenguaje C#.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo A – Semáforos, existencia con sentido&lt;/strong&gt;&lt;br&gt;
Como es de sentido común la existencia teórica de un semáforo vehicular plantea que debe estar funcionando, es decir que en todo momento de su existencia debe presentar un valor. Una forma de aprovechar las nuevas características de Null-Safety, es que los valores Binarios pueden adoptar un valor null.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;               
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Program&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;miSemaforo&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Semaforo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;miSemaforo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mostrarColor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// AMARILLO&lt;/span&gt;
        &lt;span class="n"&gt;miSemaforo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;miSemaforo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mostrarColor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// VERDE&lt;/span&gt;
        &lt;span class="n"&gt;miSemaforo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;miSemaforo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mostrarColor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// ROJO&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Semaforo&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Inicio Clase&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;//valor inicial naturalemnte null&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;mostrarColor&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt; &lt;span class="c1"&gt;//inicio método&lt;/span&gt;
         &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HasValue&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; &lt;span class="c1"&gt;//Si estado no tiene valor o es null&lt;/span&gt;
               &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AMARILLO"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
         &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
                          &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"VERDE"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                   &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
                           &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ROJO"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;//Fin metodo&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;//Fin clase&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AMARILLO: este es el valor mostrado por un semáforo dado un estado null, representa simbólicamente indeterminación, es decir No detiene el transito Ni lo permite, pero es a la vez el estado mínimo de un semáforo, ya que como dijimos no tiene sentido un semáforo que no este en amarillo como mínimo. Por otra parte un valor true seria VERDE(Avanzar) y un valor false seria ROJO(Detenerse). &lt;br&gt;
Para concluir este caso es sumamente recomendable donde poseemos estados o valores que en algún punto pueden representar indeterminación simbolizar este hecho ya que es información importante a usar en nuestro favor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo B – Billetera. Cero no es nulo&lt;/strong&gt;&lt;br&gt;
Muchas veces estaremos tentados a pensar que dentro del ámbito de los números(ya sean enteros o racionales) no importara si usamos un valor nulo para representar el cero o un numero infinitamente cercano a este, pero no debemos caer en esa tentación. Cero no es Nulo y Nulo no es Cero, así de simple, tratar de representar un valor Cero con Nulo nos puede acarrear muchísimos mas problemas que soluciones. Así que lo correcto es inicializar SIEMPRE nuestras variables o atributos numéricos en “0”.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;               
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Program&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;miBilletera&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Billetera&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
           &lt;span class="n"&gt;miBilletera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mostrarMonto&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="c1"&gt;//expone el monto actual&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Billetera&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;monto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//monto en divisa que contiene la billetera&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;Billetera&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;   &lt;span class="c1"&gt;//Constructor de la clase&lt;/span&gt;
             &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;monto&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;mostrarMonto&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt; &lt;span class="c1"&gt;//inicio metodo&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;monto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;//Fin metodo&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;//Fin clase&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si no se hubiere inicializado el valor del Monto en el constructor obtendríamos una Error al momento de consultar el valor del monto.&lt;br&gt;
Para concluir este caso también debemos mencionar que el mismo caso se aplica a textos donde Null no es Nada. Es decir teniendo cualquier variable que almacene un String, este nunca debe ser Null si no es intencional. Un ejemplo es un cartel electrónico en un centro comercial, aunque el letrero no muestre texto alguno, este no es nulo, es Vacío (“”).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo C – Todo o Cualquiera. ¿Qué representa un Null?&lt;/strong&gt;&lt;br&gt;
Para comprender y simplificar este caso debemos aceptar a fines prácticos que contra-intuitivamente Todo es Cualquiera. Decir que aceptamos “Todas las Posibilidades” es equivalente a decir que aceptamos “Cualquier Posibilidad”. Por lo tanto Null puede representar cómodamente Todo o Cualquiera. Por ejemplo, suponiendo que poseemos un sistema que posee almacenados una gran colección de videojuegos, debemos saber que cada videojuego solo corre en una plataforma especifica(PC,Xbox,PlayStation,etc.). Por lo tanto a la hora de requerir filtrar todas las plataformas puede ser apropiado usar un valor null para representar esa incertidumbre, ese desconocimiento de la plataforma especifica, o la posibilidad de que sea cualquier plataforma la que nos interesa.&lt;/p&gt;

&lt;p&gt;Haciendo Uso de una Librería Externa que tiene los métodos para filtrar y una API que sirve de repositorio, podemos analizar el siguiente código&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;               
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Program&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Videjuego&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;miColeccion&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;repositorioAPI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;obtenerVideojuegos&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;libreriaExterna&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mostrar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;miColeccion&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Muestra toda la colección de Videojuegos Indistintamente, de todas las plataformas&lt;/span&gt;
        &lt;span class="n"&gt;libreriaExterna&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mostrarFiltrado&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;miColeccion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;enumPlataforma&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PC&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;//Muestra la colección de Videojuegos que son compatibles con PC&lt;/span&gt;
        &lt;span class="n"&gt;libreriaExterna&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mostrarFiltrado&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;miColeccion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;enumPlataforma&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Xbox&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;//Muestra la colección de Videojuegos que son compatibles con Xbox&lt;/span&gt;
        &lt;span class="n"&gt;libreriaExterna&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mostrarFiltrado&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;miColeccion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;enumPlataforma&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Otros&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;//Muestra la colección de Videojuegos que son compatibles con Otros&lt;/span&gt;
        &lt;span class="n"&gt;libreriaExterna&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mostrarFiltrado&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;miColeccion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;//Muestra toda la colección de Videojuegos, lo mismo que “mostrar”&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;enumPlataforma&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Xbox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;PlayStation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;PC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;Otros&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Videjuego&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//nombre del videojuego&lt;/span&gt;
    &lt;span class="n"&gt;enumPlataforma&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;plataforma&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;//plataforma compatible con nuestro videojuego.&lt;/span&gt;
    &lt;span class="nf"&gt;Videjuego&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;   &lt;span class="c1"&gt;//Constructor de la clase&lt;/span&gt;
             &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nombre&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
             &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plataforma&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;enumPlataforma&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Otros&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;//Fin clase&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nótese que nuestro constructor no deja valores sin inicializar. Al Analizar la firma de los métodos Mostrar y MostrarFiltrado, podemos notar que a la hora de usar un valor null para referirnos al tipo de plataforma se hace innecesario el método mostrar, permitiéndonos más eficiencia, menos código, más control y flexibilidad en este.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>development</category>
      <category>null</category>
      <category>cleancode</category>
    </item>
  </channel>
</rss>
