{"id":377,"date":"2022-10-04T15:07:14","date_gmt":"2022-10-04T13:07:14","guid":{"rendered":"http:\/\/quadern-programacio.recursos.uoc.edu\/?page_id=377"},"modified":"2022-10-04T15:07:14","modified_gmt":"2022-10-04T13:07:14","slug":"3-6-funciones","status":"publish","type":"page","link":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/3-6-funciones\/","title":{"rendered":"3.6. Funciones"},"content":{"rendered":"<p>Adem\u00e1s de las variables, otra herramienta que nos va a resultar de gran ayuda a la hora de organizar nuestro c\u00f3digo y hacerlo m\u00e1s modular son las funciones. Ya hemos utilizado unas cuantas funciones que P5 nos ofrece, como pueden ser <span class=\"courier\">createCanvas()<\/span>, <span class=\"courier\">ellipse()<\/span> o <span class=\"courier\">fill()<\/span>. A partir de ahora seremos capaces tambi\u00e9n de crear nuestras propias funciones cuando necesitemos realizar tareas m\u00e1s complejas que las que las funciones de P5 nos permiten realizar. Imaginemos, por ejemplo, que queremos dibujar un ojo como el de la siguiente imagen:<\/p>\n<figure id=\"attachment_98\" aria-describedby=\"caption-attachment-98\" style=\"width: 531px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" class=\"size-full wp-image-98\" src=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_032.jpg\" alt=\"\" width=\"531\" height=\"540\" srcset=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_032.jpg 531w, \/wp-content\/uploads\/2022\/10\/PID_00290094_032-295x300.jpg 295w\" sizes=\"(max-width: 531px) 100vw, 531px\" \/><figcaption id=\"caption-attachment-98\" class=\"wp-caption-text\">Figura 32. Un ojo dibujado en P5.js<br \/>Fuente: elaboraci\u00f3n propia.<\/figcaption><\/figure>\n<p>Desafortunadamente, no existe una funci\u00f3n en P5 <span class=\"courier\">eye()<\/span> que nos permita dibujar directamente un ojo, pero s\u00ed que conocemos todas las funciones necesarias para dibujar todas sus partes.<\/p>\n<p>Ser\u00eda algo as\u00ed:<\/p>\n<figure id=\"attachment_100\" aria-describedby=\"caption-attachment-100\" style=\"width: 800px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" class=\"size-full wp-image-100\" src=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_033.jpg\" alt=\"\" width=\"800\" height=\"451\" srcset=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_033.jpg 800w, \/wp-content\/uploads\/2022\/10\/PID_00290094_033-300x169.jpg 300w, \/wp-content\/uploads\/2022\/10\/PID_00290094_033-768x433.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-100\" class=\"wp-caption-text\">Figura 33. El c\u00f3digo que dibuja el ojo<br \/>Fuente: elaboraci\u00f3n propia.<\/figcaption><\/figure>\n<p>Hemos definido unas variables para el tama\u00f1o y la posici\u00f3n del ojo, y luego hemos dibujado y rellenado de color las distintas elipses que definen su dibujo. Adem\u00e1s, los tama\u00f1os de las elipses son proporcionales al tama\u00f1o total del ojo, por lo que, si cambiamos la variable <span class=\"courier\">eyeSize<\/span>, todos los dem\u00e1s elementos variar\u00e1n en funci\u00f3n de esta.<\/p>\n<p>Es ahora cuando podemos recopilar todo este c\u00f3digo que nos dibuja el ojo y meterlo en nuestra propia funci\u00f3n:<\/p>\n<p><figure id=\"attachment_102\" aria-describedby=\"caption-attachment-102\" style=\"width: 800px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" class=\"size-full wp-image-102\" src=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_034.jpg\" alt=\"\" width=\"800\" height=\"367\" srcset=\"\/wp-content\/uploads\/2022\/10\/PID_00290094_034.jpg 800w, \/wp-content\/uploads\/2022\/10\/PID_00290094_034-300x138.jpg 300w, \/wp-content\/uploads\/2022\/10\/PID_00290094_034-768x352.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-102\" class=\"wp-caption-text\">Figura 34. La funci\u00f3n <span class=\"courier\">eye()<\/span><br \/>Fuente: elaboraci\u00f3n propia.<\/figcaption><\/figure>Al crear la funci\u00f3n <span class=\"courier\">eye()<\/span>, que vive en el mismo nivel que <span class=\"courier\">setup()<\/span> o <span class=\"courier\">draw()<\/span>, podemos simplemente <strong>invocarla<\/strong> desde dentro del <span class=\"courier\">draw()<\/span> y todo el c\u00f3digo que tenemos dentro de <span class=\"courier\">eye()<\/span> se ejecutar\u00e1 como si estuviese dentro del <span class=\"courier\">draw()<\/span> tambi\u00e9n. Cuando se ejecuta el c\u00f3digo y llega a la l\u00ednea 14, donde est\u00e1 <span class=\"courier\">eye()<\/span>, salta a la l\u00ednea 18 y ejecuta todo el c\u00f3digo de la funci\u00f3n hasta que llega al final de esta. Luego retoma por donde se qued\u00f3 (l\u00ednea 15) y contin\u00faa el programa.<\/p>\n<p>Como ya habr\u00e9is podido observar, para definir una funci\u00f3n seguimos la siguiente estructura:<\/p>\n<pre>function miFuncion() {\r\n    \/\/ Aqu\u00ed dentro todo lo que hace mi funci\u00f3n\r\n}<\/pre>\n<p>Primero necesitamos la palabra clave <span class=\"courier\">function<\/span> para que P5 sepa que vamos a definir una funci\u00f3n; a continuaci\u00f3n, el nombre que le queramos dar a nuestra funci\u00f3n seguido de unos par\u00e9ntesis y unas llaves dentro de las cuales estar\u00e1 el <strong>cuerpo<\/strong> de nuestra funci\u00f3n, el c\u00f3digo que queremos que ejecute.<\/p>\n<p>Y para <strong>invocarla <\/strong>desde otra parte del c\u00f3digo \u00fanicamente necesitaremos escribir <span class=\"courier\">miFuncion()<\/span>.<\/p>\n<p>Este tipo de funciones nos pueden servir para organizar mejor nuestro c\u00f3digo y para <strong>encapsular<\/strong> funcionalidades complejas. Sin embargo, tal y como la hemos definido, nuestra funci\u00f3n <span class=\"courier\">eye()<\/span> no es demasiado \u00fatil. Siempre dibujar\u00e1 el ojo en la misma posici\u00f3n, con el mismo tama\u00f1o y los mismos colores. Nos ser\u00eda de gran utilidad poder crear una funci\u00f3n como <span class=\"courier\">ellipse()<\/span>, a la que le podemos dar una serie de <strong>par\u00e1metros<\/strong> que personalizan c\u00f3mo y d\u00f3nde ha de dibujarse la elipse. Para ello, en la siguiente secci\u00f3n veremos c\u00f3mo a\u00f1adir par\u00e1metros a nuestras propias funciones.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Adem\u00e1s de las variables, otra herramienta que nos va a resultar de gran ayuda a la hora de organizar nuestro c\u00f3digo y hacerlo m\u00e1s modular son las funciones. Ya hemos utilizado unas cuantas funciones que P5 nos ofrece, como pueden ser , o . A partir de ahora seremos capaces tambi\u00e9n de crear nuestras propias [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages\/377"}],"collection":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/comments?post=377"}],"version-history":[{"count":1,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages\/377\/revisions"}],"predecessor-version":[{"id":378,"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/pages\/377\/revisions\/378"}],"wp:attachment":[{"href":"http:\/\/quadern-programacio.recursos.uoc.edu\/es\/wp-json\/wp\/v2\/media?parent=377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}