Saltar al contenido principal

Llamar a funciones integradas

  • Los argumentos son posicionales y todos son obligatorios. Ninguna función integrada acepta argumentos opcionales, con nombre o de longitud variable. Los nombres de parámetro de la referencia son solo etiquetas.
  • El número de argumentos se comprueba al compilar el script, así que un número incorrecto detiene el script antes de que se ejecute nada.
  • Los tipos de los argumentos se comprueban al ejecutarse la llamada y deben coincidir exactamente, con una sola ampliación. Un Integer donde se declara un Real se convierte en ese Real (MathSqrt(16) funciona), igual que en la aritmética. Un Real donde se declara un Integer, o un número donde se declara Text (UtilityPrint(42)), detiene la acción con Nombre: el argumento N tiene un tipo incorrecto. Los parámetros que se muestran como Any aceptan cualquier tipo.
  • Toda función integrada devuelve un valor. La mayoría de las acciones devuelven un Bool que significa “funcionó”, que puede ignorar o comprobar.
  • Que algo falte es un resultado normal, no un error. Una ventana que no se encuentra es una ventana nula. Pasar una ventana nula, o una ventana que se cerró, a una función integrada Window* no hace nada y devuelve false, 0 o "", así que una cadena de llamadas de ventana sobre un identificador que no se encontró es segura. Las funciones integradas de contexto fuera de su disparador devuelven "", 0, -1 o una ventana nula.
  • Los resultados múltiples se enumeran y luego se leen por índice. Una llamada como WindowGetAllTopLevel(), FolderEnumerateAll(…), StringSplit(…) o DisplayMonitorEnumeratedAll() devuelve un recuento, y la correspondiente …EnumeratedAt(i)/…PartAt(i) lee el elemento i, de 0 a recuento − 1. Cada familia tiene una caché por ejecución del script, y la siguiente llamada de enumeración de esa familia la reemplaza.
  • Un complemento puede aportar funciones integradas propias. Sus llamadas tienen el mismo aspecto. Si el complemento no está conectado cuando se compila el script, el script no se ejecuta y una notificación indica el motivo.
n = WindowGetAllTopLevel(); // recuento; también llena la caché de ventanas
for (i = 0; i < n; i = i + 1) {
w = WindowGetEnumeratedAt(i); // elemento i de esa caché
if (WindowGetVisible(w) && WindowGetTitle(w)) {
UtilityPrint(WindowGetExecutableName(w) + " - " + WindowGetTitle(w));
}
}