{"id":566,"date":"2018-07-24T09:00:02","date_gmt":"2018-07-24T08:00:02","guid":{"rendered":"http:\/\/www.programaraciegas.net\/?p=566"},"modified":"2018-07-21T07:18:38","modified_gmt":"2018-07-21T06:18:38","slug":"como-crear-nuestras-propias-funciones-en-applescript","status":"publish","type":"post","link":"https:\/\/programaraciegas.net\/?p=566","title":{"rendered":"C\u00f3mo crear nuestras propias funciones en AppleScript"},"content":{"rendered":"<p>Dentro de cualquier lenguaje de programaci&oacute;n es necesario utilizar alguna caracter&iacute;stica del lenguaje que permita modularizar el c&oacute;digo para que pueda ser reutilizado, sea m&aacute;s sencillo de leer y mantener y est&eacute; mejor estructurado dentro del fichero de c&oacute;digo que lo contiene. En AppleScript esto se consigue utilizando funciones o subrutinas.<\/p>\n<p>Una funci&oacute;n o subrutina en un lenguaje de programaci&oacute;n consiste en un bloque de c&oacute;digo que puede ser ejecutado desde otras funciones o subrutinas. Es como un peque&ntilde;o programa dentro de un programa m&aacute;s grande.<\/p>\n<p>La ejecuci&oacute;n de una funci&oacute;n o subrutina puede ser modificada gracias a que podemos enviarle par&aacute;metros. Por ejemplo, imaginemos una funci&oacute;n que calcula la suma de dos n&uacute;meros cualesquiera. Los par&aacute;metros para dicha funci&oacute;n ser&iacute;an esos dos n&uacute;meros cualesquiera.<\/p>\n<p>Las funciones o subrutinas pueden devolver un valor, por ejemplo el resultado de la suma de dos n&uacute;meros.<\/p>\n<h2>Creaci&oacute;n simple de una funci&oacute;n o subrutina<\/h2>\n<p>Ya hemos visto la creaci&oacute;n y uso de funciones y subrutinas con AppleScript en otros art&iacute;culos pero ahora lo vamos a ver con m&aacute;s detalle.<\/p>\n<p>Para crear una funci&oacute;n o subrutina utilizamos el comando <strong>on<\/strong> seguido del nombre que queramos darle a nuestra subrutina. El nombre de toda subrutina en AppleScript debe acabar con los s&iacute;mbolos de abre y cierra par&eacute;ntesis <em>( )<\/em> ya que entre estos par&eacute;ntesis es donde ir&aacute;n, si son necesarios, los par&aacute;metros que pasaremos a la subrutina.<\/p>\n<p>A continuaci&oacute;n del nombre de la funci&oacute;n deberemos ir a la siguiente l&iacute;nea para comenzar el bloque de c&oacute;digo a ejecutar dentro de la subrutina y por &uacute;ltimo indicamos el fin de la subrutina con el comando <strong>end<\/strong> seguido del nombre de nuestra subrutina pero esta vez sin los par&eacute;ntesis para par&aacute;metros.<\/p>\n<p><code><br \/>\non miFuncion()<br \/>\nsay \"Esta es mi funci\u00f3n\"<br \/>\nend miFuncion<br \/>\n<\/code><\/p>\n<h2>Llamando a una funci&oacute;n para ser ejecutada<\/h2>\n<p>Para ejecutar una funci&oacute;n simplemente debemos llamarla con su nombre seguido de los par&aacute;metros que necesite encerrados entre par&eacute;ntesis. Si no requiere ning&uacute;n par&aacute;metro simplemente deberemos usar los par&eacute;ntesis vac&iacute;os.<\/p>\n<p>Veamos un ejemplo simple en el que desde el evento <strong>run<\/strong> de nuestro script llamamos a nuestra funci&oacute;n <em>saluda()<\/em>.<\/p>\n<p><code><br \/>\non saluda()<br \/>\n\t\tsay \"Hola a todos\"<br \/>\nend saluda<\/p>\n<p>on run<br \/>\n\tsaluda()<br \/>\nend run<br \/>\n<\/code><\/p>\n<h2>Pasando par&aacute;metros a nuestra funci&oacute;n<\/h2>\n<p>Para pasar par&aacute;metros a una funci&oacute;n simplemente debemos declararlos a la hora de definir nuestra funci&oacute;n con el comando <strong>on<\/strong> colocando cada par&aacute;metro dentro de los par&eacute;ntesis separados por el caracter <em>coma<\/em> (,).<\/p>\n<p>Veamos un ejemplo muy simple de una funci&oacute;n verbalizaSuma<\/p>\n<p><code><br \/>\non verbalizaSuma(num1, num2)<br \/>\n\tset resultado to num1 + num2<br \/>\n\tsay resultado<br \/>\nend suma<br \/>\n<\/code><\/p>\n<p>Para poder ejecutar nuestra funci&oacute;n deberemos llamarla indicando dos n&uacute;meros como par&aacute;metros.<\/p>\n<p>El ejemplo completo ser&iacute;a el siguiente:<\/p>\n<p><code><br \/>\non verbalizaSuma(num1, num2)<br \/>\n\tset resultado to num1 + num2<br \/>\n\tsay resultado<br \/>\nend verbalizaSuma<\/p>\n<p>on run<br \/>\n\tverbalizaSuma(32, 23)<br \/>\nend run<br \/>\n<\/code><\/p>\n<h2>Devolviendo un resultado desde nuestra funci&oacute;n<\/h2>\n<p>Uno de los objetivos m&aacute;s importantes de las subrutinas o funciones es la de calcular un resultado seg&uacute;n los valores que se le hayan pasado como par&aacute;metros. Para ello la funci&oacute;n nos tiene que devolver un resultado.<\/p>\n<p>En AppleScript utilizamos el comando <strong>return<\/strong> para devolver un resultado. Hay que tener cuidado ya que cualquier c&oacute;digo que est&eacute; despu&eacute;s del comando <strong>return<\/strong> no se ejecutar&aacute;. Veamos el siguiente ejemplo:<\/p>\n<p><code><br \/>\non resta(num1, num2)<br \/>\n\treturn num1 - num2<br \/>\n\tsay \"Este mensaje nunca se leer\u00e1\"<br \/>\nend resta<br \/>\n<\/code><\/p>\n<p>Reescribamos nuestro ejemplo de la suma para que en lugar de verbalizaSuma utilicemos una funci&oacute;n m&aacute;s gen&eacute;rica la cual s&oacute;lo calcular&aacute; la suma de dos n&uacute;meros. El ejemplo quedar&iacute;a as&iacute;:<\/p>\n<p><code><br \/>\non suma(num1, num2)<br \/>\n\treturn num1 + num2<br \/>\nend suma<\/p>\n<p>on run<br \/>\n\tsay \"El resultado de sumar 22 y 33 es \" & suma(22, 33)<br \/>\nend run<br \/>\n<\/code><\/p>\n<p>Fijaos que la llamada a la funci&oacute;n <em>suma()<\/em> se ha indicado como un valor m&aacute;s de la cadena de texto que se va a verbalizar. Esto se debe a que cualquier llamada a una funci&oacute;n se resuelve antes que el c&oacute;digo en el que se encuentra la llamada.<\/p>\n<h2>Modularizar es bueno<\/h2>\n<p>Gracias a la posibiilidad de crear nuestras propias subrutinas o funciones podemos crear nuestra propia librer&iacute;a de funciones para resolver tareas como por ejemplo saber si VoiceOver est&aacute; en ejecuci&oacute;n, enviar un correo electr&oacute;nico con una sola l&iacute;nea de c&oacute;digo, cambiar aspectos de la interfaz gr&aacute;fica de forma m&aacute;s sencilla, etc. Estas subrutinas pueden ser almacenadas en un fichero de c&oacute;digo a parte y s&oacute;lo copiar y pegar en el fichero de script que estemos trabajando aquellas funciones que vayamos a utilizar. De esta forma nuestro c&oacute;digo ser&aacute; m&aacute;s sencillo de leer y mantener.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dentro de cualquier lenguaje de programaci&oacute;n es necesario utilizar alguna caracter&iacute;stica del lenguaje que permita modularizar el c&oacute;digo para que pueda ser reutilizado, sea m&aacute;s sencillo de leer y mantener y est&eacute; mejor estructurado dentro del fichero de c&oacute;digo que lo contiene. En AppleScript esto se consigue utilizando funciones o subrutinas. Una funci&oacute;n o subrutina &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/programaraciegas.net\/?p=566\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \u00abC\u00f3mo crear nuestras propias funciones en AppleScript\u00bb<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[80,6],"tags":[83,150,299],"class_list":["post-566","post","type-post","status-publish","format-standard","hentry","category-applescript","category-programacion","tag-applescript-2","tag-funciones","tag-subrutinas"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=566"}],"version-history":[{"count":0,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/566\/revisions"}],"wp:attachment":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}