{"id":398,"date":"2022-10-06T08:49:22","date_gmt":"2022-10-06T06:49:22","guid":{"rendered":"http:\/\/quadern-programacio.recursos.uoc.edu\/?page_id=398"},"modified":"2022-10-06T08:49:22","modified_gmt":"2022-10-06T06:49:22","slug":"5-2-logica-condicional","status":"publish","type":"page","link":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/5-2-logica-condicional\/","title":{"rendered":"5.2. L\u00f3gica condicional"},"content":{"rendered":"<p>Conforme nuestros programas vayan ganando en complejidad, nuestro c\u00f3digo tendr\u00e1 que tomar ciertas decisiones y realizar acciones que dependan de estas decisiones. Por ejemplo, si estamos programando un juego y el n\u00famero de vidas del jugador llega a cero, el juego termina. Una aplicaci\u00f3n del clima tambi\u00e9n decide qu\u00e9 imagen mostrarnos en funci\u00f3n de sus datos meteorol\u00f3gicos: si est\u00e1 despejado nos mostrar\u00e1 un sol, si est\u00e1 lloviendo nos mostrar\u00e1 unas nubes y lluvia. Todas estas decisiones y las acciones que tomar las podemos plasmar en nuestro c\u00f3digo mediante la l\u00f3gica condicional.<\/p>\n<p>En el tema anterior, al estudiar los bucles <span class=\"courier\">for<\/span>, empezamos a utilizar cierta l\u00f3gica condicional que determinaba la ejecuci\u00f3n del cuerpo de bucle o no. En el test que defin\u00edamos en el bucle utiliz\u00e1bamos los <strong>operadores de comparaci\u00f3n<\/strong> para establecer estas condiciones.<\/p>\n<p>Pensando en abstracto, o en pseudoc\u00f3digo, podr\u00edamos plantear esta l\u00f3gica de la siguiente manera:<\/p>\n<pre>Si el personaje est\u00e1 vivo {\r\n    Seguir ejecutando el juego\r\n}\r\n\r\nSi el personaje est\u00e1 muerto {\r\n    Terminar el juego\r\n}<\/pre>\n<p>Para este tipo de situaciones donde estamos usando una l\u00f3gica binaria (vivo-muerto, verdadero-falso) podemos usar un tipo de variables que en Javascript denominamos <strong>booleanas<\/strong>. Estas variables solo pueden tener dos valores: <span class=\"courier\">true<\/span> o <span class=\"courier\">false<\/span>. Sigamos ampliando nuestro pseudoc\u00f3digo utilizando una variable booleana para almacenar el estado del personaje:<\/p>\n<pre>let vivo = true; \/\/ El personaje empieza estando vivo\r\nlet vidas = 5; \/\/ El personaje tiene 5 vidas\r\nSi alive == true {\r\n   Seguir ejecutando el juego\r\n}\r\n\r\nSi alive == false {\r\n    Terminar el juego\r\n}<\/pre>\n<p class=\"Cuerpo\"><span lang=\"ES-TRAD\">Ahora podr\u00edamos a\u00f1adir otra condici\u00f3n para establecer cu\u00e1ndo el personaje pasa de estar vivo a estar muerto:<\/span><\/p>\n<pre>Si vidas &lt;= 0 {\r\n    vivo = false\r\n}<\/pre>\n<p>De esta manera tendr\u00edamos ya la l\u00f3gica de nuestro juego. El personaje empieza vivo y con cinco vidas. Mientras est\u00e9 vivo, el juego se ejecuta. Si el n\u00famero de vidas llega a 0, el juego se termina.<\/p>\n<p>Podr\u00edamos hacer un ejemplo sencillo tambi\u00e9n para la aplicaci\u00f3n del tiempo. En este caso, en lugar de una variable booleana podr\u00edamos tener un n\u00famero asociado a cada tipo de tiempo (0 = soleado, 1 = nublado, 2 = lluvioso):<\/p>\n<pre>let weather = 1;\r\nSi weather == 0 {\r\n    dibujaSol();\r\n}\r\nSi weather == 1 {\r\n    dibujaNubes();\r\n}\r\n\r\nSi weather == 2 {\r\n    dibujaNubes();\r\n    dibujaLluvia();\r\n}<\/pre>\n<p class=\"Cuerpo\"><span lang=\"ES-TRAD\">A continuaci\u00f3n, veremos c\u00f3mo implementar este tipo de l\u00f3gica en nuestros <span class=\"Ninguno\"><i>sketches<\/i><\/span>.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Conforme nuestros programas vayan ganando en complejidad, nuestro c\u00f3digo tendr\u00e1 que tomar ciertas decisiones y realizar acciones que dependan de estas decisiones. Por ejemplo, si estamos programando un juego y el n\u00famero de vidas del jugador llega a cero, el juego termina. Una aplicaci\u00f3n del clima tambi\u00e9n decide qu\u00e9 imagen mostrarnos en funci\u00f3n de sus [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages\/398"}],"collection":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/comments?post=398"}],"version-history":[{"count":2,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages\/398\/revisions"}],"predecessor-version":[{"id":734,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages\/398\/revisions\/734"}],"wp:attachment":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/media?parent=398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}