Hola
devnullsp,
Te entiendo,
AutoHotkey v1.x hereda todas las cosas horribles de
AutoHotkey Basic, la primera versión de
AHK, inicialmente desarrollada por
Chris, la cual cuenta con muchas cosas que repelerían a cualquier programador mínimamente decente.
Chris tenía buenas intenciones, su objetivo era claro, hacer un lenguaje extremadamente sencillo que cualquier persona sin ningún tipo de conocimientos de programación podría manejar, pues bien, ¿cual es el problema?, el objetivo de
Chris de hacer un lenguaje super-sencillo terminó convirtiéndose en algo "asqueroso", donde los errores no existen (son mínimos) siendo completamente omitidos (claro, total, a quien le gusta ver errores, mejor quitémonos y omitamos todos devolviendo una cadena vacía permitiendo al usuario hacer cualquier cosa) y las malas practicas de programación a las que
inicialmente te obligaba utilizar el propio lenguaje.
Utilizar la directiva
#Warn es algo que recomiendo fuertemente a los usuarios, como así también utilizar la versión 2 de AutoHotkey, en donde la mayoría de estos problemas son resueltos, alejando al usuario de todos estos malos hábitos de programación.
Yo entiendo que, cuando uno inicia en esto de la programación, es completamente normal "enamorarse" de cosas como
var=%var2%, de hecho yo empecé con AHK, y mis
scripts estaban llenos de este tipo de cosas, me gustaba, pero con el paso del tiempo cuando fui entendiendo realmente la programación (aprendiendo c++), me di cuenta lo mal que estaba esto. Actualmente solo utilizo la versión 2 de AutoHotkey, jamás volví a tocar
AutoHotkey v1, salvo para ayudar a otros usuarios.
Otra cosa que recomiendo es definir e inicializar
siempre las variables con un valor, como así también declarar el ámbito de las variables en funciones, por ejemplo:
Code: Select all
Funcion()
Funcion()
{
MsgBox
Local Variable := "Mi cadena"
MsgBox Variable
}
Como podrás observar, el código de arriba devuelve un error en
AutoHotkey v1, no te deja definir una variable como
local y asignarle un valor... esto no pasa en la versión 2.
Esto de declarar el ámbito de una variable es para evitar la interferencia con variables globales, definidas como
global o la declaración de una clase.
Hola [url=https://autohotkey.com/boards/memberlist.php?mode=viewprofile&u=83570][i][b]devnullsp[/b][/i][/url],
Te entiendo, [i]AutoHotkey v1.x[/i] hereda todas las cosas horribles de [i]AutoHotkey Basic[/i], la primera versión de [i]AHK[/i], inicialmente desarrollada por [url=https://autohotkey.com/boards/memberlist.php?mode=viewprofile&u=2]Chris[/url], la cual cuenta con muchas cosas que repelerían a cualquier programador mínimamente decente. [c]Chris[/c] tenía buenas intenciones, su objetivo era claro, hacer un lenguaje extremadamente sencillo que cualquier persona sin ningún tipo de conocimientos de programación podría manejar, pues bien, ¿cual es el problema?, el objetivo de [url=https://autohotkey.com/boards/memberlist.php?mode=viewprofile&u=2]Chris[/url] de hacer un lenguaje super-sencillo terminó convirtiéndose en algo "asqueroso", donde los errores no existen (son mínimos) siendo completamente omitidos (claro, total, a quien le gusta ver errores, mejor quitémonos y omitamos todos devolviendo una cadena vacía permitiendo al usuario hacer cualquier cosa) y las malas practicas de programación a las que [b]inicialmente[/b] te obligaba utilizar el propio lenguaje.
Utilizar la directiva [c]#Warn[/c] es algo que recomiendo fuertemente a los usuarios, como así también utilizar la versión 2 de AutoHotkey, en donde la mayoría de estos problemas son resueltos, alejando al usuario de todos estos malos hábitos de programación.
Yo entiendo que, cuando uno inicia en esto de la programación, es completamente normal "enamorarse" de cosas como [c]var=%var2%[/c], de hecho yo empecé con AHK, y mis [i]scripts[/i] estaban llenos de este tipo de cosas, me gustaba, pero con el paso del tiempo cuando fui entendiendo realmente la programación (aprendiendo c++), me di cuenta lo mal que estaba esto. Actualmente solo utilizo la versión 2 de AutoHotkey, jamás volví a tocar [i]AutoHotkey v1[/i], salvo para ayudar a otros usuarios.
Otra cosa que recomiendo es definir e inicializar [b]siempre[/b] las variables con un valor, como así también declarar el ámbito de las variables en funciones, por ejemplo:
[code=autohotkey file=Untitled.ahk]Funcion()
Funcion()
{
MsgBox
Local Variable := "Mi cadena"
MsgBox Variable
}[/code]
Como podrás observar, el código de arriba devuelve un error en [i]AutoHotkey v1[/i], no te deja definir una variable como [color=#0040FF][i]local[/i][/color] y asignarle un valor... esto no pasa en la versión 2.
Esto de declarar el ámbito de una variable es para evitar la interferencia con variables globales, definidas como [color=#0040FF]global[/color] o la declaración de una clase.