{"id":190,"date":"2023-05-14T18:09:49","date_gmt":"2023-05-14T21:09:49","guid":{"rendered":"https:\/\/danielsegovia.com\/plataforma\/?p=190"},"modified":"2023-06-30T16:36:04","modified_gmt":"2023-06-30T19:36:04","slug":"07-estructuras-de-control-de-flujo","status":"publish","type":"post","link":"https:\/\/danielsegovia.com\/plataforma\/07-estructuras-de-control-de-flujo\/","title":{"rendered":"07 &#8211; Estructuras de control de flujo"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cuando escribimos programas en JavaScript, a menudo necesitamos tomar decisiones y realizar diferentes acciones seg\u00fan las condiciones que se presenten en el programa. Para esto, utilizamos las estructuras de control de flujo, que nos permiten evaluar condiciones y ejecutar diferentes bloques de c\u00f3digo en funci\u00f3n de esas condiciones. En este post, veremos las estructuras de control de flujo <strong>\u00abif\/else\u00bb<\/strong> y <strong>\u00abswitch\u00bb<\/strong> en JavaScript.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estructura de control de flujo \u00abif\/else\u00bb<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El \u00abif\/else\u00bb es la estructura de control de flujo m\u00e1s b\u00e1sica en JavaScript y se utiliza para evaluar una condici\u00f3n y ejecutar un bloque de c\u00f3digo si esa condici\u00f3n es verdadera. La sintaxis b\u00e1sica del \u00abif\/else\u00bb es la siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"\" class=\"\">if (condici\u00f3n) {\n  \/\/ c\u00f3digo que se ejecuta si la condici\u00f3n es verdadera\n} else {\n  \/\/ c\u00f3digo que se ejecuta si la condici\u00f3n es falsa\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, supongamos que queremos escribir un programa que imprima \u00abBuenos d\u00edas!\u00bb si la variable horaDelDia es menor a 12 y \u00abBuenas tardes!\u00bb si es mayor o igual a 12. Podemos hacerlo utilizando un \u00abif\u00bb de la siguiente manera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">let horaDelDia = 10;\n\nif (horaDelDia &lt; 12) {\n  console.log(\"Buenos d\u00edas!\");\n} else {\n  console.log(\"Buenas tardes!\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este caso, la condici\u00f3n dentro del \u00abif\u00bb es <code>horaDelDia &lt; 12<\/code>, que eval\u00faa si la variable <code>horaDelDia<\/code> es menor a 12. Si la condici\u00f3n es verdadera, se imprime \u00abBuenos d\u00edas!\u00bb en la consola. Si la condici\u00f3n es falsa, se ejecuta el c\u00f3digo dentro del bloque \u00abelse\u00bb y se imprime \u00abBuenas tardes!\u00bb.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Operador l\u00f3gico \u00abAND\u00bb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El operador l\u00f3gico \u00abAND\u00bb se utiliza para combinar dos o m\u00e1s condiciones en una sola expresi\u00f3n y verificar que todas las condiciones sean verdaderas. Aqu\u00ed est\u00e1 la sintaxis b\u00e1sica:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">if (condici\u00f3n1 &amp;&amp; condici\u00f3n2) {\n  \/\/ c\u00f3digo que se ejecuta si ambas condiciones son verdaderas\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, supongamos que queremos escribir un programa que imprima \u00abEs un d\u00eda soleado y c\u00e1lido\u00bb si tanto la variable <code>clima<\/code> es \u00absoleado\u00bb como la variable <code>temperatura<\/code> es mayor a 25 grados Celsius. Podemos hacerlo utilizando el operador \u00abAND\u00bb de la siguiente manera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">let clima = \"soleado\";\nlet temperatura = 30;\n\nif (clima === \"soleado\" &amp;&amp; temperatura &gt; 25) {\n  console.log(\"Es un d\u00eda soleado y c\u00e1lido\");\n} else {\n  console.log(\"No es un d\u00eda soleado y c\u00e1lido\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este caso, la condici\u00f3n dentro del \u00abif\u00bb es <code>clima === \"soleado\" &amp;&amp; temperatura &gt; 25<\/code>, que eval\u00faa si la variable <code>clima<\/code> es igual a \u00absoleado\u00bb y la variable <code>temperatura<\/code> es mayor a 25. Si ambas condiciones son verdaderas, se imprime \u00abEs un d\u00eda soleado y c\u00e1lido\u00bb en la consola. Si una o ambas condiciones son falsas, se ejecuta el c\u00f3digo dentro del bloque \u00abelse\u00bb y se imprime \u00abNo es un d\u00eda soleado\u00bb<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Operador l\u00f3gico \u00abOR\u00bb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El operador l\u00f3gico \u00abOR\u00bb se utiliza para combinar dos o m\u00e1s condiciones en una sola expresi\u00f3n y verificar que al menos una de las condiciones sea verdadera. Aqu\u00ed est\u00e1 la sintaxis b\u00e1sica:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">if (condici\u00f3n1 || condici\u00f3n2) {\n  \/\/ c\u00f3digo que se ejecuta si al menos una de las condiciones es verdadera\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, supongamos que queremos escribir un programa que imprima \u00abEs un d\u00eda de playa\u00bb si la variable <code>clima<\/code> es \u00absoleado\u00bb <strong>o<\/strong> la variable <code>temperatura<\/code> es mayor a 25 grados Celsius. Podemos hacerlo utilizando el operador \u00abOR\u00bb de la siguiente manera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">let clima = \"soleado\";\nlet temperatura = 20;\n\nif (clima === \"soleado\" || temperatura &gt; 25) {\n  console.log(\"Es un d\u00eda de playa\");\n} else {\n  console.log(\"No es un d\u00eda de playa\");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este caso, la condici\u00f3n dentro del \u00abif\u00bb es <code>clima === \"soleado\" || temperatura &gt; 25<\/code>, que eval\u00faa si la variable <code>clima<\/code> es igual a \u00absoleado\u00bb o la variable <code>temperatura<\/code> es mayor a 25. Si al menos una de las condiciones es verdadera, se imprime \u00abEs un d\u00eda de playa\u00bb en la consola. Si ambas condiciones son falsas, se ejecuta el c\u00f3digo dentro del bloque \u00abelse\u00bb y se imprime \u00abNo es un d\u00eda de playa\u00bb.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">if else if else if else<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A veces nos encontramos en situaciones donde no podemos redudir todo a una sola expresi\u00f3n, inclusive si queremos simplificarla usando AND o OR, por est\u00e1 raz\u00f3n a veces nos vemos obligados a tener un <strong>if<\/strong> y dentro otro <strong>if<\/strong> o bien un <strong>if<\/strong> dentro de un <strong>else<\/strong><br>Imagina la siguiente situaci\u00f3n, tenemos una aplicaci\u00f3n de compras online y queremos dar descuento, aqu\u00ed las reglas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un cliente nuevo es aquel que ha comprado menos de 10 productos y obtiene descuentos<\/li>\n\n\n\n<li>Un cliente habitual es aquel que ha comprado m\u00e1s de 10 productos y menos de 20, en este caso obtiene un 10% de descuento<\/li>\n\n\n\n<li>Un cliente fiel es aquel que ha comprado m\u00e1s de 20 productos y en todas sus compras obtiene un 20% de descuento<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Veamos el flujo en el siguiente diagrama<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/danielsegovia.com\/plataforma\/wp-content\/uploads\/2023\/05\/Untitled-Diagram-Page-20.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"666\" height=\"391\" src=\"https:\/\/danielsegovia.com\/plataforma\/wp-content\/uploads\/2023\/05\/Untitled-Diagram-Page-20.jpg\" alt=\"\" class=\"wp-image-387\" srcset=\"https:\/\/danielsegovia.com\/plataforma\/wp-content\/uploads\/2023\/05\/Untitled-Diagram-Page-20.jpg 666w, https:\/\/danielsegovia.com\/plataforma\/wp-content\/uploads\/2023\/05\/Untitled-Diagram-Page-20-300x176.jpg 300w\" sizes=\"auto, (max-width: 666px) 100vw, 666px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Ahora vamos a llevarlo al c\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">productos = 22\nlet descuentos\n\nif(productos&gt;10){\n   if(productos &gt; 10 &amp;&amp; productos &lt;20)\n       descuentos = 10\n   else\n       descuentos = 20\n}else{\n   descuentos = 0;\n}\n\nconsole.log(`El cliente obtuvo un descuento del ${descuentos}%`);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tanto el gr\u00e1fico como el c\u00f3digo sirven para explicar como podemos utilizar un if o else dentro de una estructura de if o else.<br>El c\u00f3digo anterior tiene un error, \u00bflo has visto? No es un error de sintaxis, se ejecuta correctamente, hay un punto espec\u00edfico donde un cliente con X cantidad de compras previas no le estamos aplicando el descuento correcto, te invito a que lo revises, lo ejecutes en tu m\u00e1quina e intentes descubrir donde es que lo he hecho mal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La estructura Switch<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El uso del condicional switch en JavaScript puede ser una herramienta muy \u00fatil para simplificar el c\u00f3digo y evitar tener que escribir largas cadenas de if\/else. Una analog\u00eda que podr\u00edamos usar para entender c\u00f3mo funciona switch es pensar en un operador de telefon\u00eda y su men\u00fa de opciones. Cuando llamas al servicio de atenci\u00f3n al cliente de tu operador de telefon\u00eda, es probable que te enfrentes a un men\u00fa de opciones que te permita dirigir tu llamada al departamento correcto. El men\u00fa de opciones te pide que selecciones una opci\u00f3n, y dependiendo de lo que selecciones, te conectar\u00e1 con el departamento correcto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el c\u00f3digo, podemos pensar en cada opci\u00f3n del men\u00fa como un caso del switch. Dependiendo de lo que el usuario seleccione, se ejecutar\u00e1 un bloque de c\u00f3digo diferente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">const dayOfWeek = \"martes\";\n\nif (dayOfWeek === \"lunes\") {\n  console.log(\"Hoy es lunes. \u00a1\u00c1nimo, que la semana reci\u00e9n comienza!\");\n} else if (dayOfWeek === \"martes\") {\n  console.log(\"Hoy es martes. \u00a1Ya superaste el primer d\u00eda!\");\n} else if (dayOfWeek === \"mi\u00e9rcoles\") {\n  console.log(\"Hoy es mi\u00e9rcoles. \u00a1Estamos a mitad de semana!\");\n} else if (dayOfWeek === \"jueves\") {\n  console.log(\"Hoy es jueves. \u00a1Ya casi llegamos al viernes!\");\n} else if (dayOfWeek === \"viernes\") {\n  console.log(\"Hoy es viernes. \u00a1el fin de semana est\u00e1 a un paso!\");\n} else {\n  console.log(\"Est\u00e1s de fin de semana, disfr\u00fatalo :-) \");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Por supuesto! Aqu\u00ed tienes el ejemplo de los d\u00edas de la semana utilizando muchas sentencias if\/else:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, cada sentencia if\/else comprueba si la variable dayOfWeek es igual a una cadena espec\u00edfica correspondiente a un d\u00eda de la semana, y en funci\u00f3n de eso muestra un mensaje diferente. Si ninguna de las sentencias if\/else se cumple, se ejecuta el bloque final de c\u00f3digo.<br>Ahora, si tenemos muchas opciones como estas, podemos utilizar la estructura switch para hacerlo m\u00e1s legible. Para hacer la conversi\u00f3n, simplemente debemos seguir los siguientes pasos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reemplazar la primera sentencia if por la palabra clave switch seguida de la variable que queremos evaluar.<\/li>\n\n\n\n<li>Eliminar la condici\u00f3n dentro de cada sentencia if y reemplazarla por una sentencia case seguida del valor que se quiere comprobar.<\/li>\n\n\n\n<li>Agregar un bloque default al final para manejar la situaci\u00f3n en la que ning\u00fan caso se cumple.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed est\u00e1 el mismo ejemplo pero utilizando la estructura switch:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">const dayOfWeek = \"martes\";\n\nswitch (dayOfWeek) {\n  case \"lunes\":\n    console.log(\"Hoy es lunes. \u00a1\u00c1nimo, que la semana reci\u00e9n comienza!\");\n    break;\n  case \"martes\":\n    console.log(\"Hoy es martes. \u00a1Ya superaste el primer d\u00eda!\");\n    break;\n  case \"mi\u00e9rcoles\":\n    console.log(\"Hoy es mi\u00e9rcoles. \u00a1Estamos a mitad de semana!\");\n    break;\n  case \"jueves\":\n    console.log(\"Hoy es jueves. \u00a1Ya casi llegamos al viernes!\");\n    break;\n  case \"viernes\":\n    console.log(\"Hoy es viernes. \u00a1Al fin lleg\u00f3 el fin de semana!\");\n    break;\n  default:\n  console.log(\"Est\u00e1s de fin de semana, disfr\u00fatalo :-) \");\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La expresi\u00f3n en el par\u00e9ntesis es evaluada una sola vez, y el valor resultante se compara con los valores de los <code>case<\/code> del <code>switch<\/code>. Si la expresi\u00f3n es igual a uno de los valores de los <code>case<\/code>, se ejecuta el bloque de c\u00f3digo correspondiente. Es importante destacar que la igualdad se realiza mediante el operador de comparaci\u00f3n estricta <code>===<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cada <code>case<\/code> representa una opci\u00f3n del men\u00fa de opciones de nuestro ejemplo anterior. Si la expresi\u00f3n coincide con el valor del <code>case<\/code>, se ejecutar\u00e1 el bloque de c\u00f3digo asociado a ese <code>case<\/code>. Si no se incluye la instrucci\u00f3n <code>break<\/code> al final de cada bloque de c\u00f3digo, se ejecutar\u00e1 el siguiente <code>case<\/code> independientemente de si la expresi\u00f3n coincide con su valor o no.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La instrucci\u00f3n <code>break<\/code> se utiliza para salir del <code>switch<\/code> una vez que se ha ejecutado el bloque de c\u00f3digo correspondiente. Si no se incluye la instrucci\u00f3n <code>break<\/code>, se ejecutar\u00e1n todos los bloques de c\u00f3digo correspondientes a los <code>case<\/code> siguientes, incluso si la expresi\u00f3n no coincide con su valor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La cl\u00e1usula <code>default<\/code> se ejecuta si ninguna de las condiciones de los <code>case<\/code> se cumple. Es similar a incluir un <code>else<\/code> al final de una cadena de <code>if\/else<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Espero que esta explicaci\u00f3n t\u00e9cnica te haya sido \u00fatil para entender mejor c\u00f3mo funciona el condicional <code>switch<\/code> en JavaScript.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Reviv\u00ed la clase en vivo<\/h2>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Curso Node.Js - Clase 07 - Estructuras de control de flujo\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/onm3OJIEXRs?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Cuando escribimos programas en JavaScript, a menudo necesitamos tomar decisiones y realizar diferentes acciones seg\u00fan las condiciones que se presenten en el programa. Para esto, utilizamos las estructuras de control de flujo, que nos permiten evaluar condiciones y ejecutar diferentes bloques de c\u00f3digo en funci\u00f3n de esas condiciones. En este post, veremos las estructuras de &#8230; <a title=\"07 &#8211; Estructuras de control de flujo\" class=\"read-more\" href=\"https:\/\/danielsegovia.com\/plataforma\/07-estructuras-de-control-de-flujo\/\" aria-label=\"Leer m\u00e1s sobre 07 &#8211; Estructuras de control de flujo\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,4],"tags":[18,17,8,10,19],"class_list":["post-190","post","type-post","status-publish","format-standard","hentry","category-curso-de-node-js","category-logica-de-programacion-con-javascript","tag-else","tag-if","tag-javascript","tag-nodejs","tag-switch"],"_links":{"self":[{"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/posts\/190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/comments?post=190"}],"version-history":[{"count":16,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/posts\/190\/revisions"}],"predecessor-version":[{"id":596,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/posts\/190\/revisions\/596"}],"wp:attachment":[{"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/media?parent=190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/categories?post=190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/tags?post=190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}