<?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: elena</title>
    <description>The latest articles on DEV Community by elena (@beelzenef).</description>
    <link>https://dev.to/beelzenef</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%2F19218%2F952c9196-1019-4f91-bbf2-772ab5c37665.jpg</url>
      <title>DEV Community: elena</title>
      <link>https://dev.to/beelzenef</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/beelzenef"/>
    <language>en</language>
    <item>
      <title>Activar semanticsDebugger en Flutter</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Sun, 23 Mar 2025 18:31:12 +0000</pubDate>
      <link>https://dev.to/beelzenef/activar-semanticsdebugger-en-flutter-4dje</link>
      <guid>https://dev.to/beelzenef/activar-semanticsdebugger-en-flutter-4dje</guid>
      <description>&lt;p&gt;Hacer tus apps accesibles tiene muchísimas ventajas, entre las cuales se encuentra alcanzar a más personas que también son tu público objetivo. Si estás creando tu app con Flutter, puedes mejorar fácilmente apps para que sean mejores para lectores de pantalla.&lt;/p&gt;

&lt;p&gt;¡Vamos allá!&lt;/p&gt;

&lt;p&gt;En Flutter, tenemos una herramienta llamada &lt;em&gt;&lt;strong&gt;semantics tree&lt;/strong&gt;&lt;/em&gt;. Esto es nada más y nada menos que una forma de visualizar nuestras apps que nos muestra cómo se interpreta y recorre a través de lectores de pantalla, que son la forma que las personas invidentes pueden consumir productos digitales.&lt;/p&gt;

&lt;p&gt;Le arrebata la parte más visual a los &lt;em&gt;widgets&lt;/em&gt; en pantalla y lo muestra como contenedores con un texto. Este texto es la forma en la que va a ser consumido por los lectores de pantalla, que en una primera instancia, descubrirás que no es muy útil si te pones en la piel de una persona que no puede ver.&lt;/p&gt;

&lt;p&gt;Esta representación se puede modificar para que el lector de pantalla &lt;a href="https://api.flutter.dev/flutter/widgets/ExcludeSemantics-class.html" rel="noopener noreferrer"&gt;ignore el &lt;em&gt;widget&lt;/em&gt; en específico&lt;/a&gt;, &lt;a href="https://api.flutter.dev/flutter/widgets/Semantics-class.html" rel="noopener noreferrer"&gt;cambiar el texto que muestra&lt;/a&gt; o definir que &lt;a href="https://api.flutter.dev/flutter/widgets/MergeSemantics-class.html" rel="noopener noreferrer"&gt;dos o más &lt;em&gt;widgets&lt;/em&gt; deben ser leídos en conjunto&lt;/a&gt;… entre otras muchas características que pueden ser modificadas para mejorar la accesibilidad.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vwcvhrwtdhroi7ygp2j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vwcvhrwtdhroi7ygp2j.png" alt="Captura de pantalla de código en Flutter junto a aplicación en ejecución a la derecha, mostrando cómo se visualiza el semantics tree en una aplicación sobre viajes" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Y cómo se activa?
&lt;/h2&gt;

&lt;p&gt;Flutter es un framework que tiene estas features integradas de forma nativa, y habilitar el semantics tree es muy sencillo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kt"&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;runApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyApp&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;MaterialApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="s"&gt;'Flutter Demo'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;debugShowCheckedModeBanner:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

      &lt;span class="c1"&gt;// Habilitando el semantics debugger&lt;/span&gt;
      &lt;span class="nl"&gt;showSemanticsDebugger:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

      &lt;span class="nl"&gt;theme:&lt;/span&gt; &lt;span class="n"&gt;ThemeData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;colorSchemeSeed:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="nl"&gt;home:&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;MyHomePage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="s"&gt;'Flutter Demo Home Page'&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fácil, ¿verdad?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lo he habilitado pero no veo el semantics tree.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;¿Este es tu caso? En mayo de 2024, descubrí que en las aplicaciones Flutter (versión 3.19.6) no estaban mostrando el semantics tree a la hora de añadir esa línea, y se lo comunicaba al equipo de desarrollo a través de un &lt;a href="https://github.com/flutter/flutter/issues/147665" rel="noopener noreferrer"&gt;issue de GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;La solución temporal o workaround es añadir, previa ejecución del &lt;em&gt;widget&lt;/em&gt; principal, añadir la instrucción que vemos en la línea 3 del siguiente código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kt"&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="c1"&gt;// Forzando a mostrar semantics tree&lt;/span&gt;
  &lt;span class="n"&gt;WidgetsFlutterBinding&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ensureInitialized&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ensureSemantics&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;runApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyApp&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;MaterialApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="s"&gt;'Flutter Demo'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;debugShowCheckedModeBanner:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

      &lt;span class="c1"&gt;// Habilitando el semantics debugger&lt;/span&gt;
      &lt;span class="nl"&gt;showSemanticsDebugger:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

      &lt;span class="nl"&gt;theme:&lt;/span&gt; &lt;span class="n"&gt;ThemeData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;colorSchemeSeed:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="nl"&gt;home:&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;MyHomePage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="s"&gt;'Flutter Demo Home Page'&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto, podrás visualizar el &lt;em&gt;semantics tree&lt;/em&gt; y empezar a usar los &lt;em&gt;semantic widgets&lt;/em&gt; para hacer tus apps más accesibles. Espero que sea útil.&lt;/p&gt;

&lt;p&gt;seeU!&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>a11y</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Fluttereando, el viaje</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Wed, 06 Sep 2023 08:44:56 +0000</pubDate>
      <link>https://dev.to/beelzenef/fluttereando-el-viaje-3beh</link>
      <guid>https://dev.to/beelzenef/fluttereando-el-viaje-3beh</guid>
      <description>&lt;p&gt;Han pasado unos meses desde &lt;a href="https://www.facebook.com/dotnetelena/posts/pfbid0BHTZi9bEwFzJ9E8zRy6qPTSQ1xfr4seVJrqxyK2TvucZEByyxMjF2XSSRXcRtjyJl" rel="noopener noreferrer"&gt;esta publicación en mi página de Facebook&lt;/a&gt;, donde hablaba sobre mis primeras impresiones sobre Flutter, en contraposición a .NET MAUI, un framework del que venía heredando desde mis tiempos con WPF.&lt;/p&gt;

&lt;p&gt;Desde entonces, seguí con otros tipos de desarrollos, con otras tecnologías y para diferentes propósitos… pero eventualmente volví a probar Flutter. Le di una segunda oportunidad después de hablar con la comunidad de &lt;a href="https://www.meetup.com/malagamobile/events/292843435" rel="noopener noreferrer"&gt;MálagaMobile&lt;/a&gt;, en la que había varios fans y que me invitaron a hacerlo.&lt;/p&gt;

&lt;p&gt;Y a diferencia de la primera vez, decidí seguir una serie de cursos, conocimientos estructurados y organizados… en lugar de experimentar sin un orden validado por otra entidad.&lt;/p&gt;

&lt;p&gt;Esta es mi experiencia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primera oportunidad: el caos
&lt;/h2&gt;

&lt;p&gt;Si retrocedo en el tiempo, visitaba la documentación oficial, buscaba tutoriales para casuísticas muy concretas para hacer proyectos relativamente pequeños. La experiencia era limitada y agridulce, desordenada y sin proyección. Podía hacer cosas como las que muestro en el siguiente tweet, sí, pero nada del otro mundo:&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1608856246576373760-270" src="https://platform.twitter.com/embed/Tweet.html?id=1608856246576373760"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1608856246576373760-270');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1608856246576373760&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Para quien no pueda ver Twitter/X, se trata de una aplicación sencilla, una to-do list, sin persistencia donde se pueden añadir/eliminar items, además de marcar/desmarcar como completados. No tiene ordenación ni los elementos nuevos se stackean.&lt;/p&gt;

&lt;p&gt;Entonces decidí probar, esta vez de forma estructurada, ordenada… para hablar definitivamente con conocimiento de causa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Segunda oportunidad: la esperanza
&lt;/h2&gt;

&lt;p&gt;No necesitaba tutoriales sueltos, si no un curso completo (o lo más completo posible).&lt;/p&gt;

&lt;p&gt;Buceando en la red, encontré la escuela de &lt;a href="https://github.com/londonappbrewery" rel="noopener noreferrer"&gt;London App Brewery&lt;/a&gt; a través de LinkedIn Learning. Esta escuela ofrece diferentes cursos de programación con diferentes tecnologías para web y mobile… que hasta donde sé está bastante inactiva (al menos en sus redes sociales). Pero el contenido permanece.&lt;/p&gt;

&lt;p&gt;A medida que fui completando los cursos, fui encontrando inconsistencias y errores con versiones actuales del framework, pues no se han ido actualizando en el tiempo. Pero nada que no se pueda resolver buscando documentación.&lt;/p&gt;


&lt;div class="instagram-position"&gt;
  &lt;iframe id="instagram-liquid-tag" src="https://www.instagram.com/p/CtLe--6AZyh/embed/captioned/"&gt;
  &lt;/iframe&gt;
  
&lt;/div&gt;


&lt;p&gt;También he asistido a algunos eventos, sumergiéndome en la &lt;a href="https://www.meetup.com/flutter-malaga/" rel="noopener noreferrer"&gt;comunidad malagueña&lt;/a&gt; alrededor de este framework… y es muy diferente. Tener una comunidad cerca, con la que poder compartir, aprender y también refrescar entusiasmo, me parece clave con una tecnología que no utilizas diariamente para tu trabajo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Actualmente: la curiosidad
&lt;/h2&gt;

&lt;p&gt;Sigo avanzando a partir de otras escuelas y formadores. Todavía me quedan cursos por consumir de LondonAppBrewery y también aprendo con Fernando Herrera.&lt;/p&gt;

&lt;p&gt;El roadmap me indica que tengo mucho que aprender sobre bases de datos, state management, navegación, testing, arquitectura… y creo que me apetece seguir.&lt;/p&gt;

&lt;p&gt;No sé cuál sería la herramienta a utilizar en proyectos profesionales, pero para experimentar, aprender y probar… Flutter parece un buen lugar en el que quedarme.&lt;/p&gt;

&lt;p&gt;Veremos qué ocurre en esta etapa.&lt;/p&gt;

&lt;p&gt;seeU!&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>programming</category>
      <category>dart</category>
      <category>learning</category>
    </item>
    <item>
      <title>Novedades .NET en mayo 2022</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Tue, 17 May 2022 19:09:00 +0000</pubDate>
      <link>https://dev.to/beelzenef/novedades-net-en-mayo-2022-1e4c</link>
      <guid>https://dev.to/beelzenef/novedades-net-en-mayo-2022-1e4c</guid>
      <description>&lt;p&gt;El ecosistema .NET está más que vivo, porque estamos viendo una cantidad de novedades increíbles en varias áreas: móvil, Entity Framework, eventos...&lt;/p&gt;

&lt;p&gt;En este post vamos a descubrir algunas de ellas, ¡empezamos!&lt;/p&gt;

&lt;h3&gt;
  
  
  Sobre MAUI
&lt;/h3&gt;

&lt;p&gt;Por si no lo conoces, NET Multi-platform App UI (MAUI para las amistades) es el framework que evoluciona de Xamarin.Forms. Sigue en desarrollo, y nos abrirá la puerta para desarrollar apps para Windows, Android, iOS y Mac.&lt;/p&gt;

&lt;p&gt;Pues bien, al momento de escribir este post ya se ha publicado la &lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-maui-rc-3/" rel="noopener noreferrer"&gt;Release Candidate 3&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Además, Visual Studio Installer ya incluye el workload específico de MAUI en la preview de Visual Studio 2022:&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1524433653501239296-899" src="https://platform.twitter.com/embed/Tweet.html?id=1524433653501239296"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1524433653501239296-899');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1524433653501239296&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Porque Visual Studio 2022 tampoco para, ya se ha lanzado la &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-2-is-now-available/" rel="noopener noreferrer"&gt;versión 17.2&lt;/a&gt;, incluyendo las siguientes features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Mejoras para el debugging de colecciones&lt;/li&gt;
&lt;li&gt;  Live preview de webs para ASP.NET&lt;/li&gt;
&lt;li&gt;  Mejoras para el desarrollo con Azure&lt;/li&gt;
&lt;li&gt;  Mejoras de experiencia con Git dentro del IDE&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Taller de .NET MAUI
&lt;/h4&gt;

&lt;p&gt;Javier Suárez está publicando, vídeo a vídeo, un taller introductorio a .NET MAUI en su canal de YouTube. Si estás deseando crear tus próximas futuras aplicaciones multiplataforma con una nueva herramienta, aquí tienes la solución:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/uWQt95m6Zic"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Al momento de escribir esto, tenemos 7 episodios, pero puedes ver todo el &lt;a href="https://github.com/jsuarezruiz/taller-dotnet-maui" rel="noopener noreferrer"&gt;temario planificado en el repositorio de GitHub&lt;/a&gt;, junto con todas las diapositivas y demos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Novedades de .NET 7 Preview 4
&lt;/h3&gt;

&lt;p&gt;En el &lt;a href="https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-preview-4/" rel="noopener noreferrer"&gt;artículo original de esta noticia&lt;/a&gt; podéis ver todos las novedades relacionadas con ASP.NET Core, entre las que se encuentran:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Mejoras para OpenAPI en minimal APIs&lt;/li&gt;
&lt;li&gt;  Client results en SignalR&lt;/li&gt;
&lt;li&gt;  Mejoras de performance en HTTP/2&lt;/li&gt;
&lt;li&gt;  Devolver múltiples tipos de resultados en minimal APIs&lt;/li&gt;
&lt;li&gt;  Route groups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entre otras cositas, como las novedades para &lt;a href="https://devblogs.microsoft.com/dotnet/announcing-entity-framework-7-preview-4/" rel="noopener noreferrer"&gt;Entity Framework 7 preview 4&lt;/a&gt; y las que también &lt;a href="https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-preview-4/" rel="noopener noreferrer"&gt;anuncian de la última preview de .NET 7&lt;/a&gt; en general.&lt;/p&gt;

&lt;h3&gt;
  
  
  #MSBuild 2022
&lt;/h3&gt;

&lt;p&gt;Y esto no acaba aquí, porque se acerca el Microsoft Build.&lt;/p&gt;

&lt;p&gt;Este evento es en el que Microsoft saca toda su artillería para mostrar todos los productos que están por venir, mejorar y sorprendernos. Más juguetes y herramientas con las que seguir creando y aprendiendo.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1518985549591289856-743" src="https://platform.twitter.com/embed/Tweet.html?id=1518985549591289856"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1518985549591289856-743');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1518985549591289856&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;¡Nos veremos en #MSBuild, del 24 al 26 de mayo!&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>netcore</category>
      <category>maui</category>
    </item>
    <item>
      <title>Junior devs, ¿qué espero encontrar?</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Mon, 25 Oct 2021 07:47:18 +0000</pubDate>
      <link>https://dev.to/beelzenef/junior-devs-que-espero-encontrar-56p9</link>
      <guid>https://dev.to/beelzenef/junior-devs-que-espero-encontrar-56p9</guid>
      <description>&lt;p&gt;Al momento de escribir este artículo, voy en camino a los cuatro años dentro del mundo del desarrollo de forma profesional. He vivido cambios de empresas, muchas personas, diversas tecnologías…&lt;/p&gt;

&lt;p&gt;Es un recorrido en el que creo que puedo decir que ya no soy junior, pero tampoco me considero senior o experta en las materias con las que trabajo diariamente. Así que me lancé a preguntar en &lt;a href="https://twitter.com/Beelzenef_/status/1436652901750001669" rel="noopener noreferrer"&gt;Twitter si os gustaría leer sobre cosas que espero o me gustaría encontrar en alguien junior que entra a desarrollar y trabajar conmigo&lt;/a&gt;. Es cuestión de mirar atrás, tomar perspectiva y empatizar con quien está empezando.&lt;/p&gt;

&lt;p&gt;La respuesta a la encuesta fue tremendamente positiva, así que me pregunto: ¿qué me gustaría encontrar en junior devs cuando trabajan conmigo? ¡Comencemos!&lt;/p&gt;

&lt;p&gt;Podría ponerme a listar tecnologías o a hablaros de &lt;a href="https://geekstorming.wordpress.com/tag/microsoft/" rel="noopener noreferrer"&gt;lo mucho que me gusta .NET y todo el ecosistema Microsoft&lt;/a&gt;, pero no se trata de eso. Haré una pequeña categorización para dejar claro cada punto a tratar.&lt;/p&gt;

&lt;h2&gt;
  
  
  En soft skills
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Curiosidad
&lt;/h3&gt;

&lt;p&gt;El mundo del desarrollo es enorme, y parece que crece cada día más. Nuevas tecnologías, frameworks, herramientas. &lt;strong&gt;Hay tanto que resulta abrumador, y es normal&lt;/strong&gt;, especialmente cuando estáis empezando.&lt;/p&gt;

&lt;p&gt;Pero por eso estáis en un equipo con muchas personas con diferentes backgrounds, experiencias y áreas de conocimiento. No os cortéis en preguntar qué áreas podéis investigar, qué tecnologías resultan más útiles en una determinada tarea…&lt;/p&gt;

&lt;p&gt;Paso a paso, vais conectando piezas y encontrando el camino. Siempre habrá cosas que mejorar y cambios de direcciones en el aprendizaje, pero creo que es lo mejor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recordad que trabajáis en un equipo y podéis apoyaros en él para satisfacer vuestra curiosidad.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Comunicación
&lt;/h3&gt;

&lt;p&gt;Esta es quizás una de las más difíciles, pero a la vez que considero muy importante.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saber expresarte por escrito o bien hablando&lt;/strong&gt; es realmente valioso. ¿Por qué? Porque expresándote de forma adecuada, puedo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ayudarte más rápido&lt;/li&gt;
&lt;li&gt;Resolver tus dudas con mayor precisión&lt;/li&gt;
&lt;li&gt;Detectar posibles malentendidos o errores de concepto a la hora de abordar una tarea&lt;/li&gt;
&lt;li&gt;Reconducirte si es necesario hacia un camino más sencillo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ya sea a viva voz o por escrito, valoro mucho cuando me expresan una necesidad de forma clara, concisa y concreta. Por resumirlo de alguna forma, cuando necesitéis ayuda es fantástico leer la siguiente información:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Con qué tarea estás o qué estás haciendo?&lt;/li&gt;
&lt;li&gt;¿Cuál es el problema o duda?&lt;/li&gt;
&lt;li&gt;¿Qué has intentado?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Porque al estar enfrascada en mis propias tareas, necesito todo el contexto posible de tu problema o situación para poder entenderte y ayudarte.&lt;/p&gt;

&lt;h3&gt;
  
  
  Proactividad
&lt;/h3&gt;

&lt;p&gt;Es normal otorgar tareas pequeñas y/o cortas a juniors, especialmente cuando estáis empezando. Así, poco a poco, se puede ir midiendo vuestra velocidad y autonomía, e ir escalando gradualmente en dificultad o complejidad.&lt;/p&gt;

&lt;p&gt;Con el tiempo iréis cogiendo velocidad, y acabarán tareas más rápido, con menos errores y con menos ayuda. Lo que aprecio muchísimo es, &lt;strong&gt;si te ves sin tarea, has acabado antes de tiempo&lt;/strong&gt; o no hay nada que hacer de forma activa, encontrar alguna de las siguientes preguntas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Qué más puedo hacer?&lt;/li&gt;
&lt;li&gt;¿Qué puedo investigar?&lt;/li&gt;
&lt;li&gt;¿Puedo ayudar con algo?&lt;/li&gt;
&lt;li&gt;¿Hay alguna tarea con la que pueda empezar?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No quiero decir con esto que no despegues la mirada del monitor, descansar es necesario y más que recomendable, pero creo necesario el percibir las ganas de crecer y evolucionar.&lt;/p&gt;

&lt;h2&gt;
  
  
  En tech skills
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Git y buenas prácticas de control de versiones
&lt;/h3&gt;

&lt;p&gt;Git es una herramienta que considero indispensable si trabajas con otras personas en cualquier tipo de solución, independientemente de la tecnología y el lenguaje. No pido que tengas un perfil de GitHub con +8000 repositorios y un &lt;a href="https://th.bing.com/th/id/R.ba4b0b67e492c5e3695ea124e611a93a?rik=VuAfTkQdoyYkbQ&amp;amp;pid=ImgRaw&amp;amp;r=0" rel="noopener noreferrer"&gt;tablero de contribuciones lleno&lt;/a&gt;. &lt;strong&gt;Pero sí un manejo fluido de repositorios y ramas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;¿Cuales son las buenas prácticas que aprecio?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commits descriptivos&lt;/li&gt;
&lt;li&gt;Higiene y buen mantenimiento de ramas&lt;/li&gt;
&lt;li&gt;Resolución de conflictos entre ramas&lt;/li&gt;
&lt;li&gt;Pull requests bien documentados&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Comprensión del código
&lt;/h3&gt;

&lt;p&gt;La mayor parte de los lenguajes, por no decir todos, tienen estructuras similares si no iguales. &lt;strong&gt;Entender cómo usar variables, estructuras condicionales, bucles, refactorización… son nociones básicas.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No me importa tanto la tecnología o el lenguaje como el dominio que tengas de la programación en general. Poco a poco, los detalles específicos de cada tecnología irán llegando en forma de documentación, y se irán perfeccionando a base de práctica.&lt;/p&gt;




&lt;p&gt;Otros conocimientos como infraestructura, entornos, despliegues, automatización… ya llegarán, con el tiempo a medida que evoluciones y sigas progresando en proyectos. Pero, de forma totalmente intencionada, en primer lugar y en mayor número se encuentran las soft skills.&lt;/p&gt;

&lt;p&gt;Después de leer todo esto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Añadirías alguna otra?&lt;/li&gt;
&lt;li&gt;¿Crees que sobra alguna?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si eres junior o llevas poco tiempo desarrollando, &lt;strong&gt;¿cuál es la habilidad o el conocimiento que te hubiera gustado aprender o desarrollar antes?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Espero que os sea útil, y cualquier feedback a que queráis compartir es más que bienvenido en comentarios o en Twitter.&lt;/p&gt;

&lt;p&gt;seeU!&lt;/p&gt;

</description>
      <category>junior</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Empatía y código ajeno</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Mon, 20 Sep 2021 08:48:56 +0000</pubDate>
      <link>https://dev.to/beelzenef/empatia-y-codigo-ajeno-4b3l</link>
      <guid>https://dev.to/beelzenef/empatia-y-codigo-ajeno-4b3l</guid>
      <description>&lt;p&gt;Todo el mundo ha empezado cometiendo errores, creando mal código (o al menos, altamente refactorizable) y con mucho margen de mejora. Y cometeríamos un error si olvidamos esta realidad para hacer daño a quienes están empezando o mejorando.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A veces me da miedito subir capturas de mi código porque siento que aquí esperan ver puro código senior level, la vdd no me molesta recibir recomendaciones y/o críticas constructivas pero hay gente que sí se pasa (hay maneras de aportar). Pero csm de todos modos lo subo 😜😹 - Miranda, en Twitter&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Quiero escribir sobre la exposición en redes, lo complicado de hacerlo de forma voluntaria... y lo erróneo que es hacerlo sin consentimiento o contra los deseos de la persona autora.&lt;/p&gt;

&lt;p&gt;Hace unos días veía cómo una persona reconocida, valorada y bien considerada en el mundo del desarrollo tomaba una captura del código de alguien anónimo y exponía todos los errores que ese código contenía. Y como este ejemplo habrá otros muchos, desde luego, pero este es el más cercano que tengo y el más reciente que conozco.&lt;/p&gt;

&lt;p&gt;Encuentro muchos problemas con todo este asunto, que voy a desarrollar todo este asunto para intentar crear conciencia.&lt;/p&gt;

&lt;p&gt;"Lo que mejora las cosas es la conexión", &lt;a href="https://youtu.be/1Evwgu369Jw" rel="noopener noreferrer"&gt;Brené Brown sobre la empatía y vulnerabilidad&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¿Qué hay que tener en cuenta? ¿Cuales son los problemas que encuentro con todo esto?&lt;/p&gt;

&lt;h3&gt;
  
  
  Empatía
&lt;/h3&gt;

&lt;p&gt;La empatía es sentir con las personas, conectar con ellas. No podemos dejar conectar con las personas, para poder entender su posición, buscar la mejor forma de crecer en compañía y acompañarlas en el camino a ser mejores.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recordar nuestra historia
&lt;/h3&gt;

&lt;p&gt;Como decía al principio, no hay quien no haya pasado por los primeros pasos, los errores comunes, código no refactorizado, escrito a la carrera y con alto margen de mejora. Y precisamente hay que dar un paso atrás y ponernos en la piel de la otra persona... y pensar cómo nos podría sentar algo así si volviesemos a esa posición, o nos encontremos en un momento vulnerable o difícil.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pensando en el futuro
&lt;/h3&gt;

&lt;p&gt;Minar la moral de una persona aunque sea de forma anónima tiene muchas consecuencias en las que quizás no hayamos pensado. El temor a este tipo de exposición puede desembocar en que alguien que esté empezando no muestre su código, no busque ayuda... y por lo tanto no mejore tan rápido como podría o en el mejor ambiente. Esto, pensando a gran escala, afecta a nuestro sector.&lt;/p&gt;

&lt;p&gt;Crear una cultura de la vergüenza en el desarrollo creará más *developers *con miedo a mostrarse vulnerables en su aprendizaje, algo que es clave para mejorar. ¿Necesitamos eso realmente? Estoy bastante segura de que no.&lt;/p&gt;

&lt;h3&gt;
  
  
  El alcance de nuestras acciones
&lt;/h3&gt;

&lt;p&gt;Con este punto no quiero decir que una acción sea mejor o peor dependiendo de la visibilidad que tengamos en foros, redes sociales o dinámicas de grupo. Pero sin duda, la onda expansiva de una acción tendrá mucho más peso, y atraer reacciones dañinas, si tienes alcance a mucha gente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ser un ejemplo para mucha gente
&lt;/h3&gt;

&lt;p&gt;Hay personas que, por decisiones de una entidad, el trabajo realizado o simplemente por carisma natural, son más visibles y son tomadas como un ejemplo a seguir. Esto es una gran responsabilidad, porque la gente busca en ti un apoyo, una fuente de conocimiento... y en ocasiones acciones a seguir. Esto ocurre en redes sociales y fuera de ellas, y muchas veces ocurre de forma natural, sin que la persona en particular lo busque. Pero, lo hayamos buscado o no, es así y debemos tener cuidado con lo que decimos y hacemos.&lt;/p&gt;




&lt;p&gt;Si hay algo que debatir sobre este tema, quisiera que fuera un debate sano, un debate que aporte, que nos haga reflexionar sobre si hemos caído en esta falta de empatía y si debemos dar un toque a las personas que lo hacen a nuestro alrededor.&lt;/p&gt;

&lt;p&gt;La comunidad se crea entre todas las personas que la conforman, y todas las prácticas, positivas o negativas, pueden crear tendencias y patrones.&lt;/p&gt;

&lt;p&gt;¿Que patrones queremos repetir? ¿Cuales son las prácticas que queremos ver a lo largo del tiempo? ¿Cuál es el legado que podemos dejar en la comunidad y las personas?&lt;/p&gt;

&lt;p&gt;Pensemos a futuro, en las consecuencias que pueden tener nuestras acciones, tanto en las dinámicas de grupo en los que participamos y las personas que hay a nuestro alrededor. Cuidemos, o al menos no dañemos, a las personas en la medida que esté a nuestro alcance, estén cerca o lejos.&lt;/p&gt;

&lt;p&gt;seeU!&lt;/p&gt;

</description>
      <category>coding</category>
      <category>empathy</category>
      <category>rookies</category>
    </item>
    <item>
      <title>Buenas prácticas en Azure DevOps</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Mon, 29 Mar 2021 06:52:22 +0000</pubDate>
      <link>https://dev.to/beelzenef/buenas-practicas-en-azure-devops-3g6e</link>
      <guid>https://dev.to/beelzenef/buenas-practicas-en-azure-devops-3g6e</guid>
      <description>&lt;p&gt;Si no conoces Azure DevOps, es un servicio de Microsoft que nos permite implementar de forma más sencilla la cultura DevOps en nuestros proyectos de desarrollo.&lt;/p&gt;

&lt;p&gt;Puedes crear una organización y hasta 300 proyectos de forma gratuita, por lo que puedes dividir todo tu trabajo en diferentes proyectos.&lt;/p&gt;

&lt;p&gt;No existen reglas estrictas sobre buenas prácticas, pues cada proyecto es un mundo y tiene sus propias necesidades, pero sí que voy a escribir lo que considero algunos consejos útiles después de bastante tiempo trabajando con esta herramienta.&lt;/p&gt;

&lt;p&gt;¡Comenzamos!&lt;/p&gt;

&lt;h4&gt;
  
  
  Metodología de equipo
&lt;/h4&gt;

&lt;p&gt;Lo primero y más importante es definir reglas, convenciones, para trabajar en equipo.&lt;/p&gt;

&lt;p&gt;Mientras tu equipo y tú tengáis una metodología común y clara a seguir, todo debería estar bien. Pero Azure DevOps te ofrece plantillas de metodologías orientadas a la gestión de tareas como Agile, SCRUM... para que te sirvan de apoyo en tus procesos de trabajo.&lt;/p&gt;

&lt;p&gt;Tienes &lt;a href="https://docs.microsoft.com/en-us/azure/devops/boards/work-items/guidance/choose-process?view=azure-devops&amp;amp;tabs=basic-process#basic-agile-scrum-and-cmmi" rel="noopener noreferrer"&gt;la documentación de Microsoft para saber todos los procesos entre los que puedes elegir&lt;/a&gt;. Aunque, si tienes dudas o no tienes claro cuál deberías elegir, siempre puedes elegir el proceso Basic.&lt;/p&gt;

&lt;h4&gt;
  
  
  Despeja la vista
&lt;/h4&gt;

&lt;p&gt;Azure DevOps te ofrece, por defecto, los siguientes servicios: Dashboards, Repos, Boards, Pipelines, Artifacts y Test Plans.&lt;/p&gt;

&lt;p&gt;Como cada proyecto es un mundo, puede que solo necesites cuatro, dos o solo uno de los servicios que acabo de listar. Así que, en ese caso, puedes desactivar aquellos servicios que no uses. ¿Cómo puedo hacerlo? Aquí tienes una &lt;a href="https://docs.microsoft.com/en-us/azure/devops/organizations/settings/set-services?view=azure-devops" rel="noopener noreferrer"&gt;guía, en la documentación oficial de Microsoft&lt;/a&gt;, donde muestra lo sencillo que resulta.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftijcdrczc940f4f0nkqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftijcdrczc940f4f0nkqh.png" alt="Guia en una imagen sobre cómo desactivar servicios en Azure DevOps" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Usa la Wiki
&lt;/h4&gt;

&lt;p&gt;Documenta todo lo que necesites. La documentación de proyectos es considerada una de las partes más pesadas del mundo del desarrollo. Es una de las partes más olvidadas a la vez que más valiosas de un producto.&lt;/p&gt;

&lt;p&gt;Ya sea para hacer el *onboarding *a alguien que recién entra en el proyecto de forma más sencilla, para tener bien detallada la infraestructura o los diferentes entornos, la estrategia o arquitectura elegida en las diferentes soluciones... es algo que olvidamos con frecuencia pero que resulta muy útil de cara al futuro.&lt;/p&gt;

&lt;p&gt;Al estar dentro de Azure DevOps, puedes crear diferentes páginas y secciones dentro de la Wiki, además de enlazar con sencillez elementos como Tasks, pipelines... y reunir toda la información en un mismo lugar.&lt;/p&gt;

&lt;h4&gt;
  
  
  Establece tus &lt;em&gt;Teams&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;Establece bien los equipos de trabajo y su visibilidad de los diferentes elementos del proyecto. Dentro de cada proyecto, no todas las personas que forman parte del mismo tendrán la misma responsabilidad o visibilidad de las diferentes partes de la solución.&lt;/p&gt;

&lt;p&gt;No todo el mundo podrá validar &lt;em&gt;pull requests&lt;/em&gt;, no todo el mundo podrá hacer despliegues... y en lugar de gestionar esos permisos a cada persona de forma individual, podrás dar permisos a los *Teams *que consideres oportunos y agregar a personas a estos, para recibir esos permisos que se hayan asignado al Team.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Dashboards&lt;/em&gt; y &lt;em&gt;widgets&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;Uno de los servicios que tiene Azure Devops es Dashboards. Su función es darte un entorno que personalizar por completo a través de &lt;em&gt;widgets&lt;/em&gt; para tener un vistazo general del proyecto.&lt;/p&gt;

&lt;p&gt;Puedes tener un Dashboard, totalmente independientes entre sí, por Team, para que cada uno tenga su propia visión de tareas, &lt;em&gt;burndowns&lt;/em&gt; en los sprints, gráficos de &lt;em&gt;pipelines&lt;/em&gt;, porcentajes de éxito en el testing...&lt;/p&gt;

&lt;p&gt;Al final, tu proyecto puede visualizarse como la siguiente imagen, o de forma totalmente diferente según tus necesidades:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3rwso7a02hf8hqsasp0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3rwso7a02hf8hqsasp0.png" alt="Ejemplo de Dashboard con múltiples widgets para un Team" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No dudes en consultar la &lt;a href="https://docs.microsoft.com/en-us/azure/devops/report/dashboards/overview?view=azure-devops" rel="noopener noreferrer"&gt;documentación de Microsoft&lt;/a&gt; para conocer más sobre este servicio.&lt;/p&gt;

&lt;h4&gt;
  
  
  Usa las &lt;em&gt;pipelines&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;Las &lt;em&gt;pipelines&lt;/em&gt;, que son el nombre que reciben los procesos automatizados para integración continua o CI, son realmente potentes. Hay tareas para múltiples tecnologías, no solo las que pertenecen a Microsoft.&lt;/p&gt;

&lt;p&gt;¿Quieres saber todo lo que puedes hacer en una pipeline? Echa un vistazo a la &lt;a href="https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/?view=azure-devops" rel="noopener noreferrer"&gt;lista de todas las Tasks que hay disponibles en el catálogo&lt;/a&gt;: tareas de utilidad, compilación en Android, invocación a Azure, llamadas a Jenkins...&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Queries&lt;/em&gt; sobre tus &lt;em&gt;Tasks&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;Cuando un proyecto se alarga en el tiempo y tiene mucha actividad, es normal tener muchas, muchísimas tareas, que se han generado a lo largo del tiempo de vida de la solución.&lt;/p&gt;

&lt;p&gt;Para evitar tener que navegar entre &lt;em&gt;sprints&lt;/em&gt;, tareas asignadas o casi adivinar dónde estaba qué tarea, Azure DevOps ofrece un servicio poco conocido pero realmente potente: las Task Queries.&lt;/p&gt;

&lt;p&gt;A través de un editor &lt;em&gt;SQL-like&lt;/em&gt; de forma gráfica, puedes hacer consultas sobre todas las tareas que se encuentren en un proyecto, parametrizando para buscar por personas asignadas a esas tareas, estados en los que se encuentran, *sprints *en los que se localizan...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3cupxiuqfw64s57a8ttt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3cupxiuqfw64s57a8ttt.png" alt="Ejemplo de una Task Query en Azure DevOps" width="754" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estas &lt;em&gt;queries&lt;/em&gt; no son volátiles: puedes guardarlas para seguir trabajando sobre ellas o ejecutar la consulta tantas veces como necesites. Además, están integrados con algunos de los *widgets *de Dashboards, por lo que puedes ver los resultados de una *query *en Dashboard de tu Team... ¡y tener toda la información a tu alcance!&lt;/p&gt;

&lt;h4&gt;
  
  
  Una organización, múltiples proyectos
&lt;/h4&gt;

&lt;p&gt;Como mencionaba al inicio de este post, una misma organización puede contener hasta 300 proyectos de forma totalmente gratuita. Teniendo esa posibilidad, y para evitar el caos, crea siempre tus proyectos en la misma organización si pertenecen a un mismo equipo, empresa o grupo.&lt;/p&gt;

&lt;p&gt;Crear múltiples organizaciones es tentador y sencillo, pero después es difícil mantener control de qué proyecto se encuentra en qué otra organización... cuando sería más fácil tenerlo todo reunido en un mismo sitio. ¡Usa las herramientas que tienes a tu alcance!&lt;/p&gt;

&lt;h4&gt;
  
  
  Buenos nombres de proyecto, por David Gonzalo
&lt;/h4&gt;

&lt;p&gt;Otra buena práctica, esta vez aportación de David Gonzalo, es sobre nombres de proyectos. A la hora de crear un proyecto, puedes darle un nombre en el que puedes incluir espacios en blanco.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1330799020537749508-540" src="https://platform.twitter.com/embed/Tweet.html?id=1330799020537749508"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1330799020537749508-540');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1330799020537749508&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Esto es algo que os invitamos a evitar, pues este nombre con espacios se convertirá al final en parte de las URLS para, por ejemplo, tus repositorios. Al final, si incluyes una URL con espacios, tu cadena de conexión para clonar, pushear o pullear repositorios puede ser así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://dev.azure.com/WikkaLab/My%20Project/_git/MainAPI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No es la URL más intuitiva, puede inducir a errores difíciles de detectar a primera vista... por lo que, recomendamos mantener nombres de proyecto con camelCase, PascalCase, snake_case o kebab-case, o cualquier otro sabor que más te guste, mientras evites los espacios en blanco.&lt;/p&gt;

&lt;p&gt;¡Gracias por tu aporte, David!&lt;/p&gt;




&lt;p&gt;¡Y esto es todo por ahora!&lt;/p&gt;

&lt;p&gt;¿Usas Azure DevOps para proyectos profesionales o personales? ¿Tendrías más consejos que ofrecer desde tu experiencia? No dudéis en escribirlos en comentarios, para añadirlos al post enlazando a vuestras redes sociales.&lt;/p&gt;




&lt;p&gt;Este contenido tiene su origen en el post de reddit &lt;a href="https://www.reddit.com/r/AZURE/comments/jogm7w/azure_devops_best_practices/" rel="noopener noreferrer"&gt;"Azure DevOps Best Practices"&lt;/a&gt;, donde puedes seguir leyendo sobre la cuestión, ver más comentarios respondiendo a la consulta o aportar tus propias experiencias.&lt;/p&gt;

&lt;p&gt;seeU!&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>devops</category>
      <category>azuredevops</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Non-binary developer here!</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Thu, 18 Jun 2020 20:35:04 +0000</pubDate>
      <link>https://dev.to/beelzenef/non-binary-developer-here-33nm</link>
      <guid>https://dev.to/beelzenef/non-binary-developer-here-33nm</guid>
      <description>&lt;p&gt;Hi! My name is Elena, and I'm a .NET developer located in Spain. I'm a non-binary person, so you can use she or they pronouns to talk with me.&lt;/p&gt;

&lt;p&gt;I'm proud of my identity as a non-binary person. Also, my appearance is very androgynous, which is why people have long wanted to place me in a binary world that doesn't really exist.&lt;/p&gt;

&lt;p&gt;For a long time, it was a problem and a reason to feel ashamed, wrong with myself. But not anymore.&lt;/p&gt;

&lt;p&gt;I am who I am, I am as I am, and there is nothing wrong with it.&lt;/p&gt;

&lt;p&gt;This does not boil down to the phrase "love is love". Relationships between LGTBQIA+ people are not just love. The LGTBQIA+ movement is about people who have the right to be, exist, live, work and develop like everyone else.&lt;/p&gt;

&lt;p&gt;I find support on people like me, who express themselves on social networks and in communities around me. And I look with hope to those people who are discovering their identity in this spectrum of identity and sexuality. Also in people who, although they do not belong to the movement, look, understand and support.&lt;/p&gt;

&lt;p&gt;I am a non-binary programmer who finds another piece of happiness in movements like this, in dev.to, opening their space for all of us.&lt;/p&gt;

&lt;p&gt;Thanks, community, and thanks for reading.&lt;/p&gt;

&lt;p&gt;And yeah, this is politics. But life is, because it's all about people.&lt;/p&gt;

&lt;p&gt;And never forget:&lt;/p&gt;

&lt;h1&gt;
  
  
  Trans rights are human rights. Black live matters. Trans black live matters
&lt;/h1&gt;

</description>
      <category>devpride</category>
      <category>pride</category>
      <category>community</category>
    </item>
    <item>
      <title>Refactorizando vidas con AngularMalaga</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Mon, 06 Apr 2020 09:03:39 +0000</pubDate>
      <link>https://dev.to/beelzenef/refactorizando-vidas-con-angularmalaga-2ep2</link>
      <guid>https://dev.to/beelzenef/refactorizando-vidas-con-angularmalaga-2ep2</guid>
      <description>&lt;p&gt;El día 25 de marzo era un día muy especial. Era el día en que &lt;strong&gt;la comunidad de AngularMálaga me había invitado como ponente&lt;/strong&gt; para compartir mi conocimiento y mis intereses sobre programación. Con la noticia que está sacudiendo el planeta parecía que no sería posible llevarlo a cabo.&lt;/p&gt;

&lt;p&gt;Pero conseguimos salvar los obstáculos encontrados, ¡pues nos reunimos de forma &lt;strong&gt;digital a través de YouTube&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/3IePwogH9p8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Qué es AngularMálaga?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;AngularMálaga es la comunidad de personas interesadas en Angular&lt;/strong&gt;, que usan este &lt;em&gt;framework&lt;/em&gt; de forma ya sea profesional o bien por afición. Hay muchas comunidades de Angular a lo largo del mundo, pero esta se concentra en Málaga.&lt;/p&gt;

&lt;p&gt;Puedes encontrar más información en su &lt;a href="https://www.meetup.com/es-ES/Angular-Malaga/" rel="noopener noreferrer"&gt;grupo de Meetup&lt;/a&gt; o bien en &lt;a href="https://sites.google.com/view/angular-malaga/" rel="noopener noreferrer"&gt;su web&lt;/a&gt;, pero en estos tiempos de confinamiento y cuarentena, su contenido se concentrará en el &lt;a href="https://www.youtube.com/channel/UCJhRPniwydP6F0fJnbIBL7Q" rel="noopener noreferrer"&gt;canal de YouTube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;De forma local, son &lt;strong&gt;más de 800 personas&lt;/strong&gt;, ¡y espero que sigan creciendo!&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿De qué trató el evento?
&lt;/h3&gt;

&lt;p&gt;La calidad del código es muy importante, y para conseguirla es vital usar la empatía. &lt;strong&gt;Detrás y al final del software, lo que hay son personas&lt;/strong&gt;, y necesitamos tratar con ellas para realizar múltiples tareas: determinar especificaciones de un producto, escribir código legible y claro para el equipo de desarrollo, explicar al cliente lo que necesita saber...&lt;/p&gt;

&lt;p&gt;Todo empieza por código limpio, refactorizando el código que escribimos para mejorarlo dentro de lo posible.&lt;/p&gt;

&lt;p&gt;Así que, desde nuestras variables hasta la Programación Orientada a Objetos, ¿cómo podemos mejorar nuestro código? &lt;strong&gt;¿Cómo aplicamos la empatía en nuestro equipo de desarrollo?&lt;/strong&gt; Esto es lo que abordamos en el meetup.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Habrá más en el futuro?
&lt;/h3&gt;

&lt;p&gt;¡Puedes apostar por ello! La comunidad de AngularMálaga agenda un evento al mes, y han demostrado que esta situación no es un impedimento para llegar a las personas que la componen.&lt;/p&gt;

&lt;p&gt;No perdáis de vista &lt;a href="https://twitter.com/AngularMalaga" rel="noopener noreferrer"&gt;su actividad en redes&lt;/a&gt;, os podéis suscribir a su canal de YouTube para futuros eventos, ¡porque habrá mucho contenido por disfrutar!&lt;/p&gt;

&lt;p&gt;seeU!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>cleancode</category>
      <category>devops</category>
    </item>
    <item>
      <title>Enseñando programación en C# con @yeswetech_org</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Wed, 12 Feb 2020 09:41:56 +0000</pubDate>
      <link>https://dev.to/beelzenef/ensenando-programacion-en-c-con-yeswetechorg-1ken</link>
      <guid>https://dev.to/beelzenef/ensenando-programacion-en-c-con-yeswetechorg-1ken</guid>
      <description>&lt;p&gt;&lt;a href="https://twitter.com/yeswetech_org" rel="noopener noreferrer"&gt;YesWeTech&lt;/a&gt; es una asociación que conozco desde hace unos años y que siempre ha estado ahí. De hecho, &lt;a href="https://twitter.com/WTM_Malaga/status/848218017133719552" rel="noopener noreferrer"&gt;mi primera participación en un evento&lt;/a&gt; fue gracias a ellas y también a GDG Málaga. Guardo un especial cariño por este grupo, y quise iniciar con ellas estas actividades.&lt;/p&gt;

&lt;p&gt;Un taller de introducción a la programación, ¿por qué no? Con C#, el lenguaje con el que aprendí a programar y con el que trabajo cada día. Esta es mi experiencia.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEOuc9j1WsAItwju%3Fformat%3Dpng" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEOuc9j1WsAItwju%3Fformat%3Dpng" alt="Portada del evento" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reunidas en el Centro de Espacios Participativos, gracias a la &lt;a href="https://twitter.com/volunta_malaga" rel="noopener noreferrer"&gt;Plataforma de Voluntariado de Málaga&lt;/a&gt;, aprendimos lo que es la programación y por qué la practicamos.&lt;/p&gt;

&lt;p&gt;Hay un pensamiento bastante generalizado de que la programación solo sirve “para programar”… cuando en realidad ¡sirve para todo! La programación es un conocimiento que se puede aplicar a cualquier campo. Para cualquier área de conocimiento hay tareas que se pueden automatizar o simplificar gracias al desarrollo de aplicaciones.&lt;/p&gt;

&lt;p&gt;Conceptos básicos como las variables, condicionales y también bucles… dejando claro que son las herramientas a las que podemos recurrir para crear nuestras aplicaciones. Empezamos por aplicaciones de consola en C#. Puede parecer poco, ¡pero está vivo!&lt;/p&gt;

&lt;p&gt;Paso a paso, puedes seguir aumentando el código que vas generando hasta crear soluciones a problemas sencillos. Una aplicación que te saluda de forma personalizada, otra que te calcula la edad, otra que te recoge datos personales, otra que te gestiona tareas pendientes…&lt;/p&gt;

&lt;p&gt;Utilizamos &lt;a href="http://dotnetfiddle.net" rel="noopener noreferrer"&gt;dotnetFiddle&lt;/a&gt; para programar sin necesidad de instalar software en nuestro equipo, pero si quieres dar el paso a instalar un IDE y programar desde tu equipo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio-code#hello-world" rel="noopener noreferrer"&gt;Cómo crear una aplicación en consola con Visual Studio Code&lt;/a&gt;, un IDE limpio y sencillo con el que programar aplicaciones de forma sencilla.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/es-es/dotnet/csharp/tutorials/intro-to-csharp/index#hello-worldhello-worldyml" rel="noopener noreferrer"&gt;Tutoriales oficiales de Microsoft para C#&lt;/a&gt;, por si tienes dudas sobre cómo se escribe el lenguaje y sus palabras clave.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/beelzenef/tu-primera-aplicacion-en-net-32mk"&gt;Aventuras .NET&lt;/a&gt;, una serie de artículos que estoy escribiendo donde explico con detalle algunas de las lecciones que aprendimos en el taller.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La idea original es una serie de talleres que introduzcan a diversas tecnologías y conocimientos en este sector… como introducción al desarrollo web, diseño de base de datos… ¡aún no sabemos dónde acabaremos!&lt;/p&gt;

&lt;p&gt;Porque creo que es realmente importante compartir el conocimiento que tenemos, propagar aquello que nos apasiona… haciendolo accesible a aquellas personas que no tienen la oportunidad o simplemente no han visto un camino posible en este mundillo.&lt;/p&gt;

&lt;p&gt;Puedes seguir leyendo sobre &lt;a href="https://geekstorming.wordpress.com/2019/12/01/ensenando-programacion-con-codehouse-academy/" rel="noopener noreferrer"&gt;otro taller de introducción a la programación&lt;/a&gt; que tuve la oportunidad de impartir en TalentWoman Summit, en diciembre de 2019, con CodeHouse Academy.&lt;/p&gt;

&lt;p&gt;Volveré pronto, y espero que con experiencias de futuros talleres.&lt;/p&gt;

&lt;p&gt;seeU!&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Aventuras .NET, tomando decisiones</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Fri, 31 Jan 2020 20:09:13 +0000</pubDate>
      <link>https://dev.to/beelzenef/aventuras-net-tomando-decisiones-4hbh</link>
      <guid>https://dev.to/beelzenef/aventuras-net-tomando-decisiones-4hbh</guid>
      <description>&lt;p&gt;Te damos la bienvenida a la tercera entrega de Aventuras .NET, para aprender los fundamentos de la programación con C#.&lt;/p&gt;

&lt;p&gt;En esta aventura, vamos a conocer los condicionales, porque en la programación es fundamental tomar decisiones.&lt;/p&gt;

&lt;p&gt;Los condicionales se basan en el tipo &lt;em&gt;booleano&lt;/em&gt;. Ya conocemos algunos tipos de texto: las cadenas de texto se conocen como strings, los números enteros se conocen como integers… pero hay un tipo especial de datos llamados booleans.&lt;/p&gt;

&lt;p&gt;Los tipos booleans o &lt;em&gt;booleanos&lt;/em&gt; solo contemplan dos opciones: verdadero o falso. Vamos a declarar dos variables que almacenarán valores &lt;em&gt;booleanos&lt;/em&gt; para dos situaciones diferentes. En mi caso, resulta que me gusta programar y me encanta el cine, por lo tanto:&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="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;meGustaProgramar&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="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;noMeGustaElCine&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¿Para qué usamos estas variables? Para tomar decisiones en base a esos valores.&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meGustaProgramar&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="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;"Me gusta programar"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La sintaxis es muy literal. Lo podemos leer “si me gusta programar, escribo por pantalla diciendo que me gusta”.&lt;/p&gt;

&lt;p&gt;Podemos incluso simplificar la expresión. La sentencia de if comprueba si el valor de la variable meGustaProgramar es cierta, es true. Por lo que podemos escribirlo de la siguiente forma:&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meGustaProgramar&lt;/span&gt;&lt;span class="p"&gt;)&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;"Me gusta programar"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;También podemos contemplar, reaccionar con código si la condición no se cumple, si no me gustase programar. La sintaxis vuelve a ser muy literal: “si me gusta programar, lo diré con alegría; si no, diré que no me gusta”.&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meGustaProgramar&lt;/span&gt;&lt;span class="p"&gt;)&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;"Me gusta programar"&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;"No me gusta programar"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Las decisiones no siempre serán así de sencillas. A veces necesitamos contemplar más variables, y para eso existen operadores condicionales.&lt;/p&gt;

&lt;p&gt;El primer operador ejecuta el código dentro del condicional solo si las dos condiciones se cumplen, solo si las dos variables son true. El siguiente código podemos leerlo como “si me gusta programar y me gusta C#”, escribiré el mensaje en pantalla”.&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meGustaProgramar&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;meGustaCsharp&lt;/span&gt;&lt;span class="p"&gt;)&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;"Me gusta programar en C#"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este operador se conoce como &lt;code&gt;AND&lt;/code&gt;, literalmente describe una condición como: “si se cumple esta condición Y la segunda”…&lt;/p&gt;

&lt;p&gt;El otro operador ejecuta el código en su interior si al menos una de las variables es cierta. ¡Puede ser una de ellas o todas! Se puede leer como “si me gusta la pizza o el sushi, diré que me encanta alguna de las opciones”.&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;meGustaLaPizza&lt;/span&gt; &lt;span class="p"&gt;||&lt;/span&gt; &lt;span class="n"&gt;meGustaElSushi&lt;/span&gt;&lt;span class="p"&gt;)&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;"Me gusta la pizza o el sushi... ¡o tal vez los dos!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este operador se conoce como &lt;code&gt;OR&lt;/code&gt;, literalmente describe una condición de la siguiente forma: “si se cumple esta condición O la segunda”…&lt;/p&gt;

&lt;p&gt;Y estos son los condicionales, con los que podemos tomar decisiones y ejecutar código de diferentes formas dependiendo de los valores con los que estemos operando.&lt;/p&gt;




&lt;p&gt;Esto es todo por ahora, ¡y en el siguiente post hablaremos de listas y bucles!&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Aventuras .NET, ¡descubre los métodos!</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Tue, 28 Jan 2020 12:29:46 +0000</pubDate>
      <link>https://dev.to/beelzenef/aventuras-net-descubre-los-metodos-5fm1</link>
      <guid>https://dev.to/beelzenef/aventuras-net-descubre-los-metodos-5fm1</guid>
      <description>&lt;p&gt;Las aventuras .NET continúan, ¡y esta vez para aprender qué son los métodos e implementarlos en nuestra aplicación!&lt;/p&gt;

&lt;p&gt;Sigamos desarrollando la aplicación de consola que creamos en el primer &lt;em&gt;post&lt;/em&gt;, donde arrancamos la aplicación y saludamos al mundo.&lt;/p&gt;

&lt;p&gt;Hasta ahora nuestro código era así, una aplicación sencilla que saluda, da unas breves instrucciones, espera a recibir tu nombre y saludarte de una forma personalizada:&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;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="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&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;"¡Hola! Dime tu nombre"&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;"Después pulsa ENTER"&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;tuNombre&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="n"&gt;tuNombre&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;ReadLine&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;"Bienvenid@, "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;tuNombre&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;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este código es sencillo, pero a medida que las necesidades cambian y el código crece, puede que no queramos apilar y apilar líneas y líneas de código dentro de esta sección llamada &lt;code&gt;Main&lt;/code&gt;… ¿pero qué es exactamente?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Main&lt;/code&gt; es lo que conocemos como un método. Es una porción de código que se ejecuta, desde la primera línea hasta la última, tal y como vemos que funcionan los programas.&lt;/p&gt;

&lt;p&gt;Los métodos agrupan código bajo un nombre concreto, para llamar a ese código a través del nombre que le hemos dado. Son “invocados”, ejecutan su código y después regresan al lugar desde donde han sido invocados para seguir ejecutando el código que reste. ¿Podemos escribir nuestros propios métodos? ¡La respuesta es sí!&lt;/p&gt;

&lt;p&gt;Bajo el código que encierra &lt;code&gt;Main&lt;/code&gt;, después de las llaves que encierran su código (los símbolos &lt;code&gt;{&lt;/code&gt; y &lt;code&gt;}&lt;/code&gt;), empezamos a escribir más código, como el que puedes ver aquí:&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;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;ObtenerNombre&lt;/span&gt;&lt;span class="p"&gt;()&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="s"&gt;""&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="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hemos creado un fragmento de código que con un nombre concreto, &lt;code&gt;ObtenerNombre&lt;/code&gt;, que tiene tres sencillas líneas.&lt;/p&gt;

&lt;p&gt;Declara una variable, espera a que escribas su contenido y, literalmente, la devuelve a quien ha llamado al método, gracias a la palabra &lt;code&gt;return&lt;/code&gt;. La variable que hemos creado dentro de este método, llamada nombre solo tiene la función de recoger el nombre y lanzarlo hacia el método que lo llama. Después de que el método sea ejecutado, ¡la variable deja de existir! Solo existe dentro de su método.&lt;/p&gt;

&lt;p&gt;Si quieres comprobarlo, prueba a escribir el contenido de esa variable dentro del método &lt;code&gt;Main&lt;/code&gt;, donde puedes ver que no existe:&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;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="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&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;"¡Hola! Dime tu nombre"&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;"Después pulsa ENTER"&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;tuNombre&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="n"&gt;tuNombre&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;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// La siguiente línea mostraría un fallo&lt;/span&gt;
    &lt;span class="c1"&gt;// porque fuera del method no existe&lt;/span&gt;
    &lt;span class="c1"&gt;//Console.WriteLine(nombre);&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;"Bienvenid@, "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;tuNombre&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;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;ObtenerNombre&lt;/span&gt;&lt;span class="p"&gt;()&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="s"&gt;""&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="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez hemos comprobado que las variables de un método solo existen dentro de los límites del método, es decir el código que está dentro de sus &lt;code&gt;{ }&lt;/code&gt;, podemos avanzar.&lt;/p&gt;

&lt;p&gt;Ahora podemos sustituir las líneas dentro del método &lt;code&gt;Main&lt;/code&gt; que pedían nuestro nombre, lo escribían en una variable… por el método que acabamos de crear. Finalmente, el código quedaría de la siguiente forma:&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;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="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&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;"¡Hola! Dime tu nombre"&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;"Después pulsa ENTER"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Hemos sustituido las líneas que pedían nuestro nombre&lt;/span&gt;
    &lt;span class="c1"&gt;// por la llamada al method que hemos creado&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;tuNombre&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ObtenerNombre&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;"Bienvenid@, "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;tuNombre&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;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;ObtenerNombre&lt;/span&gt;&lt;span class="p"&gt;()&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="s"&gt;""&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="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¡Pulsa ▶️ y ejecuta la aplicación, tal y como hicimos en el capítulo anterior! Comprobarás que el funcionamiento es exactamente el mismo, pero hemos mejorado la forma en la que lo escribimos.&lt;/p&gt;

&lt;p&gt;Las ventajas de los métodos es que podemos llamarlos tantas veces queramos, ahí reside su potencia. ¡Podemos ejecutar el código múltiples veces sin necesidad de repetir código! Así que podemos modificar el contenido de &lt;code&gt;Main&lt;/code&gt; para pedir y almacenar dos nombres diferentes, a los que saludaremos:&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;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="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&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;"¡Hola! ¿Cuales son vuestros nombres?"&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;"Primer nombre: "&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;tuNombre&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ObtenerNombre&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;"Segundo nombre: "&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;otroNombre&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ObtenerNombre&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;"Bienvenid@, "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;tuNombre&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;"Bienvenid@ también, "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;otroNombre&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;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En el próximo post, exploraremos los bucles y su gran utilidad.&lt;/p&gt;

&lt;p&gt;seeU!&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Tu primera aplicación en .NET</title>
      <dc:creator>elena</dc:creator>
      <pubDate>Tue, 31 Dec 2019 13:20:33 +0000</pubDate>
      <link>https://dev.to/beelzenef/tu-primera-aplicacion-en-net-32mk</link>
      <guid>https://dev.to/beelzenef/tu-primera-aplicacion-en-net-32mk</guid>
      <description>&lt;p&gt;¿Quieres empezar a programar en .NET? Tras haber instalado Visual Studio en tu equipo, tienes las herramientas y las ganas de crear. ¿Cómo hacerlo entonces?&lt;/p&gt;

&lt;p&gt;Vamos a crear nuestra primera aplicación en consola en esta aventura .NET.&lt;/p&gt;

&lt;p&gt;Puedes crear tu primero proyecto a través de Visual Studio, pero también desde la terminal o consola. Escribiendo el siguiente comando, se creará un proyecto y todos los directorios y ficheros necesarios.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet new console --output MiPrimeraApp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se creará en la localización desde donde hayas ejecutado este comando, así que puedes abrir el directorio con Visual Studio.&lt;/p&gt;

&lt;h3&gt;
  
  
  Escribiendo nuestras primeras líneas
&lt;/h3&gt;

&lt;p&gt;Lo principal es explorar el fichero &lt;code&gt;Program.cs&lt;/code&gt;, que es la Clase donde se encuentra el primer (y único en este caso) código que se va a ejecutar:&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;namespace&lt;/span&gt; &lt;span class="nn"&gt;MiPrimeraApp&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;Program&lt;/span&gt;
    &lt;span class="p"&gt;{&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="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&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;"Hello World!"&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prueba a ejecutar la aplicación, ¡y verás el resultado!&lt;/p&gt;

&lt;p&gt;Es posible que, al ejecutar, se muestre una pantalla negra que se cierre rápidamente. En este caso, el código que estás ejecutando necesita una nueva línea que espere que pulses la tecla &lt;code&gt;ENTER&lt;/code&gt; para continuar, o cerrarse.&lt;/p&gt;

&lt;p&gt;Edita el código siguiendo el siguiente fragmento de código y prueba a ejecutar de nuevo.&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;namespace&lt;/span&gt; &lt;span class="nn"&gt;MiPrimeraApp&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;Program&lt;/span&gt;
    &lt;span class="p"&gt;{&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="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&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;"Hello World!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="c1"&gt;// Añade esta nueva línea:&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;ReadLine&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hasta ahora, lo único que esta aplicación hace es saludar por pantalla, con un mensaje genérico. Lo primero que hacemos como &lt;em&gt;developers&lt;/em&gt; es saludar al mundo, ¡es una curiosa tradición que aún perdura!&lt;/p&gt;

&lt;p&gt;Pero podemos mejorar nuestro código, haciendo que no solo mostremos mensajes por pantalla si no que también reaccionar a los datos que introduzcamos.&lt;/p&gt;

&lt;p&gt;Vamos a seguir modificando el código de forma que nos pida un nombre por el que saludarnos, almacenarlo en una variable y utilizar esta para saludarnos.&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;namespace&lt;/span&gt; &lt;span class="nn"&gt;MiPrimeraApp&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;Program&lt;/span&gt;
    &lt;span class="p"&gt;{&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="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&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;"¡Hola! Dime tu nombre"&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;"Después pulsa ENTER"&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;tuNombre&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="n"&gt;tuNombre&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;ReadLine&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;"Bienvenid@, "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;tuNombre&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;ReadLine&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Entendiendo el código
&lt;/h3&gt;

&lt;p&gt;Escribimos código para dar soluciones a situaciones concretas, y para eso es fundamental entender el código. Lo primero que hace es saludar por pantalla, después declararemos una variable, de tipo &lt;code&gt;string&lt;/code&gt;, o texto, para guardar nuestro nombre.&lt;/p&gt;

&lt;p&gt;Las variables pueden almacenar datos de diferentes tipos: texto, números, números decimales, listas… Todo depende de lo que necesites en un determinado caso.&lt;/p&gt;

&lt;p&gt;Esa variable está vacía en inicio, pero después le indicamos que almacene cualquier cosa que escribas hasta pulsar ENTER.&lt;/p&gt;

&lt;p&gt;Es momento de ejecutar la aplicación. En la barra superior de Visual Studio, pulsa el botón ▶ para iniciar la aplicación que acabas de crear. Así, el programa se ejecuta, te pide un nombre y con lo que sea que hayas escrito, el programa te saludará y te dará la bienvenida a la aplicación.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¡Ya estás programando!
&lt;/h3&gt;

&lt;p&gt;¡Felicidades, has empezado el camino! Este es el primer paso para crear aplicaciones. Ahora puede ser una aplicación de consola que parece muy simple, pero estos primeros pasos son los que pueden llevarte a hacer una aplicación de escritorio, web o muchas otras tecnologías increíbles.&lt;/p&gt;

&lt;p&gt;Sígueme en esta aventura .NET para seguir creando aplicaciones.&lt;/p&gt;

&lt;p&gt;seeU!&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>csharp</category>
    </item>
  </channel>
</rss>
