{"id":219,"date":"2012-08-20T07:22:12","date_gmt":"2012-08-20T06:22:12","guid":{"rendered":"http:\/\/www.tyflosaccessiblesoftware.com\/programaraciegas\/?p=219"},"modified":"2012-08-20T07:22:12","modified_gmt":"2012-08-20T06:22:12","slug":"estructuras-condicionales-en-applescript","status":"publish","type":"post","link":"https:\/\/programaraciegas.net\/?p=219","title":{"rendered":"Estructuras condicionales en AppleScript"},"content":{"rendered":"<p>En AppleScript, al igual que en otros lenguajes de programaci\u00f3n, existen ciertas estructuras de c\u00f3digo para controlar el flujo de ejecuci\u00f3n de nuestro programa. Recordemos que un script es un programa con ciertas caracter\u00edsticas especiales.<\/p>\n<p>La estructura m\u00e1s simple es la <em>sentencia<\/em> que se puede resumir como una orden que indica al programador a su programa. Un ejemplo ser\u00eda la l\u00ednea de c\u00f3digo con la sentencia <strong>say<\/strong> que hemos visto en el ejemplo de Hola mundo de esta serie de art\u00edculos.<\/p>\n<p>Otro ejemplo ser\u00eda la l\u00ednea de asignaci\u00f3n de un valor a una variable.<\/p>\n<h2>Estructuras condicionales<\/h2>\n<p>Hasta ahora s\u00f3lo sabemos crear AppleScripts que ejecuten una sentencia detr\u00e1s de otra, almacenando informaci\u00f3n y manipul\u00e1ndola. \u00bfPero podemos controlar a\u00fan m\u00e1s el flujo de ejecuci\u00f3n?<\/p>\n<p>Imaginemos que un trozo de nuestro script se ejecute a partir de una hora determinada, por ejemplo, un aviso para el usuario. Lo primero que debemos hacer es obtener la hora actual. Este ejemplo nos explica c\u00f3mo hacerlo:<\/p>\n<p><code><br \/>\n(*<br \/>\n\tEjemplo para obtener la hora actual<br \/>\n*)<br \/>\non run<br \/>\n\tset fecha to current date<br \/>\n\tset hora to fecha's hours<br \/>\nend run<br \/>\n<\/code><\/p>\n<p>En la variable <em>hora<\/em> se almacena el valor num\u00e9rico de la hora actual.<\/p>\n<h3>Estructura <strong>if then<\/strong><\/h3>\n<p>Para poder ejecutar un trozo de c\u00f3digo si se cumple una condici\u00f3n debemos utilizar una estructura condicional. La estructura condicional m\u00e1s b\u00e1sica, y com\u00fan a muchos lenguajes de programaci\u00f3n, es la estructura <strong>if-then<\/strong>. La traducci\u00f3n al castellano de <span lang=\"en\">if, then<\/span> es <em>si, entonces&#8230;<\/em>.<\/p>\n<p>Veamos su sintaxis en AppleScript para entenderla mejor:<\/p>\n<p><strong>if<\/strong> condici\u00f3n a cumplir <strong>then<\/strong><br \/>c\u00f3digo a ejecutar<br \/><strong>end if<\/strong><\/p>\n<p>En la condici\u00f3n a cumplir se debe indicar una comparaci\u00f3n u operaci\u00f3n que devuelva un valor verdadero o falso. Ejemplo de esto son operaciones comparativas del tipo <em>A < B<\/em>, <em>A = B<\/em>, <em>Nombre = \u00abJonathan\u00bb<\/em><\/p>\n<p>Ampliemos nuestro ejemplo anterior para dar un mensaje por voz si la hora es mayor o igual a siete. El ejemplo quedar\u00eda as\u00ed:<\/p>\n<p><code><br \/>\n(*<br \/>\n\tEjemplo para dar un aviso seg\u00fan la hora<br \/>\n*)<br \/>\non run<br \/>\n\t-- obtenemos la fecha<br \/>\n\tset fecha to current date<br \/>\n\tset hora to fecha's hours<br \/>\n\t-- seg\u00fan la hora damos el aviso<br \/>\n\tif hora >= 7 then<br \/>\n\t\tsay \"\u00a1Despierta! Ya es tarde\"<br \/>\n\tend if<br \/>\nend run<br \/>\n<\/code><\/p>\n<p>En este ejemplo vemos otra forma de incluir comentarios: escribiendo dos caracteres de gui\u00f3n consecutivos (-) indicamos que lo que hay a la derecha de esa l\u00ednea es un comentario de c\u00f3digo. Es una forma de incluir comentarios de forma r\u00e1pida.<\/p>\n<h3>Estructura <strong>if then else<\/strong><\/h3>\n<p>El ejemplo anterior s\u00f3lo nos avisar\u00e1 si son las 7 o m\u00e1s tarde pero no har\u00e1 nada si es antes de las siete. A veces nos interesa realizar operaciones distintas tanto si se cumple la condici\u00f3n como si se cumple lo contrario. Una forma de hacer esto ser\u00eda declarar dos estructuras <em>if then<\/em> con condiciones contrarias. Un ejemplo de esto ser\u00eda:<\/p>\n<p><code><br \/>\n(*<br \/>\n\tEjemplo 2 para dar un aviso seg\u00fan la hora<br \/>\n*)<br \/>\non run<br \/>\n\t-- obtenemos la fecha<br \/>\n\tset fecha to current date<br \/>\n\tset hora to fecha's hours<br \/>\n\t-- seg\u00fan la hora damos el aviso<br \/>\n\tif hora >= 7 then<br \/>\n\t\tsay \"\u00a1Despierta! Ya es tarde\"<br \/>\n\tend if<br \/>\n\t\tif hora < 7 then\n\t\tsay \"Todav\u00eda es temprano. Aprovecha.\"\n\tend if\nend run \n<\/code><\/p>\n<p>Aunque esta soluci\u00f3n pueda considerarse v\u00e1lida resulta poco eficiente y complica el c\u00f3digo. Es poco eficiente porque para hacer una acci\u00f3n u otra realiza dos comparaciones. El c\u00f3digo resulta m\u00e1s confuso porque ambas estructuras resultan iguales salvo por un signo matem\u00e1tico pudiendo provocar la confusi\u00f3n del programador.<\/p>\n<p>AppleScript, como otros lenguajes, proporciona una soluci\u00f3n elegante para cuando queremos ejecutar un trozo de c\u00f3digo tanto para cuando se cumple una condici\u00f3n como para cuando se cumple la contraria. Veamos el ejemplo con esta nueva estructura condicional mejorada:<\/p>\n<p><code><br \/>\n(*<br \/>\n\tEjemplo 3 para dar un aviso seg\u00fan la hora<br \/>\n*)<br \/>\non run<br \/>\n\t-- obtenemos la fecha<br \/>\n\tset fecha to current date<br \/>\n\tset hora to fecha's hours<br \/>\n\t-- seg\u00fan la hora damos el aviso<br \/>\n\tif hora >= 7 then<br \/>\n\t\tsay \"\u00a1Despierta! Ya es tarde\"<br \/>\n\telse<br \/>\n\t\tsay \"Todav\u00eda es temprano. Aprovecha.\"<br \/>\n\tend if<br \/>\nend run<br \/>\n<\/code><\/p>\n<p>Como se ve en el c\u00f3digo aparece la palabra reservada del lenguaje <strong>else<\/strong>. Esta part\u00edcula nos permite incluir una separaci\u00f3n en la estructura condicional para indicar que el c\u00f3digo a continuaci\u00f3n se ejecutar\u00e1 s\u00f3lo si no se cumple la condici\u00f3n. La sintaxis completa es:<\/p>\n<p><strong>if<\/strong> condici\u00f3n a cumplir <strong>then<\/strong><br \/>c\u00f3digo a ejecutar cuando se cumple la condici\u00f3n<br \/><strong>else<\/strong><br \/>c\u00f3digo a ejecutar si no se cumple la condici\u00f3n<br \/><strong>end if<\/strong><\/p>\n<p>Ahora podemos crear scripts m\u00e1s complejos que realicen operaciones seg\u00fan se cumplan o no ciertas condiciones.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En AppleScript, al igual que en otros lenguajes de programaci\u00f3n, existen ciertas estructuras de c\u00f3digo para controlar el flujo de ejecuci\u00f3n de nuestro programa. Recordemos que un script es un programa con ciertas caracter\u00edsticas especiales. La estructura m\u00e1s simple es la sentencia que se puede resumir como una orden que indica al programador a su &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/programaraciegas.net\/?p=219\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \u00abEstructuras condicionales 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],"tags":[83,84,150,87],"class_list":["post-219","post","type-post","status-publish","format-standard","hentry","category-applescript","tag-applescript-2","tag-curso","tag-funciones","tag-programacion-2"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/219","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=219"}],"version-history":[{"count":0,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/219\/revisions"}],"wp:attachment":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}