{"id":76062,"date":"2018-08-10T04:28:14","date_gmt":"2018-08-10T04:28:14","guid":{"rendered":"http:\/\/conceptos-basicos-poa"},"modified":"2025-10-19T15:24:33","modified_gmt":"2025-10-19T15:24:33","slug":"conceptos-basicos-poa","status":"publish","type":"post","link":"https:\/\/proyectos.comunicaciondigital.es\/en\/conceptos-basicos-poa\/","title":{"rendered":"Conceptos b\u00e1sicos de POO"},"content":{"rendered":"<p>[et_pb_section fb_built=\u00bb1&#8243; _builder_version=\u00bb4.16&#8243; global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb][et_pb_row _builder_version=\u00bb4.16&#8243; background_size=\u00bbinitial\u00bb background_position=\u00bbtop_left\u00bb background_repeat=\u00bbrepeat\u00bb global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb][et_pb_column type=\u00bb4_4&#8243; _builder_version=\u00bb4.16&#8243; custom_padding=\u00bb|||\u00bb global_colors_info=\u00bb{}\u00bb custom_padding__hover=\u00bb|||\u00bb theme_builder_area=\u00bbpost_content\u00bb][et_pb_accordion _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb hover_enabled=\u00bb0&#8243; global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb sticky_enabled=\u00bb0&#8243;][et_pb_accordion_item title=\u00bbVariables\u00bb open=\u00bbon\u00bb _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb]<\/p>\n<h3>\u00bfQu\u00e9 es una variable?<\/h3>\n<ul>\n<li>Una variable es un elemento que <b>contiene informaci\u00f3n <\/b>(datos) que puede ser ejecutada por el c\u00f3digo.<\/li>\n<li>Las variables sirven para <b>guardar<\/b> informaci\u00f3n que ser\u00e1 utilizada posteriormente.<\/li>\n<li>Cada variable tiene un <b>tipo de datos<\/b> (n\u00famero, cadena, fecha\u2026)<\/li>\n<li>Javascript es un <b>lenguaje impl\u00edcito<\/b> por lo que no necesita especificar previamente el tipo de dato que contiene una variable.<\/li>\n<li>Las variables pueden cambiar de tipo de dato, pero no es recomendable.<\/li>\n<\/ul>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/29f3a-js30-1533981613-50.png\" alt=\"\" \/><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/81227-js31-1533981745-37.png\" alt=\"\" \/><\/figure>\n<p>En <a href=\"https:\/\/jsfiddle.net\/gertrudix\/2gqf548z\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">este ejemplo (JsFidle)<\/a> o <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/NPxXEPa\" target=\"_blank\" rel=\"noopener\">Codepen<\/a> x se define como una variable. Luego, asignamos a x el valor de 6:<\/p>\n<h3>Ejercicio<\/h3>\n<p>Sobre el ejemplo de creaci\u00f3n de variable anterior, modif\u00edcalo para:<\/p>\n<ol>\n<li>Declarar e inicializar la variable x en el mismo paso<\/li>\n<li>Declara otra variable, y, e inicial\u00edzala con una cadena (string)<\/li>\n<li>Crea un encabezado de segundo nivel (h2) debajo del p\u00e1rrafo y haz que se muestre la nueva variable en \u00e9l<\/li>\n<\/ol>\n<p><i><a href=\"https:\/\/jsfiddle.net\/gertrudix\/7d7rwezr\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n JSFidle<\/a> &#8211; <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/JoGMeoQ\" target=\"_blank\" rel=\"noopener\">Codepen<\/a><\/i><\/p>\n<p class=\"has-small-font-size\">Explicaci\u00f3n: 1. Creamos un h2 vac\u00edo con un id 2. Declaramos la variable y y le damos un valor como string 3. Sobre el objeto document, aplicamos el m\u00e9todo getElementByID() para capturar el id del h2, y le pasamos con innerHTML el valor de la variable y<\/p>\n<p class=\"has-small-font-size\">\n<h3>Ejercicio<\/h3>\n<p>Abre el <a href=\"https:\/\/jsfiddle.net\/gertrudix\/orbmt32f\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><b>siguiente ejercicio<\/b><\/a> (JSFidle) o <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/wBMpQae\" target=\"_blank\" rel=\"noopener\">Codepen<\/a> que usa variables con datos num\u00e9ricos y modif\u00edcalo para incluir el IVA en el precio total:<\/p>\n<ol>\n<li>Crea un nuevo &lt;p&gt; con id subtotal<\/li>\n<li>Declarar una tercera variable llamada IVA e inicializarla con el valor 1.21<\/li>\n<li>A la variable total ll\u00e1mala subtotal<\/li>\n<li>Crea una nueva variable total que multiplique subtotal por iva<\/li>\n<li>Utiliza el m\u00e9todo getElementById para escribir el resultado<\/li>\n<\/ol>\n<p><a href=\"https:\/\/jsfiddle.net\/gertrudix\/orbmt32f\/12\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><i>Soluci\u00f3n JSFidle<\/i><\/a> &#8211; <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/ogbpQjN\" target=\"_blank\" rel=\"noopener\">Codepen<\/a><\/p>\n<p class=\"has-small-font-size\">Explicaci\u00f3n: 1.Creamos el p\u00e1rrafo con el nuevo id 2.Creamos la variable IVA y le damos el valor 1.21 (para que luego haga el m\u00faltiplo sumatorio del 21%) 3.Cambiamos la variable total original a subtotal 4.Creamos la nueva variable total como la multiplicaci\u00f3n de las otras dos variables, subtotal * iva Escribimos con getElementById().innerHTML =\u00a0 el valor con IVA<\/p>\n<p>[\/et_pb_accordion_item][et_pb_accordion_item title=\u00bbAlcance o \u00e1mbito de una variable\u00bb _builder_version=\u00bb4.16&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb open=\u00bboff\u00bb]<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/292c9-js32-1533982243-10.png\" alt=\"\" \/><\/figure>\n<p>Una variable es local normalmente en cualquier lugar en la que aparece acotada por llaves.<\/p>\n<p>Se pueden tener una variable global y local que se llamen igual, pero no es recomendable, porque induce a confusi\u00f3n y hace m\u00e1s complejo trabajar con ellas.<\/p>\n<p>[\/et_pb_accordion_item][et_pb_accordion_item title=\u00bbOperadores\u00bb _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb open=\u00bboff\u00bb]<\/p>\n<p>Los operadores son instrumentos b\u00e1sicos para realizar operaciones en cualquier lenguaje de programaci\u00f3n.<\/p>\n<blockquote class=\"wp-block-quote\">\n<p>Recuerda que en Javascript el operador <b>=<\/b> se utiliza para la <b>asignaci\u00f3n<\/b> de valor a una variable.<\/p>\n<\/blockquote>\n<h3>Operadores aritm\u00e9ticos<\/h3>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/ec6fe-js33-1533982602-81.png\" alt=\"\" \/><\/figure>\n<p>Los operadores aritm\u00e9ticos sirven para realizar <b>manipulaciones matem\u00e1ticas<\/b> sobre el valor de las variables num\u00e9ricas.<\/p>\n<p>Un operador aritm\u00e9tico siempre dar\u00e1 como <b>resultado un n\u00famero.<\/b><\/p>\n<p>Vamos a realizar algunos <b>ejercicios<\/b> para conocer<b> <\/b>su funcionamiento:<\/p>\n<ul>\n<li><a href=\"https:\/\/jsfiddle.net\/gertrudix\/mektL3nu\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><b>Suma<\/b><\/a> (JSFidle) &#8211; <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/NPxXEGa\" target=\"_blank\" rel=\"noopener\">Codepen<\/a>. A partir de este c\u00f3digo, realiza la suma de dos variables. [<a href=\"https:\/\/jsfiddle.net\/gertrudix\/mektL3nu\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n\u00a0 JSFidle<\/a> &#8211; <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/azdEQvr\" target=\"_blank\" rel=\"noopener\">Codepen<\/a>]<\/li>\n<li><b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/5xLLbkek\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Multiplicaci\u00f3n y divisi\u00f3n<\/a><\/b>(JsFidle) &#8211; <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/YPwYRww\" target=\"_blank\" rel=\"noopener\">Codepen<\/a>. A partir de este ejemplo: a) Inicializa las dos variables d\u00e1ndoles un valor num\u00e9rico. b) Crea una tercera variable y as\u00edgnale un valor. c) Escribe sobre este texto el resultado de multiplicar x * y, y dividir el resultado por la tercera variable. [<a href=\"https:\/\/jsfiddle.net\/gertrudix\/5xLLbkek\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n JsFidle<\/a> &#8211; <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/zxrpMrb\" target=\"_blank\" rel=\"noopener\">Codepen<\/a>]<\/li>\n<li><a href=\"https:\/\/jsfiddle.net\/gertrudix\/a5o07731\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><b>Incremento y disminuci\u00f3n<\/b><\/a> (JsFidle) &#8211; <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/qEbpQZW\" target=\"_blank\" rel=\"noopener\">Codepen<\/a>. El incremento y disminuci\u00f3n sirven para aumentar o disminuir un n\u00famero dado. Sobre el ejemplo, vamos a restar de nuevo, con el operador de disminuci\u00f3n para que se vuelva a quedar la variable en 5. a) Crea un nuevo p\u00e1rrafo con id \u201cdisminuci\u00f3n\u201d; b) utiiza el operado de dismunici\u00f3n para x; c) crea una nueva variable que asigne el valor a x; d) escribe el resultado en el p\u00e1rrafo disminuci\u00f3n. [<a href=\"https:\/\/jsfiddle.net\/gertrudix\/a5o07731\/3\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n JSFidle<\/a> &#8211; <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/OPMzaNm\" target=\"_blank\" rel=\"noopener\">Codepen<\/a>]<\/li>\n<\/ul>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/aa8a3-js34-1533998119-64.png\" alt=\"Operadores aritm\u00e9ticos combinados con operador de asignaci\u00f3n.\" \/><\/p><figcaption>Operadores aritm\u00e9ticos combinados con operador de asignaci\u00f3n.<\/figcaption><\/figure>\n<p>Los operadores aritm\u00e9ticos se pueden combinar con el operador de asignaci\u00f3n.<\/p>\n<p>En <a href=\"https:\/\/www.w3schools.com\/js\/js_arithmetic.asp\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">este enlace del tutorial JS<\/a> del W3School puedes profundizar en c\u00f3mo funcionan el reto de operadores aritm\u00e9ticos.<\/p>\n<h3>Operadores relacionales y condicionales<\/h3>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/bb14c-js35-1533998274-68.png\" alt=\"\" \/><\/figure>\n<p>Los operadores condicionales o relacionales permiten <b>comparar n\u00fameros<\/b> y son esenciales para realizar aplicaciones complejas que se basen en el cumplimiento de condiciones<\/p>\n<p>Un operador relacional siempre dar\u00e1 como resultado un <b>valor booleano<\/b>.<\/p>\n<p>Veamos algunos ejemplos de operadores relacionales:<\/p>\n<ul>\n<li><b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/L40xL4hL\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Igual a<\/a> ==<\/b>. Hace una comparativa entre una sentencia y el valor esperado. Si el valor es cierto, dar\u00e1 como resultado \u00abtrue\u00bb; en caso contrario, indicar\u00e1 \u00abfalse\u00bb.<\/li>\n<li><b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/sutyws4k\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Igual valor e igual tipo<\/a><\/b> ===. Como en el anterior, hace una comparativa entre una sentencia y el valor esperado, pero en este caso solo dar\u00e1 \u00abtrue\u00bb si es igual el valor y el tipo de dato; en caso contrario dar\u00e1 \u00abfalse\u00bb. Por ejemplo, el valor 12 (number) y \u00ab12\u00bb (string) dar\u00edan false porque son igual valor pero distinto tipo.<\/li>\n<\/ul>\n<h3>Operadores l\u00f3gicos<\/h3>\n<p>Los operadores relacionales sirven para realizar <b><a href=\"https:\/\/www.w3schools.com\/js\/js_comparisons.asp\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">operaciones l\u00f3gicas de comparaci\u00f3n<\/a><\/b> y se utilizan para tomar decisiones en los scripts.<\/p>\n<p>Se utilizan valores booleanos, por lo que un operador relacional siempre dar\u00e1 como r<b>esultado un valor booleano<\/b>.<\/p>\n<p>Los operadores l\u00f3gicos son:<\/p>\n<ul>\n<li><a href=\"https:\/\/jsfiddle.net\/gertrudix\/819u6euw\/1\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Negaci\u00f3n l\u00f3gica<\/a><\/li>\n<li><a href=\"https:\/\/jsfiddle.net\/gertrudix\/9ch9keaL\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">AND (&amp;&amp;)<\/a><\/li>\n<li><a href=\"https:\/\/jsfiddle.net\/gertrudix\/onoLs4t0\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">OR (||)<\/a><\/li>\n<\/ul>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/f6c21-js36-1533998879-7.png\" alt=\"Se pone el ! Delante del nombre de la variable. Retorna falso para sentencias verdaderas y verdadero para sentencias falsas. Para qu\u00e9 se usa: Cuando se necesitan evaluar expresiones complejas, y se usan tablas de verdad, con el fin de evitar incluir muchas sentencias con if anidados (permiten agrupar sentencias)\u00a0\u00a0\" \/><\/p><figcaption>Se pone el ! Delante del nombre de la variable. Retorna falso para sentencias verdaderas y verdadero para sentencias falsas. Para qu\u00e9 se usa: Cuando se necesitan evaluar expresiones complejas, y se usan tablas de verdad, con el fin de evitar incluir muchas sentencias con if anidados (permiten agrupar sentencias)\u00a0\u00a0<\/figcaption><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/f0dd5-js37-1533998899-76.png\" alt=\"Operaci\u00f3n l\u00f3gica AND: Combina dos valores boolenaos que compara. Es verdad si los dos valores son verdad\u00a0\u00a0\" \/><\/p><figcaption>Operaci\u00f3n l\u00f3gica AND: Combina dos valores boolenaos que compara. Es verdad si los dos valores son verdad\u00a0\u00a0<\/figcaption><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/c1aa9-js38-1533998926-94.png\" alt=\"Operaci\u00f3n l\u00f3gica OR: Combina dos valores boolenaos que compara.\u00a0 Es verdad si uno de los valores es verdad\" \/><\/p><figcaption>Operaci\u00f3n l\u00f3gica OR: Combina dos valores boolenaos que compara.\u00a0 Es verdad si uno de los valores es verdad<\/figcaption><\/figure>\n<p>[\/et_pb_accordion_item][et_pb_accordion_item title=\u00bbConceptos de POO\u00bb _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb open=\u00bboff\u00bb]<\/p>\n<p>La <b>POO (Programaci\u00f3n Orientada a Objetos)<\/b> es un paradigma de programaci\u00f3n que permite optimizar los procesos de programaci\u00f3n y los resultados que se obtienen con ellos. Permite pre-dise\u00f1ar objetos que son almacenados en librer\u00edas o bibliotecas para que puedan ser reutilizados por los programas sin necesidad de tener que volver a escribir las funciones necesarias cada vez que se quiere hacer uso de ellas.<\/p>\n<p>Javascript es uno de los muchos lenguajes que funcionan bajo este paradigma. Dentro de las dos corrientes existentes (basarse en clases o basarse en prototipos), <b>JS corresponde al modelo basado en prototipos<\/b> en el que solo hay objetos. Otros lenguajes similares en este sentido, muy utilizados actualmente, son Python y Ruby.<\/p>\n<h3>Elementos fundamentales<\/h3>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/81901-js39-1533999648-35.png\" alt=\"\" \/><\/figure>\n<p>Los elementos fundamentales de la POO incorporan un n\u00famero amplio de componentes (clase, herencia, objeto, m\u00e9todo..), pero nos centraremos solo en los que resultan fundamentales para manejarnos en el entorno de trabajo de un proyecto period\u00edstico<\/p>\n<ul>\n<li>Objetos<\/li>\n<li>Eventos<\/li>\n<li>Funciones<\/li>\n<li>M\u00e9todos<\/li>\n<\/ul>\n<p><b>Objetos<\/b><\/p>\n<p>Un objeto es una entidad definida por un estado, caracterizado por un conjunto de atributos que toman valores (datos) concretos, un comportamiento definido por los m\u00e9todos, operaciones o mecanismos de interacci\u00f3n que pueden realizarse sobre \u00e9l, y una identidad que le diferencia del resto (un identificador).<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/dd704-js40-1533999786-81.png\" alt=\"\" \/><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/e12a6-js41-1533999961-95.png\" alt=\"\" \/><\/figure>\n<p><b>Eventos<\/b><\/p>\n<p>Los eventos son <b>sucesos<\/b>, producidos normalmente por una acci\u00f3n del usuario, que <b>producen alg\u00fan efecto<\/b>. Por ejemplo, cuando un usuario pulsa un bot\u00f3n o hace clic sobre un enlace.<\/p>\n<p>Algunos de los eventos DOM m\u00e1s habituales son:<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/78189-js42-1534000073-32.png\" alt=\"\" \/><\/figure>\n<p>Veamos un par de ejemplos para entender c\u00f3mo funcionan:<\/p>\n<p>&#8211; <b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/fy70hq49\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Onload<\/a><\/b>. Lanza un comportamiento cuando se ha cargado la p\u00e1gina completamente.<\/p>\n<p>&#8211; <b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/54j726os\/12\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Onmouseover<\/a> &#8211; (<a href=\"https:\/\/codepen.io\/gertrudix\/pen\/dPGJQxW\" target=\"_blank\" rel=\"noopener\">ver en Codepen<\/a>)<\/b>. Cuando pasamos por encima de un elemento, se lanza el comportamiento.<\/p>\n<p>Hay muchos otros eventos como el <i>blur<\/i> que es cuando se dispara el evento al perder el foco un elemento, o <i>On Keyup<\/i> que ejecuta el evento cuando el usuario suelta una tecla.<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/1fd3d-js43-1534000563-16.png\" alt=\"\" \/><\/figure>\n<p>Aqu\u00ed puedes ver un ejemplo del <a href=\"https:\/\/jsfiddle.net\/gertrudix\/z3arb58b\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">funcionamiento de onkeyup<\/a>, (<a href=\"https:\/\/codepen.io\/gertrudix\/pen\/MYKrZgN\" target=\"_blank\" rel=\"noopener\">Ver en Codepen<\/a>) que se utiliza en muchas ocasiones para modificar los datos de entrada en un formulario. En este caso, transforma las letras min\u00fasculas en may\u00fasculas.<br \/>En <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/RNrxENx\" target=\"_blank\" rel=\"noopener\">este ejemplo<\/a>, usamos tambi\u00e9n onkeyup pero para contar el n\u00famero de caracteres que introducimos en un input.<\/p>\n<p>Todo evento lleva asociado, normalmente, una <b>funci\u00f3n<\/b>.<\/p>\n<p>Las funciones son fragmentos de c\u00f3digo que realizan alguna acci\u00f3n cuando son invocadas por un evento. Por ejemplo, cuando el usuario pulsa el bot\u00f3n, y sucede algo.<\/p>\n<p>Visto en c\u00f3digo, y explicado, ser\u00eda esto:<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/2bdaa-js44-1534000890-73.png\" alt=\"\" \/><\/figure>\n<p>[\/et_pb_accordion_item][et_pb_accordion_item title=\u00bbLibrer\u00edas y APIs\u00bb _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb open=\u00bboff\u00bb]<\/p>\n<h1>Librer\u00edas y APIs: \u00bfqu\u00e9 son y c\u00f3mo se relacionan?<\/h1>\n<p>Estos dos conceptos van de la mano. <strong>Una librer\u00eda<\/strong> es un conjunto de funciones y comportamientos listos para usar, y <strong>una API<\/strong> son las instrucciones que nos indican <em>c\u00f3mo<\/em> usar esas funciones dentro de nuestro propio c\u00f3digo.<\/p>\n<h2>\u00bfQu\u00e9 es una librer\u00eda?<\/h2>\n<p>Una <a href=\"http:\/\/www.4rsoluciones.com\/blog\/framework-sdk-biblioteca-api-cuales-son-las-diferencias-2\/\" target=\"_blank\" rel=\"noopener\">librer\u00eda o biblioteca<\/a> es un conjunto de c\u00f3digo que alguien ya ha escrito y organizado para resolver tareas comunes. En otras palabras: es una <strong>colecci\u00f3n de funciones<\/strong> que podemos \u201cimportar\u201d a nuestro programa para no tener que escribirlas desde cero.<\/p>\n<p>Por ejemplo, hay librer\u00edas para crear gr\u00e1ficos, manipular fechas o mostrar mapas. En lugar de programar todo eso t\u00fa mismo, usas la librer\u00eda.<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/26cfd-js48-1534007069-58.png\" alt=\"Ejemplo de librer\u00eda en JavaScript\" \/><\/figure>\n<h2>\u00bfQu\u00e9 es una API?<\/h2>\n<p>Una <a href=\"http:\/\/blogginzenith.zenithmedia.es\/que-es-y-como-funciona-una-api-diczionario\/\" target=\"_blank\" rel=\"noopener\">API<\/a> (<em>Application Programming Interface<\/em>) es el <strong>manual de uso<\/strong> de una librer\u00eda o servicio. Te explica qu\u00e9 funciones existen, qu\u00e9 datos necesitan y qu\u00e9 resultados devuelven.<\/p>\n<p>Podemos pensar en una <strong>cafetera Nespresso<\/strong> como una librer\u00eda (el sistema para hacer caf\u00e9) y en su <strong>libro de instrucciones<\/strong> como la API: te indica c\u00f3mo preparar cada tipo de caf\u00e9 y qu\u00e9 botones pulsar.<\/p>\n<p><em>Las APIs permiten que distintos programas \u201chablen entre s\u00ed\u201d. Por eso son tan \u00fatiles cuando queremos conectar, por ejemplo, nuestro sitio web con Google Maps o Twitter.<\/em><\/p>\n<h2>Ventajas de usar Librer\u00edas y APIs<\/h2>\n<div class=\"wp-block-image alignright\">\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/d68e1-js49b-1534007306-88.jpg\" alt=\"Ventajas de usar librer\u00edas y APIs\" \/><\/figure>\n<\/div>\n<p>Trabajar con librer\u00edas y APIs <strong>ahorra tiempo y esfuerzo<\/strong>. En lugar de escribir miles de l\u00edneas de c\u00f3digo, aprovechamos soluciones ya creadas y probadas.<\/p>\n<p>Por ejemplo, con la <strong>librer\u00eda de Google Maps<\/strong> podemos dibujar mapas, a\u00f1adir marcadores o calcular rutas sin necesidad de programar la l\u00f3gica desde cero. Solo seguimos las instrucciones de su API.<\/p>\n<ul>\n<li>Las librer\u00edas contienen las funciones.<\/li>\n<li>Las APIs explican c\u00f3mo usarlas.<\/li>\n<li>Nosotros solo tenemos que \u201cllamarlas\u201d desde nuestro programa.<\/li>\n<\/ul>\n<h2>API Keys<\/h2>\n<p>Para acceder a la mayor\u00eda de las APIs necesitamos una <strong>API Key<\/strong>, una clave de autenticaci\u00f3n que identifica nuestra aplicaci\u00f3n y limita su uso.<\/p>\n<p>Esto permite:<\/p>\n<ul class=\"list-compact\">\n<li>Controlar cu\u00e1ntas veces se usa el servicio.<\/li>\n<li>Evitar abusos o accesos no autorizados.<\/li>\n<\/ul>\n<h3>C\u00f3mo obtener la API Key de Google Maps<\/h3>\n<ol>\n<li>Entra en la <a href=\"https:\/\/console.developers.google.com\/flows\/enableapi?apiid=geocoding_backend&amp;keyType=SERVER_SIDE&amp;reusekey=true&amp;hl=es-419&amp;pli=1\" target=\"_blank\" rel=\"noopener\">Google API Console<\/a>.<\/li>\n<li>Crea un nuevo proyecto.<\/li>\n<li>Asigna un nombre a la clave (no hace falta restringirla para la pr\u00e1ctica).<\/li>\n<li>Copia la <strong>clave de API<\/strong> que te genera Google.<\/li>\n<\/ol>\n<p><em>En un proyecto real deber\u00edas restringir la clave por seguridad (por dominio, IP o aplicaci\u00f3n).<\/em><\/p>\n<h2>L\u00edmites de uso<\/h2>\n<p>Casi todas las APIs tienen <strong>l\u00edmites de uso gratuito<\/strong>. Por ejemplo, la <a href=\"https:\/\/developers.google.com\/maps\/documentation\/geocoding\/usage-limits?hl=es-419\" target=\"_blank\" rel=\"noopener\">Google Maps API<\/a> permite un n\u00famero m\u00e1ximo de llamadas sin coste cada d\u00eda.<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/bbd14-js50-1534009983-71.png\" alt=\"L\u00edmites de uso de la API de Google Maps\" \/><\/figure>\n<p>[\/et_pb_accordion_item][et_pb_accordion_item title=\u00bbTipos de Librer\u00edas y APIs\u00bb _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb hover_enabled=\u00bb0&#8243; custom_css_free_form=\u00bb||.api-table {||  width: 100%;||  border-collapse: collapse;||  font-family: system-ui, -apple-system, %22Segoe UI%22, Roboto, Helvetica, Arial, sans-serif;||  font-size: 15px;||  margin-top: 1rem;||  color: #111; \/* negro principal *\/||}||.api-table thead {||  background-color: #b91c1c; \/* rojo fuerte *\/||  color: #fff;||}||.api-table th,||.api-table td {||  border: 1px solid #d1d5db; \/* gris claro *\/||  padding: 10px 12px;||  vertical-align: top;||  text-align: left;||}||.api-table tbody tr:nth-child(even) {||  background-color: #f9fafb; \/* blanco gris\u00e1ceo *\/||}||.api-table tbody tr:nth-child(odd) {||  background-color: #ffffff; \/* blanco puro *\/||}||.api-table th {||  font-weight: 700;||  text-transform: uppercase;||  letter-spacing: 0.5px;||}||.api-table a {||  color: #b91c1c; \/* rojo *\/||  text-decoration: none;||  font-weight: 500;||}||.api-table a:hover {||  text-decoration: underline;||}||.api-table em {||  color: #374151; \/* gris oscuro *\/||  font-style: italic;||}||.api-table caption {||  caption-side: top;||  font-weight: 700;||  font-size: 1.1rem;||  text-align: left;||  color: #111;||  padding-bottom: 0.5rem;||  border-bottom: 3px solid #b91c1c;||}||||||\u00bb global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb open=\u00bboff\u00bb sticky_enabled=\u00bb0&#8243;]<\/p>\n<h2>APIs y librer\u00edas \u00fatiles para proyectos period\u00edsticos<\/h2>\n<p>Estas son algunas de las librer\u00edas y APIs m\u00e1s usadas en proyectos de periodismo de datos e interactivos. Incluyen tanto opciones abiertas como servicios de Google muy populares.<\/p>\n<ul><\/ul>\n<table class=\"api-table\">\n<caption>APIs y librer\u00edas para proyectos period\u00edsticos<\/caption>\n<thead>\n<tr>\n<th>Categor\u00eda<\/th>\n<th>Librer\u00edas \/ APIs<\/th>\n<th>Uso t\u00edpico<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Mapas y geodatos<\/td>\n<td><a href=\"https:\/\/leafletjs.com\/\" target=\"_blank\" rel=\"noopener\">Leaflet<\/a>,<br \/><a href=\"https:\/\/maplibre.org\/maplibre-gl-js\/docs\/\" target=\"_blank\" rel=\"noopener\">MapLibre GL JS<\/a>,<br \/><a href=\"https:\/\/developers.google.com\/maps\/documentation\/javascript\" target=\"_blank\" rel=\"noopener\">Google Maps JS API<\/a>,<br \/><a href=\"https:\/\/developers.google.com\/maps\/documentation\/geocoding\" target=\"_blank\" rel=\"noopener\">Google Geocoding API<\/a><\/td>\n<td><em>Mapas interactivos, rutas, marcadores y geocodificaci\u00f3n.<\/em><\/td>\n<\/tr>\n<tr>\n<td>Animaci\u00f3n<\/td>\n<td><a href=\"https:\/\/gsap.com\/\" target=\"_blank\" rel=\"noopener\">GSAP<\/a>,<br \/><a href=\"https:\/\/developers.lottiefiles.com\/docs\/dotlottie-player\/dotlottie-web\/\" target=\"_blank\" rel=\"noopener\">Lottie<\/a>,<br \/><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Web_Animations_API\" target=\"_blank\" rel=\"noopener\">Web Animations API<\/a><\/td>\n<td>\n<p><em>Scrollytelling, transiciones y efectos visuales.<br \/><\/em><a href=\"https:\/\/proyectos.comunicaciondigital.es\/files\/clases\/ejemplo-libreria-gasp.html\" target=\"_blank\" rel=\"noopener\">Ejemplo de uso de GSAP<\/a><em>.<br \/><\/em><a href=\"https:\/\/proyectos.comunicaciondigital.es\/files\/clases\/ejemplo-libreria-lotitie.html\" target=\"_blank\" rel=\"noopener\">Ejemplo de uso de Lottie<\/a><em>.<\/em><em><\/em><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>Visualizaci\u00f3n de datos<\/td>\n<td><a href=\"https:\/\/developers.google.com\/chart\" target=\"_blank\" rel=\"noopener\">Google Charts<\/a>,<br \/><a href=\"https:\/\/d3js.org\/\" target=\"_blank\" rel=\"noopener\">D3.js<\/a>,<br \/><a href=\"https:\/\/www.chartjs.org\/\" target=\"_blank\" rel=\"noopener\">Chart.js<\/a>,<br \/><a href=\"https:\/\/vega.github.io\/vega-lite\/\" target=\"_blank\" rel=\"noopener\">Vega-Lite<\/a>,<br \/><a href=\"https:\/\/observablehq.com\/plot\/\" target=\"_blank\" rel=\"noopener\">Observable Plot<\/a><\/td>\n<td><em>Gr\u00e1ficos interactivos y dashboards period\u00edsticos.<\/em><\/td>\n<\/tr>\n<tr>\n<td>DOM y Web APIs<\/td>\n<td><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Fetch_API\" target=\"_blank\" rel=\"noopener\">Fetch API<\/a>,<br \/><code>querySelector<\/code>,<br \/><code>IntersectionObserver<\/code><\/td>\n<td><em>Cargar datos y manipular elementos sin dependencias.<\/em><\/td>\n<\/tr>\n<tr>\n<td>Aplicaciones y UI<\/td>\n<td>React, Vue, Svelte<\/td>\n<td><em>Componentes y m\u00f3dulos interactivos reutilizables.<\/em><\/td>\n<\/tr>\n<tr>\n<td>Im\u00e1genes y gr\u00e1ficos base<\/td>\n<td>Canvas API, WebGL, <a href=\"https:\/\/threejs.org\/\" target=\"_blank\" rel=\"noopener\">three.js<\/a><\/td>\n<td><em>Efectos personalizados y visualizaci\u00f3n 3D ligera.<\/em><\/td>\n<\/tr>\n<tr>\n<td>Datos y feeds<\/td>\n<td><a href=\"https:\/\/www.papaparse.com\/\" target=\"_blank\" rel=\"noopener\">Papa Parse<\/a>,<br \/><a href=\"https:\/\/developers.google.com\/knowledge-graph\" target=\"_blank\" rel=\"noopener\">Google Knowledge Graph API<\/a>,<br \/><a href=\"https:\/\/nodejs.org\/en\/learn\/getting-started\/fetch\" target=\"_blank\" rel=\"noopener\">fetch en Node<\/a><\/td>\n<td><em>Cargar CSV\/JSON, enriquecer entidades y procesar datasets.<\/em><\/td>\n<\/tr>\n<tr>\n<td>Contenido multimedia<\/td>\n<td><a href=\"https:\/\/developers.google.com\/youtube\/v3\" target=\"_blank\" rel=\"noopener\">YouTube Data API<\/a>,<br \/><a href=\"https:\/\/developers.google.com\/photos\" target=\"_blank\" rel=\"noopener\">Google Photos Library API<\/a><\/td>\n<td><em>Integrar v\u00eddeos o galer\u00edas en reportajes interactivos.<\/em><\/td>\n<\/tr>\n<tr>\n<td>Verificaci\u00f3n y noticias<\/td>\n<td><a href=\"https:\/\/toolbox.google.com\/factcheck\/apis\" target=\"_blank\" rel=\"noopener\">Google Fact Check Tools API<\/a>,<br \/><a href=\"https:\/\/newsapi.org\/docs\" target=\"_blank\" rel=\"noopener\">NewsAPI<\/a>,<br \/><a href=\"https:\/\/open-platform.theguardian.com\/\" target=\"_blank\" rel=\"noopener\">The Guardian Open Platform<\/a><\/td>\n<td><em>Fact-checking, titulares y acceso a art\u00edculos.<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Consejo:<\/strong> para proyectos abiertos y ligeros, usa Leaflet + Chart.js; si ya trabajas con Google, combina Maps\/Geocoding con Google Charts o D3.js.<\/p>\n<p>[\/et_pb_accordion_item][et_pb_accordion_item title=\u00bbAnyChart\u00bb _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb open=\u00bboff\u00bb]<\/p>\n<h3>AnyChart<\/h3>\n<p>Para trabajar con un ejemplo de librer\u00eda de gr\u00e1ficos o DataViz, para usar el<a href=\"https:\/\/playground.anychart.com\/\" target=\"_blank\" rel=\"noopener\"> Playground de AnyChart<\/a>.<\/p>\n<p>Nota: Recordad que ten\u00e9is que copiar el c\u00f3digo o embeber el ejemplo\u00a0 en vuestro porfolio de JSFiddle o de Codepen para que quede recogido en este.<\/p>\n<p><iframe height=\"300\" style=\"width: 100%;\" scrolling=\"no\" title=\"AnyChart - Donut Chart\" src=\"https:\/\/codepen.io\/gertrudix\/embed\/KwVZbqP?default-tab=html%2Cresult\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\"><\/p>\n<p>  See the Pen <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/KwVZbqP\"><\/p>\n<p>  AnyChart &#8211; Donut Chart<\/a> by gertrudix (<a href=\"https:\/\/codepen.io\/gertrudix\">@gertrudix<\/a>)<\/p>\n<p>  on <a href=\"https:\/\/codepen.io\">CodePen<\/a>.<\/p>\n<p><\/iframe><\/p>\n<p>[\/et_pb_accordion_item][et_pb_accordion_item title=\u00bbGoogle Chart\u00bb _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb open=\u00bboff\u00bb]<\/p>\n<h3>Google Charts<\/h3>\n<p>Google Charts es otro ejemplo de librer\u00eda completa para realizar visualizaciones de datos.<\/p>\n<p>Vamos a ver c\u00f3mo trabajar un ejemplo:<\/p>\n<p>1. Accede a la <a href=\"https:\/\/developers.google.com\/chart\/interactive\/docs\/gallery\" target=\"_blank\" rel=\"noopener\">Galer\u00eda de gr\u00e1ficos<\/a><\/p>\n<p>2. Selecciona el <a href=\"https:\/\/developers.google.com\/chart\/interactive\/docs\/gallery\/sankey\" target=\"_blank\" rel=\"noopener\">diagrama de Sankey<\/a>.<\/p>\n<p>3. Copia el c\u00f3digo y p\u00e9galo en tu JsFiddle. El resultado deber\u00eda ser <a href=\"https:\/\/jsfiddle.net\/gertrudix\/a56xgn4o\/2\/\" target=\"_blank\" rel=\"noopener\">similar a este<\/a> en JsFidle o en <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/EaPoGwZ\" target=\"_blank\" rel=\"noopener\">Codepen<\/a>.<\/p>\n<p><iframe loading=\"lazy\" width=\"100%\" height=\"300\" src=\"\/\/jsfiddle.net\/gertrudix\/a56xgn4o\/2\/embedded\/\" allowfullscreen=\"allowfullscreen\" allowpaymentrequest=\"\" frameborder=\"0\"><\/iframe><br \/>4. Modifica los par\u00e1metros para ajustarlo a un modelo de visualizaci\u00f3n que te pueda ser \u00fatil.<\/p>\n<p>Puedes ver en este <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/KwVZbyK\" target=\"_blank\" rel=\"noopener\"><strong>ejemplo en Codepen<\/strong><\/a>, c\u00f3mo usar otro set de gr\u00e1ficos de la librer\u00eda, con un caso sobre energ\u00edas renovables.<\/p>\n<p>[\/et_pb_accordion_item][et_pb_accordion_item title=\u00bbFunciones. Introducci\u00f3n\u00bb _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb hover_enabled=\u00bb0&#8243; global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb open=\u00bboff\u00bb sticky_enabled=\u00bb0&#8243;]<\/p>\n<h3>Utilidad<\/h3>\n<p>Una funci\u00f3n es un <b>bloque de c\u00f3digo que puede ser ejecutado<\/b> cuando es llamada por un evento<\/p>\n<p>Son muy \u00fatiles porque es muy habitual reutilizar c\u00f3digo con diferentes argumentos a lo largo de un programa, por lo que podemos utilizar la funci\u00f3n sin tener que escribir de nuevo el c\u00f3digo, s\u00f3lo <b>invoc\u00e1ndola <\/b><\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/6f4ff-js45-1534001410-43.png\" alt=\"\" \/><\/figure>\n<p>Nota: Como veremos m\u00e1s adelante, los par\u00e9ntesis que van detr\u00e1s del nombre de la funci\u00f3n sirven para pasar par\u00e1metros (informaci\u00f3n) a la funci\u00f3n.<\/p>\n<h3>Sintaxis<\/h3>\n<p>Una funci\u00f3n se define del modo siguiente:<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/4d8a2-js46-1534001534-93.png\" alt=\"\" \/><\/figure>\n<p><b>\u00bfC\u00f3mo se llama a una funci\u00f3n?<\/b><\/p>\n<p>Para <b>llamar a una funci\u00f3n<\/b> hay que invocarla en cualquier parte de la p\u00e1gina web.<\/p>\n<p>Cuando se invoca una funci\u00f3n, todo el c\u00f3digo que contenga entre <b>llaves {} <\/b>se ejecuta<\/p>\n<p>Para invocarla, basta con escribir su nombre seguido de par\u00e9ntesis<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/ae6d3-js47-1534001653-85.png\" alt=\"\" \/><\/figure>\n<p><b>Ejemplos<\/b><\/p>\n<p>Veamos un ejemplo explicado para el uso de las funciones.<\/p>\n<p><i><a href=\"https:\/\/jsfiddle.net\/gertrudix\/yc7n3dc3\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Ejemplo sencillo en JSFidle<\/a> o en <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/GgoyPQY\" target=\"_blank\" rel=\"noopener\">Codepen<\/a><\/i>. En este caso, la funci\u00f3n, llamada cambiaTexto, escribe en el objeto documento el texto que se pasa como argumento en el m\u00e9todo write.<\/p>\n<p>Ahora podemos hacer una variante escribiendo dentro del script, directamente la funci\u00f3n para invocarla: cambiaTexto(); y se escribir\u00e1 el texto directamente sin llamar al bot\u00f3n.<\/p>\n<p><b>Ejercicio<\/b><\/p>\n<p>Vamos a realizar ahora un ejercicio para comprobar c\u00f3mo opera una funci\u00f3n.<\/p>\n<ol>\n<li>Abre <a href=\"https:\/\/jsfiddle.net\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">https:\/\/jsfiddle.net\/<\/a> o en <a href=\"https:\/\/codepen.io\/\" target=\"_blank\" rel=\"noopener\">Codepen<\/a><\/li>\n<li>Escribe una funci\u00f3n llamada escribeConsola<\/li>\n<li>Haz que registre, en la consola, el siguiente string o cadena de texto: \u201cEsta es mi primera funci\u00f3n que aparece en la consola<\/li>\n<li>Abre la consola para comprobar el resultado<\/li>\n<\/ol>\n<p><i><a href=\"https:\/\/jsfiddle.net\/gertrudix\/sgnep08t\/1\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n en JSFidle<\/a> o en <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/GgoyPxY\" target=\"_blank\" rel=\"noopener\">Codepen<\/a><\/i><\/p>\n<p class=\"has-small-font-size\">Pasos: 1. Abrimos la consola JS del navegador<\/p>\n<p class=\"has-small-font-size\">2. Escribimos la funci\u00f3n<\/p>\n<pre class=\"has-small-font-size\">function escribreConsola()\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 console.log(\u201cEsta es mi primera funci\u00f3n que aparece en la consola\u201d);\u00a0\u00a0\u00a0\u00a0\u00a0 } 3. La invocamos escribeConsola()<\/pre>\n<p>[\/et_pb_accordion_item][et_pb_accordion_item title=\u00bbTrabajando con funciones\u00bb _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb hover_enabled=\u00bb0&#8243; global_colors_info=\u00bb{}\u00bb theme_builder_area=\u00bbpost_content\u00bb open=\u00bboff\u00bb sticky_enabled=\u00bb0&#8243;]<\/p>\n<div class=\"contenedor-leaflet\">\n<p>Vamos a adentrarnos en el uso de funciones. Para ello, vamos a trabajar con la <a href=\"https:\/\/leafletjs.com\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">librer\u00eda Leaflet<\/a>, un framework open source, ligero y muy extendido para crear aplicaciones de mapas web.<\/p>\n<h2>Crear un mapa simple incluyendo un marcador<\/h2>\n<p>La elaboraci\u00f3n de este mapa nos permitir\u00e1 comprender mejor c\u00f3mo operan las funciones con Leaflet.<\/p>\n<p>Vamos a elaborar un <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/PwZEXBV\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><b>mapa sencillo en el que incluiremos un marcador<\/b><\/a>:<\/p>\n<ol>\n<li><b>Prepara el entorno<\/b>. En CodePen (o tu HTML), a\u00f1ade las dependencias de Leaflet (CSS y JS). En el HTML crea un contenedor para el mapa, por ejemplo <code>&lt;div id=\"map\"&gt;&lt;\/div&gt;<\/code>. En el CSS dale altura (p. ej. <code>#map { height: 420px; }<\/code>).<\/li>\n<li><b>Inicializa el mapa y el marcador<\/b>. En JavaScript:\n<ol type=\"a\">\n<li>Declara una variable con las coordenadas que centrar\u00e1n el mapa (lat, lng).<\/li>\n<li>Crea el mapa con <code>L.map('map').setView([lat, lng], zoom)<\/code>, y a\u00f1ade una capa base OSM con <code>L.tileLayer(...)<\/code> (recuerda la <i>attribution<\/i>).<\/li>\n<li>Crea un marcador con <code>L.marker([lat, lng]).addTo(map)<\/code> y a\u00f1ade un <code>.bindPopup()<\/code> si quieres contenido emergente.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>En la documentaci\u00f3n oficial de Leaflet tienes un <a href=\"https:\/\/leafletjs.com\/examples\/quick-start\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Quick Start<\/a> muy claro con estos pasos.<\/p>\n<h2>Ejercicio<\/h2>\n<div class=\"wp-block-image\">\n<figure class=\"alignright\"><img decoding=\"async\" src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/b71b7-js56-1534075762-8.png\" alt=\"Ejercicio marcadores\" \/><\/figure>\n<\/div>\n<p>Sobre el ejemplo anterior, cambia el mapa para que:<\/p>\n<ul>\n<li>Se centre en el <b>Campus de M\u00f3stoles de la URJC<\/b> (zoom 15)<br \/>(lat: 40.3367965478043, lng: -3.874826431274414)<\/li>\n<li>Incluya un <b>marcador<\/b> en dicho Campus<\/li>\n<li>Incluya un <b>segundo marcador<\/b> en el Hospital Rey Juan Carlos (lat: 40.338759259710955, lng: -3.8707923889160156)<\/li>\n<\/ul>\n<p><b>Soluci\u00f3n: <\/b>Como suele ser habitual, podemos resolverlo de varias maneras:<\/p>\n<p>a) <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/PwZEXdL\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><b>Soluci\u00f3n 1<\/b><\/a>. Creando una nueva variable para la segunda localizaci\u00f3n y pas\u00e1ndola al constructor de <code>L.marker()<\/code>.<\/p>\n<p>b) <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/yyepGRO\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><b>Soluci\u00f3n 2<\/b><\/a>. Pasando directamente la latitud y longitud en el <code>L.marker([lat, lng])<\/code> del segundo marcador.<\/p>\n<h2>Par\u00e1metros en funciones<\/h2>\n<p>Los par\u00e1metros son los <b>valores de entrada que recibe una funci\u00f3n<\/b>. Se indican entre par\u00e9ntesis detr\u00e1s del nombre de la funci\u00f3n. Adaptaremos los ejemplos al contexto de Leaflet.<\/p>\n<h3>Par\u00e1metros simples<\/h3>\n<p>En este <a href=\"https:\/\/codepen.io\/gertrudix\/pen\/qEbpLJp\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">ejemplo con un par\u00e1metro simple<\/a>:<\/p>\n<ol>\n<li>Escribimos una funci\u00f3n que recibe un <b>texto<\/b> y devuelve un <code>popup<\/code> listo para usar: por ejemplo, <code>function popupTexto(t) { return L.popup().setContent(t); }<\/code><\/li>\n<li>Al crear el marcador, encadenamos <code>.bindPopup(popupTexto('Hola, M\u00f3stoles'))<\/code>.<\/li>\n<li>Invocamos la funci\u00f3n pasando el valor (el mensaje) que deseamos mostrar.<\/li>\n<\/ol>\n<h3>M\u00faltiples par\u00e1metros<\/h3>\n<p>Habitualmente las funciones llevan varios par\u00e1metros. En Leaflet, una funci\u00f3n puede construir un elemento del mapa con propiedades distintas. Por ejemplo, en<br \/><a href=\"https:\/\/codepen.io\/gertrudix\/pen\/jEWYXQP\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">este ejemplo<\/a> se crea un <b>circleMarker<\/b> con m\u00faltiples par\u00e1metros:<\/p>\n<ol>\n<li>Creamos la funci\u00f3n <code>creaPunto(lat, lng, texto, color)<\/code> que devuelve un <code>L.circleMarker([lat,lng], { color })<\/code> con <code>.bindPopup(texto)<\/code>.<\/li>\n<li>Declaramos las variables con los valores a pasar.<\/li>\n<li>Invocamos la funci\u00f3n con cada conjunto de par\u00e1metros que queramos (coordenadas, texto del popup y color del punto).<\/li>\n<\/ol>\n<p><b>Ejercicio con par\u00e1metros m\u00faltiples 1<\/b>Sobre la base del ejemplo anterior, pasa ahora <b>tres par\u00e1metros<\/b>: adem\u00e1s del texto y el color, pasa el <b>radio<\/b> del <code>circleMarker<\/code> para controlar su tama\u00f1o.<\/p>\n<p><i><a href=\"https:\/\/codepen.io\/gertrudix\/pen\/qEbpLQp\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n<\/a><\/i><\/p>\n<p class=\"has-small-font-size\">1. A\u00f1ade el par\u00e1metro <code>radio<\/code> en la funci\u00f3n \u00b7<br \/>2. En las opciones del <code>circleMarker<\/code> utiliza <code>{ color, radius: radio }<\/code> \u00b7<br \/>3. Declara una variable <code>miRadio<\/code> con un n\u00famero \u00b7<br \/>4. En la invocaci\u00f3n pasa el nuevo par\u00e1metro.<\/p>\n<\/div>\n<p>[\/et_pb_accordion_item][\/et_pb_accordion][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n<div class=\"pdfprnt-buttons pdfprnt-buttons-post pdfprnt-bottom-right\"><a href=\"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/posts\/76062?print=pdf\" class=\"pdfprnt-button pdfprnt-button-pdf\" target=\"_blank\" ><img decoding=\"async\" src=\"https:\/\/proyectos.comunicaciondigital.es\/wp-content\/plugins\/pdf-print\/images\/pdf.png\" alt=\"image_pdf\" title=\"View PDF\" \/><span class=\"pdfprnt-button-title pdfprnt-button-pdf-title\">Versi\u00f3n en PDF<\/span><\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>\u00bfQu\u00e9 es una variable? Una variable es un elemento que contiene informaci\u00f3n (datos) que puede ser ejecutada por el c\u00f3digo. Las variables sirven para guardar informaci\u00f3n que ser\u00e1 utilizada posteriormente. Cada variable tiene un tipo de datos (n\u00famero, cadena, fecha\u2026) Javascript es un lenguaje impl\u00edcito por lo que no necesita especificar previamente el tipo de&hellip; <a class=\"continue\" href=\"https:\/\/proyectos.comunicaciondigital.es\/en\/conceptos-basicos-poa\/\">Continua leyendo<span> Conceptos b\u00e1sicos de POO<\/span><\/a><\/p>","protected":false},"author":4,"featured_media":77769,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"<!-- wp:group {\"className\":\"atavist-title-design cover-text-simple\"} -->\n<div class=\"wp-block-group atavist-title-design cover-text-simple\"><!-- wp:heading {\"textAlign\":\"left\",\"align\":\"center\",\"className\":\"aligncenter atavist-title-h2\"} -->\n<h2 class=\"has-text-align-left aligncenter atavist-title-h2\">Variables<\/h2>\n<!-- \/wp:heading --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading -->\n<h2>\u00bfQu\u00e9 es una variable?<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:list -->\n<ul><li>Una variable es un elemento que <b>contiene informaci\u00f3n <\/b>(datos) que puede ser ejecutada por el c\u00f3digo.<\/li><li>Las variables sirven para <b>guardar<\/b> informaci\u00f3n que ser\u00e1 utilizada posteriormente. <\/li><li>Cada variable tiene un <b>tipo de datos<\/b> (n\u00famero, cadena, fecha\u2026)<\/li><li>Javascript es un <b>lenguaje impl\u00edcito<\/b> por lo que no necesita especificar previamente el tipo de dato que contiene una variable.<\/li><li>Las variables pueden cambiar de tipo de dato, pero no es recomendable.\n<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/29f3a-js30-1533981613-50.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/81227-js31-1533981745-37.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>En <a href=\"https:\/\/jsfiddle.net\/gertrudix\/2gqf548z\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">este ejemplo<\/a> x se define como una variable. Luego, asignamos a x el valor de 6:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3>Ejercicio<\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Sobre el ejemplo de creaci\u00f3n de variable anterior, modif\u00edcalo para:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ol>\n<li>Declarar e inicializar la variable x en el mismo paso\n<\/li>\n<li>Declara otra variable, y, e inicial\u00edzala con una cadena (string)\n<\/li>\n<li>Crea un encabezado de segundo nivel (h2) debajo del p\u00e1rrafo y haz que se muestre la nueva variable en \u00e9l\n<\/li>\n<\/ol>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph {\"align\":\"center\"} -->\n<p class=\"has-text-align-center\"><i><a href=\"https:\/\/jsfiddle.net\/gertrudix\/7d7rwezr\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n<\/a><\/i><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/-->\n\n<!-- wp:paragraph {\"fontSize\":\"small\"} -->\n<p class=\"has-small-font-size\">Explicaci\u00f3n:  1. Creamos un h2 vac\u00edo con un id   2. Declaramos la variable y y le damos un valor como string  3. Sobre el objeto document, aplicamos el m\u00e9todo getElementByID() para capturar el id del h2, y le pasamos con innerHTML el valor de la variable y<\/p>\n<!-- \/wp:paragraph --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3>Ejercicio<\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Abre el <a href=\"https:\/\/jsfiddle.net\/gertrudix\/orbmt32f\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><b>siguiente ejercicio<\/b><\/a> que usa variables con datos num\u00e9ricos y modif\u00edcalo para incluir el IVA en el precio total:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ol>\n<li>Crea un nuevo &lt;p&gt; con id subtotal\n<\/li>\n<li>Declarar una tercera variable llamada IVA e inicializarla con el valor 1.21\n<\/li>\n<li>A la variable total ll\u00e1mala subtotal\n<\/li>\n<li>Crea una nueva variable total que multiplique subtotal por iva\n<\/li>\n<li>Utiliza el m\u00e9todo getElementById para escribir el resultado\n<\/li>\n<\/ol>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph {\"align\":\"center\"} -->\n<p class=\"has-text-align-center\">  <!--EndFragment-->    <a href=\"https:\/\/jsfiddle.net\/gertrudix\/orbmt32f\/12\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><i>Soluci\u00f3n<\/i><\/a><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/-->\n\n<!-- wp:paragraph {\"fontSize\":\"small\"} -->\n<p class=\"has-small-font-size\">Explicaci\u00f3n:  1.Creamos el p\u00e1rrafo con el nuevo id  2.Creamos la variable IVA y le damos el valor 1.21 (para que luego haga el m\u00faltiplo sumatorio del 21%)  3.Cambiamos la variable total original a subtotal  4.Creamos la nueva variable total como la multiplicaci\u00f3n de las otras dos variables, subtotal * iva  Escribimos con getElementById().innerHTML =&nbsp; el valor con IVA<\/p>\n<!-- \/wp:paragraph --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading -->\n<h2>Alcance o \u00e1mbito de una variable<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/292c9-js32-1533982243-10.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Una variable es local normalmente en cualquier lugar en la que aparece acotada por llaves.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Se pueden tener una variable global y local que se llamen igual, pero no es recomendable, porque induce a confusi\u00f3n y hace m\u00e1s complejo trabajar con ellas.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-title-design cover-text-simple\"} -->\n<div class=\"wp-block-group atavist-title-design cover-text-simple\"><!-- wp:heading {\"textAlign\":\"left\",\"align\":\"center\",\"className\":\"aligncenter atavist-title-h2\"} -->\n<h2 class=\"has-text-align-left aligncenter atavist-title-h2\">Operadores<\/h2>\n<!-- \/wp:heading --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p>Los operadores son instrumentos b\u00e1sicos para realizar operaciones en cualquier lenguaje de programaci\u00f3n. <\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:quote -->\n<blockquote class=\"wp-block-quote\"><p>Recuerda que en Javascript el operador <b>=<\/b> se utiliza para la <b>asignaci\u00f3n<\/b> de valor a una variable. <\/p><\/blockquote>\n<!-- \/wp:quote -->\n\n<!-- wp:heading -->\n<h2>Operadores aritm\u00e9ticos<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:image {\"align\":\"right\"} -->\n<div class=\"wp-block-image\"><figure class=\"alignright\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/ec6fe-js33-1533982602-81.png\" alt=\"\"\/><\/figure><\/div>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Los operadores aritm\u00e9ticos sirven para realizar <b>manipulaciones matem\u00e1ticas<\/b> sobre el valor de las variables num\u00e9ricas.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Un operador aritm\u00e9tico siempre dar\u00e1 como <b>resultado un n\u00famero.<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Vamos a realizar algunos <b>ejercicios<\/b> para conocer<b> <\/b>su funcionamiento:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><li>\n<a href=\"https:\/\/jsfiddle.net\/gertrudix\/mektL3nu\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><b>Suma<\/b><\/a>. A partir de este c\u00f3digo, realiza la suma de dos variables. [<a href=\"https:\/\/jsfiddle.net\/gertrudix\/mektL3nu\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n<\/a>] <\/li><li>\n<b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/5xLLbkek\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Multiplicaci\u00f3n y divisi\u00f3n<\/a><\/b>. A partir de este ejemplo: a) Inicializa las dos variables d\u00e1ndoles un valor num\u00e9rico. b) Crea una tercera variable y as\u00edgnale un valor. c) Escribe sobre este texto el resultado de multiplicar x * y, y dividir el resultado por la tercera variable. [<a href=\"https:\/\/jsfiddle.net\/gertrudix\/5xLLbkek\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n<\/a>]<\/li><li>\n<a href=\"https:\/\/jsfiddle.net\/gertrudix\/a5o07731\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><b>Incremento y disminuci\u00f3n<\/b><\/a>. El incremento y disminuci\u00f3n sirven para aumentar o disminuir un n\u00famero dado. Sobre el ejemplo, vamos a restar de nuevo, con el operador de disminuci\u00f3n para que se vuelva a quedar la variable en 5. a) Crea un nuevo p\u00e1rrafo con id \u201cdisminuci\u00f3n\u201d; b) utiiza el operado de dismunici\u00f3n para x; c) crea una nueva variable que asigne el valor a x; d) escribe el resultado en el p\u00e1rrafo disminuci\u00f3n. [<a href=\"https:\/\/jsfiddle.net\/gertrudix\/a5o07731\/3\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n<\/a>]<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:image {\"align\":\"right\"} -->\n<div class=\"wp-block-image\"><figure class=\"alignright\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/aa8a3-js34-1533998119-64.png\" alt=\"Operadores aritm\u00e9ticos combinados con operador de asignaci\u00f3n.\"\/><figcaption>Operadores aritm\u00e9ticos combinados con operador de asignaci\u00f3n.<\/figcaption><\/figure><\/div>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Los operadores aritm\u00e9ticos se pueden combinar con el operador de asignaci\u00f3n.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>En <a href=\"https:\/\/www.w3schools.com\/js\/js_arithmetic.asp\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">este enlace del tutorial JS<\/a> del W3School puedes profundizar en c\u00f3mo funcionan el reto de operadores aritm\u00e9ticos.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading -->\n<h2>Operadores relacionales y condicionales<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:image {\"align\":\"right\"} -->\n<div class=\"wp-block-image\"><figure class=\"alignright\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/bb14c-js35-1533998274-68.png\" alt=\"\"\/><\/figure><\/div>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Los operadores condicionales o relacionales permiten <b>comparar n\u00fameros<\/b> y son esenciales para realizar aplicaciones complejas que se basen en el cumplimiento de condiciones<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Un operador relacional siempre dar\u00e1 como resultado un <b>valor booleano<\/b>.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Veamos algunos ejemplos de operadores relacionales:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><li>\n<b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/L40xL4hL\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Igual a<\/a> ==<\/b>. Hace una comparativa entre una sentencia y el valor esperado. Si el valor es cierto, dar\u00e1 como resultado \"true\"; en caso contrario, indicar\u00e1 \"false\".\n<\/li><li>\n<b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/sutyws4k\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Igual valor e igual tipo<\/a><\/b> ===. Como en el anterior, hace una comparativa entre una sentencia y el valor esperado, pero en este caso solo dar\u00e1 \"true\" si es igual el valor y el tipo de dato; en caso contrario dar\u00e1 \"false\". Por ejemplo, el valor 12 (number) y \"12\" (string) dar\u00edan false porque son igual valor pero distinto tipo.<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:heading -->\n<h2>Operadores l\u00f3gicos<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Los operadores relacionales sirven para realizar <b><a href=\"https:\/\/www.w3schools.com\/js\/js_comparisons.asp%20\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">operaciones l\u00f3gicas de comparaci\u00f3n<\/a><\/b> y se utilizan para tomar decisiones en los scripts.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Se utilizan valores booleanos, por lo que un operador relacional siempre dar\u00e1 como r<b>esultado un valor booleano<\/b>.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Los operadores l\u00f3gicos son:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><li>\n<a href=\"https:\/\/jsfiddle.net\/gertrudix\/819u6euw\/1\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Negaci\u00f3n l\u00f3gica<\/a>\n<\/li><li>\n<a href=\"https:\/\/jsfiddle.net\/gertrudix\/9ch9keaL\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">AND (&amp;&amp;)<\/a>\n<\/li><li>\n<a href=\"https:\/\/jsfiddle.net\/gertrudix\/onoLs4t0\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">OR (||)<\/a>\n<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/f6c21-js36-1533998879-7.png\" alt=\"Se pone el ! Delante del nombre de la variable. Retorna falso para sentencias verdaderas y verdadero para sentencias falsas. Para qu\u00e9 se usa: Cuando se necesitan evaluar expresiones complejas, y se usan tablas de verdad, con el fin de evitar incluir muchas sentencias con if anidados (permiten agrupar sentencias)\u00a0\u00a0\"\/><figcaption>Se pone el ! Delante del nombre de la variable. Retorna falso para sentencias verdaderas y verdadero para sentencias falsas. Para qu\u00e9 se usa: Cuando se necesitan evaluar expresiones complejas, y se usan tablas de verdad, con el fin de evitar incluir muchas sentencias con if anidados (permiten agrupar sentencias)&nbsp;&nbsp;<!--EndFragment--><\/figcaption><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/f0dd5-js37-1533998899-76.png\" alt=\"Operaci\u00f3n l\u00f3gica AND: Combina dos valores boolenaos que compara. Es verdad si los dos valores son verdad\u00a0\u00a0\"\/><figcaption>Operaci\u00f3n l\u00f3gica AND: Combina dos valores boolenaos que compara. Es verdad si los dos valores son verdad&nbsp;&nbsp;<!--EndFragment--><\/figcaption><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/c1aa9-js38-1533998926-94.png\" alt=\"Operaci\u00f3n l\u00f3gica OR: Combina dos valores boolenaos que compara.\u00a0 Es verdad si uno de los valores es verdad\"\/><figcaption>Operaci\u00f3n l\u00f3gica OR: Combina dos valores boolenaos que compara.&nbsp; Es verdad si uno de los valores es verdad<!--EndFragment--><\/figcaption><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:group {\"className\":\"atavist-title-design cover-text-simple\"} -->\n<div class=\"wp-block-group atavist-title-design cover-text-simple\"><!-- wp:heading {\"textAlign\":\"left\",\"align\":\"center\",\"className\":\"aligncenter atavist-title-h2\"} -->\n<h2 class=\"has-text-align-left aligncenter atavist-title-h2\">Conceptos de POO<\/h2>\n<!-- \/wp:heading --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p>La <b>POO (Programaci\u00f3n Orientada a Objetos)<\/b> es un paradigma de programaci\u00f3n que permite optimizar los procesos de programaci\u00f3n y los resultados que se obtienen con ellos. Permite pre-dise\u00f1ar objetos que son almacenados en librer\u00edas o bibliotecas para que puedan ser reutilizados por los programas sin necesidad de tener que volver a escribir las funciones necesarias cada vez que se quiere hacer uso de ellas.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Javascript es uno de los muchos lenguajes que funcionan bajo este paradigma. Dentro de las dos corrientes existentes (basarse en clases o basarse en prototipos), <b>JS corresponde al modelo basado en prototipos<\/b> en el que solo hay objetos. Otros lenguajes similares en este sentido, muy utilizados actualmente, son Python y Ruby.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading -->\n<h2>Elementos fundamentales<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:image {\"align\":\"right\"} -->\n<div class=\"wp-block-image\"><figure class=\"alignright\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/81901-js39-1533999648-35.png\" alt=\"\"\/><\/figure><\/div>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Los elementos fundamentales de la POO incorporan un n\u00famero amplio de componentes (clase, herencia, objeto, m\u00e9todo..), pero nos centraremos solo en los que resultan fundamentales para manejarnos en el entorno de trabajo de un proyecto period\u00edstico<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><li>Objetos\n<\/li><li>Eventos\n<\/li><li>Funciones\n<\/li><li>M\u00e9todos\n<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph -->\n<p><b>Objetos<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Un objeto es una entidad definida por un estado, caracterizado por un conjunto de atributos que toman valores (datos) concretos, un comportamiento definido por los m\u00e9todos, operaciones o mecanismos de interacci\u00f3n que pueden realizarse sobre \u00e9l, y una identidad que le diferencia del resto (un identificador).<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/dd704-js40-1533999786-81.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/e12a6-js41-1533999961-95.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p><b>Eventos<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Los eventos son <b>sucesos<\/b>, producidos normalmente por una acci\u00f3n del usuario, que <b>producen alg\u00fan efecto<\/b>. Por ejemplo, cuando un usuario pulsa un bot\u00f3n o hace clic sobre un enlace.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Algunos de los eventos DOM m\u00e1s habituales son:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/78189-js42-1534000073-32.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Veamos un par de ejemplos para entender c\u00f3mo funcionan:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>- <b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/fy70hq49\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Onload<\/a><\/b>. Lanza un comportamiento cuando se ha cargado la p\u00e1gina completamente.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p>- <b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/54j726os\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Onmouseover<\/a><\/b>. Cuando pasamos por encima de un elemento, se lanza el comportamiento.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p>Hay muchos otros eventos como el <i>blur<\/i> que es cuando se dispara el evento al perder el foco un elemento, o <i>On Keyup<\/i> que ejecuta el evento cuando el usuario suelta una tecla.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/1fd3d-js43-1534000563-16.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Aqu\u00ed puedes ver un ejemplo del <a href=\"https:\/\/jsfiddle.net\/gertrudix\/z3arb58b\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">funcionamiento de onkeyup<\/a>, que se utiliza en muchas ocasiones para modificar los datos de entrada en un formulario. En este caso, transforma las letras min\u00fasculas en may\u00fasculas.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p><b>Funciones<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Todo evento lleva asociado, normalmente, una <b>funci\u00f3n<\/b>. <\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Las funciones son fragmentos de c\u00f3digo que realizan alguna acci\u00f3n cuando son invocadas por un evento. Por ejemplo, cuando el usuario pulsa el bot\u00f3n, y sucede algo.&nbsp;&nbsp;<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Visto en c\u00f3digo, y explicado, ser\u00eda esto:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/2bdaa-js44-1534000890-73.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:group {\"className\":\"atavist-title-design cover-text-simple\"} -->\n<div class=\"wp-block-group atavist-title-design cover-text-simple\"><!-- wp:heading {\"textAlign\":\"left\",\"align\":\"center\",\"className\":\"aligncenter atavist-title-h2\"} -->\n<h2 class=\"has-text-align-left aligncenter atavist-title-h2\">Librer\u00edas y APIs<\/h2>\n<!-- \/wp:heading --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading -->\n<h2>Librer\u00edas y APIs<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Estos dos conceptos est\u00e1n directamente vinculados ya que, como detallaremos, las librer\u00edas son almacenes de funciones y comportamientos, y las APIs son, simplificando, las instrucciones que tenemos para utilizar dichas funciones de la librer\u00eda.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>T\u00e9cnicamente una <a href=\"http:\/\/www.4rsoluciones.com\/blog\/framework-sdk-biblioteca-api-cuales-son-las-diferencias-2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><b>librer\u00eda o biblioteca<\/b><\/a> (library) es una colecci\u00f3n de implementaciones de comportamiento, pero lo entenderemos mejor si decimos que es una larga lista de c\u00f3digo de programaci\u00f3n que incluye un amplio n\u00famero de funciones que podemos utilizar desde nuestro programa con un esfuerzo limitado.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"right\"} -->\n<div class=\"wp-block-image\"><figure class=\"alignright\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/26cfd-js48-1534007069-58.png\" alt=\"\"\/><\/figure><\/div>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Por su parte, una <b><a href=\"http:\/\/blogginzenith.zenithmedia.es\/que-es-y-como-funciona-una-api-diczionario\/%20\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">API<\/a> (<i>Aplication Programming Interface<\/i>)<\/b> es una especificaci\u00f3n formal que permite comunicar componentes de software de dos sistemas distintos. Para entendernos, es una especie de \u201csubcontrataci\u00f3n\u201d de funciones.<!--EndFragment--><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Una API es el libro de instrucciones que nos permite conocer c\u00f3mo trabajar con el <b>conjunto de funciones<\/b>, procedimientos y objetos contenidos en la librer\u00eda o biblioteca con la que vamos a trabajar. <\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Como se\u00f1ala de forma gr\u00e1fica <a href=\"https:\/\/diegolaballos.com\/podcast\/49-que-son-las-librerias-y-las-apis\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Diego Ceballos<\/a>, en un ejemplo cotidiano, una cafetera Nespresso ser\u00eda una librer\u00eda para hacer caf\u00e9 de forma r\u00e1pida, y su libro de instrucciones ser\u00eda la API.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3>Ventajas de trabajar con Librer\u00edas y APIs<\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:image {\"align\":\"right\"} -->\n<div class=\"wp-block-image\"><figure class=\"alignright\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/d68e1-js49b-1534007306-88.jpg\" alt=\"\"\/><\/figure><\/div>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Trabajar con Librer\u00edas y APIs permite aligerar el desarrollo, ya que alguien ha escrito el c\u00f3digo por nosotros para resolver muchos de las cuestiones que queremos hacer con nuestro programa. Por ejemplo, si trabajamos con la librer\u00eda de Google Maps tendremos a disposici\u00f3n numerosas funciones para dibujar el mapa o representar cosas sobre \u00e9l.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>La ventaja es que dichos elementos pueden ser invocados desde otros componentes software para acceder a servicios y realizar procesos.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Es decir, nos conectamos con ella y aprovechamos todas las posibilidades que ya se han programado en ella sin volver a escribir ese c\u00f3digo. Esto resulta muy \u00fatil.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p><b>API Keys<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Para usar una API normalmente se requiere una API Key de autenticaci\u00f3n para conectarse con el servicio. Ello permite establecer los l\u00edmites de cuota por Key y no por IP. Adem\u00e1s, esto permite comunicar al servicio con la aplicaci\u00f3n solicitante.<!--EndFragment--><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/aa8a1-js51-1534010114-55.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p><b>Obtener la API Key de Google Maps<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>En primer lugar, debemos obtener la Key API de navegador (con cuenta de Google): <\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>1.Accedemos a <a href=\"https:\/\/console.developers.google.com\/flows\/enableapi?apiid=geocoding_backend&amp;keyType=SERVER_SIDE&amp;reusekey=true&amp;hl=es-419&amp;pli=1\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Google API Console<\/a> <\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>2.Creamos un nuevo proyecto<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><li>Le damos nombre a la Clave API (no restringimos clave)\n<\/li><li>Nos dar\u00e1 la clave de API&nbsp;&nbsp;\n<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph -->\n<p><i>Nota: Restricci\u00f3n de clave. Si fuese para un proyecto real, tendr\u00edamos que restringir la clave bien por URL, direcci\u00f3n IP, o una app creada, por seguridad y evitar robos de cuota. En este caso, como es para hacer una pr\u00e1ctica, no lo haremos para no tener que realizar m\u00e1s pasos.<\/i><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p><b>L\u00edmites de cuota<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Habitualmente las API tienen un n\u00famero m\u00e1ximo de llamadas al servicio gratuitas.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>En el caso de <a href=\"https:\/\/developers.google.com\/maps\/documentation\/geocoding\/usage-limits?hl=es-419%20\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Google Maps API<\/a> el uso est\u00e1ndar gratuito est\u00e1 establecido en estos l\u00edmites:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/bbd14-js50-1534009983-71.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3>Tipos de Librer\u00edas y APIs<\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Podemos clasificar las APIs en base a la funcionalidad que aportan. Siguiendo este criterio podemos considerar, desde el punto de vista de la utilidad en proyectos period\u00edsticos, las siguientes:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><li>Para crear mapas\n<\/li><li>Parar incorporar animaciones\n<\/li><li>Para desarrollar aplicaciones\n<\/li><li>Para acceder y manipular los elementos del DOM de forma sencilla\n<\/li><li>Para trabajar con im\u00e1genes y gr\u00e1ficos\n<\/li><li>Para visualizar datos\n<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/ad4f9-js52b-1534011478-71.jpg\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>En este enlace puede verse una <a href=\"http:\/\/socialcompare.com\/en\/comparison\/javascript-graphs-and-charts-libraries\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">amplia comparativa de librer\u00edas<\/a>.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-title-design cover-text-simple\"} -->\n<div class=\"wp-block-group atavist-title-design cover-text-simple\"><!-- wp:heading {\"textAlign\":\"left\",\"align\":\"center\",\"className\":\"aligncenter atavist-title-h2\"} -->\n<h2 class=\"has-text-align-left aligncenter atavist-title-h2\">Funciones. Introducci\u00f3n<\/h2>\n<!-- \/wp:heading --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading -->\n<h2>Utilidad<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Una funci\u00f3n es un <b>bloque de c\u00f3digo que puede ser ejecutado<\/b> cuando es llamada por un evento<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Son muy \u00fatiles porque es muy habitual reutilizar c\u00f3digo con diferentes argumentos a lo largo de un programa, por lo que podemos utilizar la funci\u00f3n sin tener que escribir de nuevo el c\u00f3digo, s\u00f3lo <b>invoc\u00e1ndola <\/b> &nbsp;<!--EndFragment--><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/6f4ff-js45-1534001410-43.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Nota: Como veremos m\u00e1s adelante, los par\u00e9ntesis que van detr\u00e1s del nombre de la funci\u00f3n sirven para pasar par\u00e1metros (informaci\u00f3n) a la funci\u00f3n.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading -->\n<h2>Sintaxis<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Una funci\u00f3n se define del modo siguiente:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/4d8a2-js46-1534001534-93.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p><b>\u00bfC\u00f3mo se llama a una funci\u00f3n?<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Para <b>llamar a una funci\u00f3n<\/b> hay que invocarla en cualquier parte de la p\u00e1gina web.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Cuando se invoca una funci\u00f3n, todo el c\u00f3digo que contenga entre <b>llaves {} <\/b>se ejecuta <\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Para invocarla, basta con escribir su nombre seguido de par\u00e9ntesis<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/ae6d3-js47-1534001653-85.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p><b>Ejemplos<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Veamos algunos ejemplos explicados del uso de las funciones.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p><i><a href=\"https:\/\/jsfiddle.net\/gertrudix\/yc7n3dc3\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Ejemplo sencillo<\/a><\/i>. En este caso La funci\u00f3n, llamada cambiaTexto, escribe en el objeto documento el texto que se pasa como argumento en el m\u00e9todo write.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p>Ahora podemos hacer una variante escribiendo dentro del script, directamente la funci\u00f3n para invocarla: cambiaTexto(); y se escribir\u00e1 el texto directamente sin llamar al bot\u00f3n.<!--EndFragment--><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p><b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/wnf0v7u2\/8\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><i>Ejemplo con Mapbox<\/i><\/a><\/b>. En este caso, la funci\u00f3n nos permite devolver la Latitud-Longitud del lugar en el que pulsamos dentro de un mapa de Mapbox.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p><b>Ejercicio<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Vamos a realizar ahora un ejercicio para comprobar c\u00f3mo opera una funci\u00f3n.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ol>\n<li>Abre <a href=\"https:\/\/jsfiddle.net\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">https:\/\/jsfiddle.net\/<\/a>\n<\/li>\n<li>Escribe una funci\u00f3n llamada escribeConsola\n<\/li>\n<li>Haz que registre, en la consola, el siguiente string o cadena de texto: \u201cEsta es mi primera funci\u00f3n que aparece en la consola<\/li>\n<li>Abre la consola para comprobar el resultado\n<\/li>\n<\/ol>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph {\"align\":\"center\"} -->\n<p class=\"has-text-align-center\">  <!--EndFragment-->    <i><a href=\"https:\/\/jsfiddle.net\/gertrudix\/sgnep08t\/1\/%20\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n<\/a><\/i><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/-->\n\n<!-- wp:paragraph {\"fontSize\":\"small\"} -->\n<p class=\"has-small-font-size\">Pasos:  1. Abrimos la consola JS del navegador    2. Escribimos la funci\u00f3n  function escribreConsola()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; console.log(\u201cEsta es mi primera funci\u00f3n que aparece en la consola\u201d);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }    3. La invocamos  escribeConsola()<\/p>\n<!-- \/wp:paragraph --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:group {\"className\":\"atavist-title-design cover-text-simple\"} -->\n<div class=\"wp-block-group atavist-title-design cover-text-simple\"><!-- wp:heading {\"textAlign\":\"left\",\"align\":\"center\",\"className\":\"aligncenter atavist-title-h2\"} -->\n<h2 class=\"has-text-align-left aligncenter atavist-title-h2\">Trabajando con funciones<\/h2>\n<!-- \/wp:heading --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p>Vamos a adentrarnos en el uso de funciones. Para ello, vamos a trabajar con la <a href=\"https:\/\/developers.google.com\/maps\/showcase\/?hl=es-419\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">API de Google Maps<\/a> que es una amplia librer\u00eda dirigida a la creaci\u00f3n de complejas aplicaciones de mapas.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/91fdf-js53-1534011825-32.jpg\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:heading -->\n<h2>Crear un mapa simple incluyendo un marcador<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>La elaboraci\u00f3n de este mapa nos permitir\u00e1 comprender mejor c\u00f3mo operan las funciones.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Vamos a elaborar un <a href=\"https:\/\/jsfiddle.net\/gertrudix\/m5fbzhde\/51\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><b>mapa sencillo en el que incluiremos un marcador<\/b><\/a>:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ol>\n<li>\n<b>Creamos el c\u00f3digo html<\/b>. F\u00edjate que en el head se hace la llamada a la API. El par\u00e1metro callback ejecuta la funci\u00f3n initMap cuando se ha cargado la API. Los atributos async y defer permiten que se siga renderizando la p\u00e1gina mientras se carga la API. La key hace la llamada mediante la API Key para acceder al servicio.\n<\/li>\n<li>\n<b>Dibujamos el mapa y el marcador en el fichero JS<\/b>. Creamos una funci\u00f3n que inicializa y a\u00f1ade el mapa, con los siguientes elementos: a) Una variable que inicializamos con las coordenadas que centrar\u00e1n el mapa. b) Una variable que crea el objeto mapa, utiliza el m\u00e9todo getElemenById y le pasa dos propiedades: center y zoom (escala: cuanto m\u00e1s bajo, m\u00e1s general). Creamos una variable para incluir el marcador, inicializ\u00e1ndola con el objeto marcador, y dos propiedades: position y map<\/li>\n<\/ol>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph -->\n<p>En este enlace puedes ver el <a href=\"https:\/\/developers.google.com\/maps\/documentation\/javascript\/adding-a-google-map\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">detalle explicado de todo el procedimiento<\/a>.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading -->\n<h2>Ejercicio\n<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:image {\"align\":\"right\"} -->\n<div class=\"wp-block-image\"><figure class=\"alignright\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/b71b7-js56-1534075762-8.png\" alt=\"\"\/><\/figure><\/div>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Sobre el ejemplo anterior, cambia el mapa para que:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><li>Se centre en el Campus de M\u00f3stoles de la URJC (zoom 15)(lat: 40.3367965478043, lng: -3.874826431274414)<\/li><li>Incluya un marcador en dicho Campus\n<\/li><li>Incluir un segundo marcador en el Hospital Rey Juan Carlos que se encuentra anexo al Campus (lat: 40.338759259710955, lng: -3.8707923889160156)<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph -->\n<p><b>Soluci\u00f3n<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Como suele ser habitual, podemos resolver la cuesti\u00f3n de varias maneras. Veamos dos posibles soluciones:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>a) <a href=\"https:\/\/jsfiddle.net\/gertrudix\/1wy9t3Lt\/17\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n 1<\/a>. Creando una nueva variable y pasando el valor de esa variable al position.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p>b) <a href=\"https:\/\/jsfiddle.net\/gertrudix\/44bucps8\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n 2<\/a>. Pasando directamente la LAT-LONG a la position del segundo marcador.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading -->\n<h2>Par\u00e1metros en funciones<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Los par\u00e1metros son los <b>valores de entrada que recibe una funci\u00f3n<\/b>. Se indican entre par\u00e9ntesis detr\u00e1s del nombre de la funci\u00f3n. Veamos un ejemplo para un par\u00e1metro simple. Imaginemos una funci\u00f3n que sume dos n\u00fameros. Los par\u00e1metros de entrada ser\u00e1n los valores de los dos n\u00fameros. La salida ser\u00e1 la suma. <\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3>Par\u00e1metros simples<\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>En el siguiente ejemplo <a href=\"https:\/\/jsfiddle.net\/gertrudix\/L6t6off0\/5\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">utilizamos un par\u00e1metro simple<\/a>:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ol>\n<li>Escribimos una funci\u00f3n y declaramos, entre par\u00e9ntesis, la variable que va a recibir el valor. <\/li>\n<li>En la funci\u00f3n determinamos que escriba, en el documento, un string que incluye el valor que tome la variable <\/li>\n<li>Luego, cuando invocamos la funci\u00f3n, le damos en el par\u00e1metro, el valor que debe presentar la variable\n<\/li>\n<\/ol>\n<!-- \/wp:list -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/734e4-js57-1534076455-73.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3>M\u00faltiples par\u00e1metros<\/h3>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Habitualmente las funciones llevan varios par\u00e1metros. Los par\u00e1metros pueden incluir contenido pero tambi\u00e9n c\u00f3digo html, como en este <a href=\"https:\/\/jsfiddle.net\/gertrudix\/gsdybwxx\/12\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">ejemplo que vemos a continuaci\u00f3n<\/a>:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/a2b14-js58-1534086443-100.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:list -->\n<ol>\n<li>Creamos la funci\u00f3n, indicamos como par\u00e1metros dos variables\n<\/li>\n<li>Indicamos que escriba, en el objeto documento, la frase \u201cHola nombre\u201d incluyendo mediante html el atributo font color\n<\/li>\n<li>Declaramos las variables\n<\/li>\n<li>Invocamos la funci\u00f3n pasando como valor de los argumentos (nombre y colorTexto) los valores de las variables miNombre y miColor\n<\/li>\n<\/ol>\n<!-- \/wp:list -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p><b>Ejercicio con par\u00e1metros m\u00faltiples 1<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Sobre la base del ejemplo anterior, pasa ahora tres par\u00e1metros. Adem\u00e1s del nombre y el color, indica el tipo de letra con el atributo face.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph {\"align\":\"center\"} -->\n<p class=\"has-text-align-center\"><i><a href=\"https:\/\/jsfiddle.net\/gertrudix\/4qLjujdn\/5\/%20\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n<\/a><\/i><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/-->\n\n<!-- wp:paragraph {\"fontSize\":\"small\"} -->\n<p class=\"has-small-font-size\">&nbsp; 1.A\u00f1adimos el par\u00e1metro face en la funci\u00f3n  2.En la l\u00ednea 2 sumamos el atributo face (face=\u2019\u201d + face + \u201d\u2019)  3.En l\u00ednea 8 a\u00f1adimos la variable miFace y le asignamos un valor de tipo de letra  4.En l\u00ednea incluimos en la invocaci\u00f3n de la funci\u00f3n, el nuevo par\u00e1metro con el valor de la variable miFace&nbsp;&nbsp;<\/p>\n<!-- \/wp:paragraph --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p><b>Ejercicio con par\u00e1metros m\u00faltiples 2<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Sobre la base del ejemplo anterior, utiliza ahora dos par\u00e1metros para conseguir el siguiente resultado: <\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/c91e6-js59-1534086803-52.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph {\"align\":\"center\"} -->\n<p class=\"has-text-align-center\"><i><a href=\"https:\/\/jsfiddle.net\/gertrudix\/qjmreyns\/11\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n<\/a><\/i><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading -->\n<h2>Valores de retorno (return)<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Las funciones pueden devolver valores, a trav\u00e9s de la <b>sentencia return<\/b>. Esto es esencial, y una de sus principales utilidades ya que al invocar una funci\u00f3n se podr\u00e1n realizar acciones y ofrecer un valor como salida.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:image {\"align\":\"wide\"} -->\n<figure class=\"wp-block-image alignwide\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/57a1f-js60-1534087036-55.png\" alt=\"\"\/><\/figure>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>El s<a href=\"https:\/\/jsfiddle.net\/gertrudix\/wsfvteco\/6\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">iguiente ejemplo utiliza la sentencia return<\/a> para que devuelva el valor medio de unos n\u00fameros. Revisa el c\u00f3digo y f\u00edjate qu\u00e9 es lo que hace: <\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ol>\n<li>Creamos la funci\u00f3n, y como par\u00e1metros declaramos dos valores.Dentro de la funci\u00f3n declaramos una variable (resultado) y le asignamos la operaci\u00f3n que queremos realizar; en el ejemplo, la media de dos n\u00fameros (pero podr\u00eda ser cualquier otra)\n<\/li>\n<li>Con\u00a0 la sentencia return le pedimos que devuelva el valor de la variable (resultado)\n<\/li>\n<li>Creamos una nueva variable (miMedia) y la inicializamos con el valor de los par\u00e1metros que le pasamos a la funci\u00f3n\n<\/li>\n<li>Por \u00faltimo, le pedimos que escriba en el documento el valor de la variable (miMedia)\n<\/li>\n<\/ol>\n<!-- \/wp:list -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p><b>Ejercicio con valor de retorno<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Vamos a crear, sobre el ejercicio anterior, un funci\u00f3n con tres par\u00e1metros cuyo resultado sume el primero con el segundo y divida el resultado entre el tercero, y que lo muestre.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>El resultado se debe escribir sobre un span dentro de un p\u00e1rrafo que diga: \u201cEl resultado es: xx%\u201d<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Ideas:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><li>Cambia el nombre de la funci\u00f3n, y de la segunda variable\n<\/li><li>Modifica el c\u00e1lculo de la primera variable (resultado) para hacer el c\u00e1lculo de una regla de proporci\u00f3n\n<\/li><li>Cambia el m\u00e9todo de escritura sobre documento\n<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph {\"align\":\"center\"} -->\n<p class=\"has-text-align-center\">  <!--EndFragment-->    <i><a href=\"https:\/\/jsfiddle.net\/gertrudix\/eot0065z\/7\/%20\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Soluci\u00f3n<\/a><\/i><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/-->\n\n<!-- wp:paragraph {\"fontSize\":\"small\"} -->\n<p class=\"has-small-font-size\">&nbsp; 1.A\u00f1adimos un tercer par\u00e1metro a la funci\u00f3n (valor3)  2.En la inicializaci\u00f3n de la var resultado ponemos la operaci\u00f3n: (valor1 + valor2) \/ valor3;  3.Declaramos, fuera de la funci\u00f3n, una nueva variable y la inicializamos pasando los valores de los tres par\u00e1metros  4.Sustituimos el m\u00e9todo writte por getElemenById   5.En HTML creamos un p\u00e1rrafo con el id que corresponda para que enlace con el innerHTML&nbsp;&nbsp;<\/p>\n<!-- \/wp:paragraph --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading -->\n<h2><b>Crear un mapa con un cluster de marcadores usando la sentencia return<\/b><\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:image {\"align\":\"right\"} -->\n<div class=\"wp-block-image\"><figure class=\"alignright\"><img src=\"https:\/\/cibercambio.files.wordpress.com\/2021\/04\/b2f13-js61-1534087605-25.png\" alt=\"\"\/><\/figure><\/div>\n<!-- \/wp:image -->\n\n<!-- wp:paragraph -->\n<p>Google Maps API nos permite crear <b>cluster de marcadores<\/b> utilizando la librer\u00eda markerclusterer.js. Ello nos permite visualizar m\u00faltiples marcadores de forma agregada o separada en funci\u00f3n del nivel de zoom del mapa. <\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>En <a href=\"https:\/\/jsfiddle.net\/sbjpLf38\/17\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">este ejemplo, podemos ver el funcionamiento de la sentencia return<\/a>. La funci\u00f3n devuelve como valor un marcador cuyos par\u00e1metros toma de dos array: localizaci\u00f3n y etiqueta.<!--EndFragment--><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>En el ejemplo podr\u00e1s ver el c\u00f3digo comentado para comprender con m\u00e1s detalle c\u00f3mo funciona:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/--><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p><b>Ejercicio. Crear un mapa con un cluster de marcadores.<\/b><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Sobre el ejemplo anterior, modifica el mapa para que:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><li>Carga un cl\u00faster con cinco Campus de la URJC\n<\/li><li>Modifica los labels para que el array cargue n\u00fameros en vez de letras\n<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph -->\n<p>Utiliza estas coordenadas para situar los diferentes Campus.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><li>{lat: 40.3359104, lng: -3.87684339},\n<\/li><li>{lat: 40.282275, lng: -3.8195085},\n<\/li><li>{lat: 40.0336812, lng: -3.59396110},\n<\/li><li>{lat: 40.406084, lng: -3.61061489},\n<\/li><li>{lat: 40.4277082, lng: -3.66904735}\n<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph {\"align\":\"center\"} -->\n<p class=\"has-text-align-center\">  <!--EndFragment-->    <a href=\"https:\/\/jsfiddle.net\/gertrudix\/tdz4cf0L\/1\/%20\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\"><i>Soluci\u00f3n<\/i><\/a><\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/-->\n\n<!-- wp:paragraph {\"fontSize\":\"small\"} -->\n<p class=\"has-small-font-size\">&nbsp; 1.Centrar el mapa en las coordenadas que queremos | 2.Cambiar el zoom a 9 para ver la CAM | 3.Cambiar la var labels incorporando 12345 (o el n\u00famero de \u00edtems que incluyamos) | 4.Sustituir los valores de var locations por los que corresponda a las localizaciones de la URJC<\/p>\n<!-- \/wp:paragraph --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:heading -->\n<h2><b>Overlays sobre mapas<\/b><\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>La API de Google Maps nos permite hacer muchas otras cosas. Una que resulta muy \u00fatil es incluir <b>capas superpuestas<\/b>, lo que se conoce como <b>overlays<\/b>.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Un ejemplo son los <b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/5a0qtc9e\/2\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">Marcadores animados<\/a><\/b> (marker) <\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/-->\n\n<!-- wp:paragraph {\"fontSize\":\"small\"} -->\n<p class=\"has-small-font-size\">Prueba a cambiar los comportamientos de la animaci\u00f3n usando: DROP o BOUNCE<\/p>\n<!-- \/wp:paragraph --><\/div>\n<!-- \/wp:group -->\n\n<!-- wp:paragraph -->\n<p>Otro, la inclusi\u00f3n de <b><a href=\"https:\/\/jsfiddle.net\/gertrudix\/snsczjfL\/5\/\" target=\"_blank\" class=\"regular-link\" rel=\"noopener\">L\u00edneas<\/a><\/b> (polyline)&nbsp;&nbsp;<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:group {\"className\":\"atavist-embed\"} -->\n<div class=\"wp-block-group atavist-embed\"><!-- wp:html \/-->\n\n<!-- wp:paragraph {\"fontSize\":\"small\"} -->\n<p class=\"has-small-font-size\">Prueba a cambiar el mapa base modificando el MapTypeId: ROADMAP, SATELLITE, HYBRID, TERRAIN<\/p>\n<!-- \/wp:paragraph --><\/div>\n<!-- \/wp:group -->","_et_gb_content_width":"","footnotes":""},"categories":[221],"tags":[],"class_list":["post-76062","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-banco-conocimiento"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Conceptos b\u00e1sicos de POO - Portal de proyectos multimedia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/proyectos.comunicaciondigital.es\/en\/conceptos-basicos-poa\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Conceptos b\u00e1sicos de POO - Portal de proyectos multimedia\" \/>\n<meta property=\"og:description\" content=\"\u00bfQu\u00e9 es una variable? Una variable es un elemento que contiene informaci\u00f3n (datos) que puede ser ejecutada por el c\u00f3digo. Las variables sirven para guardar informaci\u00f3n que ser\u00e1 utilizada posteriormente. Cada variable tiene un tipo de datos (n\u00famero, cadena, fecha\u2026) Javascript es un lenguaje impl\u00edcito por lo que no necesita especificar previamente el tipo de&hellip; Continua leyendo Conceptos b\u00e1sicos de POO\" \/>\n<meta property=\"og:url\" content=\"https:\/\/proyectos.comunicaciondigital.es\/en\/conceptos-basicos-poa\/\" \/>\n<meta property=\"og:site_name\" content=\"Portal de proyectos multimedia\" \/>\n<meta property=\"article:published_time\" content=\"2018-08-10T04:28:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-19T15:24:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/proyectos.comunicaciondigital.es\/wp-content\/uploads\/2018\/08\/poo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1100\" \/>\n\t<meta property=\"og:image:height\" content=\"669\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Manuel Gertrudix Barrio\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/\"},\"author\":{\"name\":\"Manuel Gertrudix Barrio\",\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/#\\\/schema\\\/person\\\/4699e2d8a8c19b218ae2f96940a3c337\"},\"headline\":\"Conceptos b\u00e1sicos de POO\",\"datePublished\":\"2018-08-10T04:28:14+00:00\",\"dateModified\":\"2025-10-19T15:24:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/\"},\"wordCount\":3495,\"image\":{\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/poo.jpg\",\"articleSection\":[\"banco-conocimiento\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/\",\"url\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/\",\"name\":\"Conceptos b\u00e1sicos de POO - Portal de proyectos multimedia\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/poo.jpg\",\"datePublished\":\"2018-08-10T04:28:14+00:00\",\"dateModified\":\"2025-10-19T15:24:33+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/#\\\/schema\\\/person\\\/4699e2d8a8c19b218ae2f96940a3c337\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/#primaryimage\",\"url\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/poo.jpg\",\"contentUrl\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/poo.jpg\",\"width\":1100,\"height\":669,\"caption\":\"Web\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/conceptos-basicos-poa\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Conceptos b\u00e1sicos de POO\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/#website\",\"url\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/\",\"name\":\"Portal de proyectos multimedia\",\"description\":\"Grupo Ciberimaginario\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/#\\\/schema\\\/person\\\/4699e2d8a8c19b218ae2f96940a3c337\",\"name\":\"Manuel Gertrudix Barrio\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/wp-content\\\/litespeed\\\/avatar\\\/f3575d3bb447e8a94fb03b29e11fe081.jpg?ver=1779122247\",\"url\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/wp-content\\\/litespeed\\\/avatar\\\/f3575d3bb447e8a94fb03b29e11fe081.jpg?ver=1779122247\",\"contentUrl\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/wp-content\\\/litespeed\\\/avatar\\\/f3575d3bb447e8a94fb03b29e11fe081.jpg?ver=1779122247\",\"caption\":\"Manuel Gertrudix Barrio\"},\"url\":\"https:\\\/\\\/proyectos.comunicaciondigital.es\\\/en\\\/author\\\/gertrudix\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Conceptos b\u00e1sicos de POO - Portal de proyectos multimedia","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/proyectos.comunicaciondigital.es\/en\/conceptos-basicos-poa\/","og_locale":"en_GB","og_type":"article","og_title":"Conceptos b\u00e1sicos de POO - Portal de proyectos multimedia","og_description":"\u00bfQu\u00e9 es una variable? Una variable es un elemento que contiene informaci\u00f3n (datos) que puede ser ejecutada por el c\u00f3digo. Las variables sirven para guardar informaci\u00f3n que ser\u00e1 utilizada posteriormente. Cada variable tiene un tipo de datos (n\u00famero, cadena, fecha\u2026) Javascript es un lenguaje impl\u00edcito por lo que no necesita especificar previamente el tipo de&hellip; Continua leyendo Conceptos b\u00e1sicos de POO","og_url":"https:\/\/proyectos.comunicaciondigital.es\/en\/conceptos-basicos-poa\/","og_site_name":"Portal de proyectos multimedia","article_published_time":"2018-08-10T04:28:14+00:00","article_modified_time":"2025-10-19T15:24:33+00:00","og_image":[{"width":1100,"height":669,"url":"https:\/\/proyectos.comunicaciondigital.es\/wp-content\/uploads\/2018\/08\/poo.jpg","type":"image\/jpeg"}],"author":"Manuel Gertrudix Barrio","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/#article","isPartOf":{"@id":"https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/"},"author":{"name":"Manuel Gertrudix Barrio","@id":"https:\/\/proyectos.comunicaciondigital.es\/#\/schema\/person\/4699e2d8a8c19b218ae2f96940a3c337"},"headline":"Conceptos b\u00e1sicos de POO","datePublished":"2018-08-10T04:28:14+00:00","dateModified":"2025-10-19T15:24:33+00:00","mainEntityOfPage":{"@id":"https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/"},"wordCount":3495,"image":{"@id":"https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/#primaryimage"},"thumbnailUrl":"https:\/\/proyectos.comunicaciondigital.es\/wp-content\/uploads\/2018\/08\/poo.jpg","articleSection":["banco-conocimiento"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/","url":"https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/","name":"Conceptos b\u00e1sicos de POO - Portal de proyectos multimedia","isPartOf":{"@id":"https:\/\/proyectos.comunicaciondigital.es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/#primaryimage"},"image":{"@id":"https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/#primaryimage"},"thumbnailUrl":"https:\/\/proyectos.comunicaciondigital.es\/wp-content\/uploads\/2018\/08\/poo.jpg","datePublished":"2018-08-10T04:28:14+00:00","dateModified":"2025-10-19T15:24:33+00:00","author":{"@id":"https:\/\/proyectos.comunicaciondigital.es\/#\/schema\/person\/4699e2d8a8c19b218ae2f96940a3c337"},"breadcrumb":{"@id":"https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/#primaryimage","url":"https:\/\/proyectos.comunicaciondigital.es\/wp-content\/uploads\/2018\/08\/poo.jpg","contentUrl":"https:\/\/proyectos.comunicaciondigital.es\/wp-content\/uploads\/2018\/08\/poo.jpg","width":1100,"height":669,"caption":"Web"},{"@type":"BreadcrumbList","@id":"https:\/\/proyectos.comunicaciondigital.es\/conceptos-basicos-poa\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/proyectos.comunicaciondigital.es\/"},{"@type":"ListItem","position":2,"name":"Conceptos b\u00e1sicos de POO"}]},{"@type":"WebSite","@id":"https:\/\/proyectos.comunicaciondigital.es\/#website","url":"https:\/\/proyectos.comunicaciondigital.es\/","name":"Portal de proyectos multimedia","description":"Grupo Ciberimaginario","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/proyectos.comunicaciondigital.es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/proyectos.comunicaciondigital.es\/#\/schema\/person\/4699e2d8a8c19b218ae2f96940a3c337","name":"Manuel Gertrudix Barrio","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/proyectos.comunicaciondigital.es\/wp-content\/litespeed\/avatar\/f3575d3bb447e8a94fb03b29e11fe081.jpg?ver=1779122247","url":"https:\/\/proyectos.comunicaciondigital.es\/wp-content\/litespeed\/avatar\/f3575d3bb447e8a94fb03b29e11fe081.jpg?ver=1779122247","contentUrl":"https:\/\/proyectos.comunicaciondigital.es\/wp-content\/litespeed\/avatar\/f3575d3bb447e8a94fb03b29e11fe081.jpg?ver=1779122247","caption":"Manuel Gertrudix Barrio"},"url":"https:\/\/proyectos.comunicaciondigital.es\/en\/author\/gertrudix\/"}]}},"_links":{"self":[{"href":"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/posts\/76062","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/comments?post=76062"}],"version-history":[{"count":23,"href":"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/posts\/76062\/revisions"}],"predecessor-version":[{"id":82332,"href":"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/posts\/76062\/revisions\/82332"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/media\/77769"}],"wp:attachment":[{"href":"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/media?parent=76062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/categories?post=76062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/proyectos.comunicaciondigital.es\/en\/wp-json\/wp\/v2\/tags?post=76062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}