Gonduana

Contenidos para traductores

  • Blog
  • Empieza por aquí
    • Encuesta: coger
    • Encuesta: ratón o mouse
    • Artículos más leídos
    • Vídeos más vistos
    • Gonduana en las redes sociales
    • ¿Quieres saber más sobre mí?
  • Recursos
    • Software para traductores
    • Hardware para traductores
    • Internet para traductores
    • WordPress para traductores
  • Sobre mí
  • Servicios
  • Contacto

Teoría y práctica de las funciones de AutoHotkey

Publicado el 22/agosto/2017 por Jesús Prieto

funciones de AutoHotkey

Las funciones de AutoHotkey son muy útiles para programar. En este artículo veremos algunos ejemplos y las posibilidades que tienes con las funciones.

Subrutinas de AutoHotkey

Antes de entrar en las funciones de AutoHotkey, veremos rápidamente las subrutinas, ya que pueden entenderse como un caso simplificado de las funciones.

Una subrutina en cualquier lenguaje de programación es un trozo de código independiente que se ejecuta cuando se la llama y, cuando termina, vuelve al punto que la llamó.

Gráficamente, se puede explicar una subrutina así:

subrutina de AutoHotkey

En algún punto del código se llama a la subrutina, se ejecuta el código de la subrutina y, cuando finaliza la subrutina, se vuelve al punto que llamó a la subrutina.

En AutoHotkey, las subrutinas se llaman con la función Gosub, seguida del nombre de la subrutina.

La subrutina en sí empieza con su nombre, seguido del signo de dos puntos (:) y, finalmente, el código que necesites.

Por ejemplo, si quieres sumar dos números a y b cada vez que pulses la tecla F12, podrías conseguirlo con este sencillo código de AutoHotkey:

F12::
	a:=3
	b:=7
	Gosub sumar
	MsgBox La suma es = %suma%
Return

sumar:
	suma:= a+b
Return

La línea 4 llama a la subrutina sumar.

La subrutina sumar empieza en la línea 8 y termina con la línea Return, momento en que devuelve el control a la línea 4. Como no hay que hacer nada más en esta línea, se ejecuta la siguiente línea (5).

Al pulsar F12, se mostrará el siguiente cuadro de diálogo:

subrutina sumar en AutoHotkey

Nada impide tener todas las subrutinas que necesites en tu macro de AutoHotkey. Por ejemplo, aquí tienes una subrutina sumar y otra multiplicar:

F12::
	a:=3
	b:=7
	Gosub sumar
	Gosub multiplicar
	MsgBox La suma es = %suma%`nEl producto es = %producto%
Return

sumar:
	suma:= a+b
Return

multiplicar:
	producto:= a*b
Return

Al pulsar F12, se mostrará el siguiente cuadro de diálogo:

subrutina sumar y multiplicar en AutoHotkey

Evidentemente, estas subrutinas dadas como ejemplos son muy sencillas, pero puedes complicarlas todo lo que quieras.

En ocasiones, las subrutinas se quedan «cortas» para lo que quieres conseguir con la macro de AutoHotkey y es mejor emplear las funciones, que son mucho más potentes, como veremos en la siguiente sección.

⁂

Funciones de AutoHotkey

Las funciones más sencillas son muy similares a las subrutinas de AutoHotkey.

1. Función sencilla

Por ejemplo, para sumar 3 y 7 al pulsar F12 con una función sencilla de AutoHotkey sería así:

F12::
	sumar()
Return

sumar()
{
	a:=3
	b:=7
	suma:=a+b
	MsgBox La suma es = %suma%
	Return
}

Nota: el nombre de la función es independiente de las mayúsculas y minúsculas; es decir, se puede llamar a la función sumar(), con Sumar() o con SUMAR(), por ejemplo.

MUY IMPORTANTE: no hay ningún espacio entre el nombre de la función y el paréntesis de apertura (líneas 2 y 5).

La función termina con la línea Return (línea 11) o con el símbolo de cierre de llaves (línea 12), lo que primero se encuentre.

Como ves, esta sencilla función no es muy diferente de las subrutinas vistas al principio.

Pero lo bueno empieza ahora, ya verás…

2. Función con parámetros

En las funciones podemos enviar parámetros:

F12::
	sumar(3,7)
	sumar(5,9)
Return

sumar(a,b)
{
	suma:=a+b
	MsgBox La suma es = %suma%
}

De esta forma, podemos calcular las sumas con los sumandos que queramos, ya que solo tenemos que enviarlos como parámetros (3,7 y 5,9 en este ejemplo).

Si te fijas, en esta macro de AutoHotkey hemos quitado la línea Return y funciona perfectamente.

3. Función que devuelve un valor

En este ejemplo, la función devuelve el valor que acompaña a la función Return (a+b, en la línea 8):

F12::
	suma:=sumar(3,7)
	MsgBox La suma es = %suma%
Return

sumar(a,b)
{
	Return a+b
}

La función suma los valores de las variables a y b antes de devolver el valor de la suma (línea 8).

En general, todas las funciones devuelven un valor aunque no haya un Return explícito. Por ejemplo, tanto en el primer ejemplo (que tenía una línea con Return) como en el segundo (que no tenía una línea con Return) la función devuelve cero (o una cadena vacía, que es lo mismo).

4. Función con parámetros opcionales

Es posible que el número de parámetros enviados a la función no coincida exactamente con el que puede recibir la función. En este caso, el último o últimos parámetros son opcionales y deben ir de una forma especial.

Por ejemplo, una función que sume 2 o 3 sumandos sería así:

F12::
	suma:=sumar(3,7)
	MsgBox La suma es = %suma%
	suma:=sumar(3,7,11)
	MsgBox La suma es = %suma%
Return

sumar(a,b,c:=0)
{
	Return a+b+c
}

Después de la primera llamada a la función (línea 2), tendremos el siguiente cuadro de diálogo:

funciones de AutoHotkey: sumar con 2 sumandos

Cuando solo se envían 2 parámetros, la función toma el tercer parámetro c como cero (c se inicializa en cero si no hay un tercer parámetro) y suma los 2 primeros sumandos (más el tercero, c, que es cero).

Mientras que tras la segunda llamada (línea 4), AutoHotkey nos mostrará:

funciones de AutoHotkey: 3 sumandos - 1 opcional

En este caso se envían 3 parámetros y la función suma los 3 sumandos normalmente.

⁂

Variables locales, estáticas y globales en las funciones de AutoHotkey

1. Variables locales

Las variables locales de las funciones solo sirven dentro de la función. Además, no importa si fuera de la función existen variables con el mismo nombre. Cada vez que se llame a una función, sus variables locales se inicializan en cero. Al terminar la función, las variables locales, simplemente, «desaparecen».

Las variables de los parámetros dentro de la función son locales a la función, es decir, son copias de la variable pasada a la función.

Por ejemplo, al pulsar F12, el siguiente código:

F12::
	a:=1
	incrementar(a)
	MsgBox % a
Return

incrementar(a)
{
	a:=a+1
	Return a
}

mostrará «1», no «2»:

funciones de AutoHotkey: incrementar

El motivo es que la variable a local a la función es independiente de la variable a externa.

¿Está entendido este punto de las variables locales?

Esto es así, excepto en un par de casos, que vamos a ver con más detalle:

  • variables estáticas
  • variables globales

2. Variables estáticas

Las variables, llamadas estáticas, son especiales, porque recuerdan su valor cada vez que se llama a la función.

Por ejemplo, en este código de AutoHotkey:

F12::
	función()
Return

función()
{
	static yaHasPasadoporAquí:= false

	if yaHasPasadoporAquí
		MsgBox Ya has pasado por aquí
	yaHasPasadoporAquí:=true
}

la variable yaHasPasadoporAquí definida como static en la línea 7 hace que no suceda nada la primera vez que pulses F12. Pero la segunda y sucesivas se mostrará el siguiente mensaje:

funciones de AutoHotkey: variables estáticas

El motivo es que se trata de una variable estática (la función «recuerda» su valor en cada llamada).

Nota: las variables y los nombres de funciones y subrutinas pueden tener tildes y eñes.

Para que todas las variables dentro de la función sean estáticas por defecto, hay que declarar static sin ninguna variable detrás (línea 3):

funciónConTodasLasvariablesEstáticas()
{
	static
	; Aquí tu código
}

3. Variables globales

Si quieres emplear un nombre de variable dentro de una función que coincida con otra variable externa y que al terminar la función la variable externa recuerde el valor de dicha variable dentro de la función, entonces tienes que usar una variable global.

Para que una variable sea global, hay que declararla cono global, en lugar de static (línea 3):

F12::
	variableGlobal:=true
	alternar()
Return

alternar()
{
	global variableGlobal
	variableGlobal:=!variableGlobal
}

En esta función, la variable variableGlobal es global e irá alternando entre los valores true y false.

Para que todas las variables dentro de la función sean globales por defecto, hay que declarar global sin ninguna variable detrás:

funciónConTodasLasvariablesGlobales()
{
	global
	; Aquí tu código
}

Es posible que todo esto te parezca muy árido, quizás innecesario, pero de lo que estoy seguro es que si programas mínimamente en AutoHotkey, algún día volverás para ver qué era eso de las variables estáticas y globales. Por eso, quédate con la copla de que es útil saber qué son…

4. Función que devuelve más de un valor

Según lo visto hasta ahora, una función solo puede devolver un valor. Pero ¿cómo se puede hacer que devuelva más de un valor?

Sin complicarnos más la vida, podemos emplear un truco en este ejemplo: intercambiar los valores de las variables a y b.

F12::
	a:=1
	b:=2
	intercambiar(a,b)
	MsgBox % a b
Return

intercambiar(ByRef a, ByRef b)
{
	temporal:=a
	a:=b
	b:=temporal
}

En este caso se ha conseguido añadiendo ByRef a cada parámetro dentro de la función. Por tanto, las variables a y b internas de la función son una referencia a las variables a y b externas y esta función intercambia los valores de las variables a y b externas.

¿Entendido lo que puedes conseguir con los parámetros ByRef?

Para este truco, no es necesario que las variables internas de la función tengan el mismo nombre que las externas. La prueba es que la siguiente función intercambiar2(), con variables locales v1 y v2, funciona igual de bien que la anterior:

intercambiar2(ByRef v1, ByRef v2)
{
	temporal:=v1
	v1:=v2
	v2:=temporal
}

⁂

Rizando el rizo con las funciones de AutoHotkey

1. Funciones que contienen subrutinas

Una función puede contener subrutinas internas y también puede llamar a subrutinas que están fuera de la función:

funciones de AutoHotkey: llamada a una subrutina interna y a otra externa

2. Funciones que llaman a otras funciones

Aunque una función no puede contener funciones, no hay ningún problema en que una función llame a otras funciones:

funciones de AutoHotkey: llamada a otra función

Por ejemplo, la siguiente función calcula la hipotenusa sabiendo dos catetos del triángulo:

F12::
	laHipotenusa:=hipotenusa(3,4)
	MsgBox, La hipotenusa es = %laHipotenusa%
Return

hipotenusa(cateto1,cateto2)
{
	 Return Sqrt(sumaCuadrática(cateto1,cateto2))
}

sumaCuadrática(a,b)
{
	Return a*a + b*b
}

Es decir, en este ejemplo, al pulsar F12, la línea 2 llama a la función hipotenusa (línea 6) con los dos catetos como parámetros; la función hipotenusa llama en la línea 8 a la función sumaCuadrática (línea 11), que devuelve la suma de los cuadrados de los dos parámetros a y b (línea 13). La función hipotenusa calcula ahora entonces la raíz cuadrada de la suma cuadrática con la función Sqrt, una función integrada en AutoHotkey, y devuelve ese valor (línea 8) al hilo principal del código (línea 2). En realidad, la función hipotenusa llama a dos funciones: sumaCuadrática y Sqrt.

Al pulsar F12, se mostrará el siguiente cuadro de diálogo:

funciones de AutoHotkey: llamada a otra función

dando la respuesta correcta de 5,0.

Por supuesto, se podría haber hecho el cálculo con una sola función.

⁂

Beneficios de las funciones de AutoHotkey

Los beneficios de las funciones de AutoHotkey son:

  • Código más legible. Cuanto más emplees una función, más fácilmente entenderás el código, en vez de verlo repetido muchas veces en la macro.
  • Código más pequeño, menos líneas. Siempre se agradece la simplicidad. La máxima de «lo simple es bello» sigue siendo verdad para los programadores.
  • El código con funciones se mantiene más fácilmente. Es decir, que si haces un cambio, lo haces en la función una sola vez y no repetir el cambio en todas las apariciones del código de AutoHotkey. Esto hace el código más seguro también, porque minimizas los cambios de código y la posibilidad de equivocarte.
  • Flexibilidad al programar, porque puedes pasar parámetros.
  • Permite devolver valores.
  • Permite crear un diseño modular (esto lo veremos en un próximo artículo).

En el siguiente artículo veremos una aplicación de las funciones de AutoHotkey en el trabajo de un traductor, para que veas que esto de las funciones puede ser muy útil para ti.

⁂

Nada más, solo un par de recomendaciones si te interesa leer más sobre AutoHotkey o si quieres estar al tanto de los nuevos artículos de Gonduana:

  • Lee los otros artículos de AutoHotkey de este mismo blog. Los tienes todos si filtras por «AutoHotkey» en la nube de etiquetas (columna derecha del blog).
  • Suscríbete al boletín del blog, o sígueme en LinkedIn o Twitter (@jssprt). De esta manera, serás el primero en enterarte de la publicación de los artículos.

Entradas relacionadas

Si te ha gustado el artículo, además de compartirlo en tus redes sociales,

puedes leer otros artículos de Gonduana del mismo estilo:

Cómo escribir letras griegas con AutoHotkey

15/octubre/2020

No es algo que se prodigue todos los días, pero si alguna vez has querido escribir alguna letra griega, ¿verdad que no es fácil escribir

Leer el artículo »
Macro de AutoHotkey para pegar sin formato en Word

Macro de AutoHotkey para pegar sin formato en Word

16/julio/2020

Hoy en LinkedIn he leído un artículo de How-To Geek que recomienda usar el atajo de teclado  CTRL + MAYÚS + V  para pegar sin formato en muchas aplicaciones.

Leer el artículo »

Cómo buscar en el diccionario de la RAE con AutoHotkey

6/diciembre/2019

Si te encanta buscar las definiciones en el diccionario, pero te da pereza abrir el diccionario en internet y buscar la palabra, aquí tienes la

Leer el artículo »
Cambiar la conjunción y con AutoHotkey

Cambiar la conjunción «y» a «e» con AutoHotkey

21/octubre/2019

Este artículo es una continuación del anterior, ya que ahora vamos a ver cómo cambiar la conjunción «y» a «e» con AutoHotkey cuando es necesario

Leer el artículo »
Cambiar la conjunción o con AutoHotkey

Cambiar la conjunción «o» a «u» con AutoHotkey

8/octubre/2019

Si se te escapan frases como «siete o ocho», a pesar de que sabes que la conjunción o se cambia a u cuando le sigue

Leer el artículo »
Escribir el símbolo de marca registrada y superíndice 2

Cómo escribir el símbolo de marca registrada ®

30/septiembre/2019

Si quieres escribir el símbolo de marca registrada, es decir, ®, te presento aquí la forma de hacerlo en Word, Trados Studio y en cualquier

Leer el artículo »
Jesús Prieto

Jesús Prieto

Querido traductor: quiero compartir contigo muchas cosas que podrás aprovechar como profesional: desde herramientas especiales hasta técnicas comerciales; desde estrategias de marketing hasta trucos de productividad personal; desde cómo diseñar tu marca personal hasta novedades de impuestos.
Todos los artículos

Publicado en: macros Etiquetado como: AutoHotkey

Comentarios

  1. 8492312414 dice

    1/octubre/2019 a las 6:04 pm

    hola en esta pagina yo he podido encontrar un montón de información que ya haba teniendo semanas sin responder mis respuestas luchando para conseguirla la información.

    Responder
    • Jesús Prieto dice

      1/octubre/2019 a las 6:49 pm

      Me alegro de que te resultaran útiles las funciones de AutoHotkey.
      Un abrazo,
      … Jesús Prieto …

      Responder

Comentar Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Jesús Prieto

Jesús Prieto 2015

Sobre mí

Lo más visto…

Artículos más leídos de Gonduana
Vídeos más vistos de Gonduana
Gonduana en las redes sociales

Últimos artículos

  • Cosas que he aprendido este año 2022
  • Cómo escribir letras griegas con AutoHotkey
  • Macro de VBA para pegar sin formato en Word
  • Macro de AutoHotkey para pegar sin formato en Word
  • Extranjerismos en el ajedrez
  • Cómo buscar en el diccionario de la RAE con AutoHotkey
  • Los comodines de Excel
  • Novedades en el buscador de la RAE
  • Mis macros de Word para ordinales (Marisa E Schieda)
  • Mis macros de Word para abreviaturas de “número”

Nube de etiquetas

anglicismos AutoHotkey cobros comodines copias de seguridad correo español Excel foto fórmulas geografía geometría GTD historia imagen impagos InDesign libros marca matemáticas mouse MT ortografía Outlook parábolas PDF PHP poesía power PowerPoint RAE ratón regex retrasos tarifas teclado tipografía TM Trados Studio VBA vídeo Word WordPress XML zoología

Categorías

  • adaptación (3)
  • blog (11)
  • comercial (24)
  • contabilidad (2)
  • español (6)
  • etimología (5)
  • fiscalidad (2)
  • hardware (3)
  • macros (42)
  • marketing (8)
  • noticias (4)
  • productividad (42)
  • seguridad (5)
  • social (9)
  • software (41)
  • TAO (39)
  • terminología (9)
  • traducción automática (2)
  • traducción literaria (1)
  • tradumática (38)
  • vídeo (18)
Buscar en Gonduana
Política de privacidad
Política de cookies
Aviso legal
Creative Commons

Licencia Creative Commons

Blog de Gonduana: recursos para traductores

Esta web usa cookies
Es cansino, sí, pero la ley europea me obliga a avisarte que este blog, como casi el 100%, usa cookies para recabar datos. ¿Estás de acuerdo con mi Política de cookies? Vale Rechazar Más información
Política de cookies

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are as essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Necessary
Siempre activado
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
GUARDAR Y ACEPTAR