Controlar variables no definidas en AppleScript

Uno de los problemas de las variables globales o locales de AppleScript es controlar si la variable está definida o no. Veamos cómo podemos evitar errores de este tipo en AppleScript.

Ejemplo básico del problema

Imaginemos que tenemos una variable global llamada miVariable y queremos consultar si su valor es igual a 1. Tenemos el siguiente código:

global myVariable

if myVariable = 1 then
	display dialog "Vale 1"
end if

Si lo ejecutamos en el editor de AppleScript obtendremos el siguiente mensaje de error: Error de script La variable myVariable no está definida.

Controlando el error

Recordemos que en AppleScript para controlar errores tenemos la estructura Try/endTry.

Consultando la documentación técnica de AppleScript observamos que cuando el motor de ejecución de AppleScript encuentra una variable no definida se dispara el error número -2753.

Para controlar este error en concreto en AppleScript deberíamos codificar la siguiente estructura:

try
-- Código a ejecutar si todo va bien
on error number -2753
-- Código a ejecutar si la variable no está definida
end try

Con esta información podemos deducir que el código correcto para el ejemplo anterior sería algo como:

global myVariable

try
	if myVariable = 1 then
		display dialog "Vale 1"
	end if
on error number -2753
	display dialog "No vale 1"
end try

Variables locales, globales y propiedades en AppleScript

En otros artículos hemos visto las variables en AppleScript y cómo manipularlas.

Las variables en AppleScript pueden tener un ámbito local o global. Esto significa que una variable puede ser utilizada dentro de la función donde ha sido declarada (ambito local) o puede ser utilizada en cualquier parte de nuestro script de AppleScript (ámbito global).

Todas las variables globales y locales son reinicializadas cuando se ejecuta un script por lo que en las variables sólo podremos almacenar información que vaya a ser utilizada en el momento de ejecutar ese script.

Declaración de variables locales y globales

Las variables locales no es necesario declararlas con anterioridad ya que por defecto cualquier variable utilizada a través del comando set es declarada como local.

En cambio las variables globales deben ser declaradas al comienzo del script utilizando el comando global. Un ejemplo puede ser:


-- Declaramos la variable
global miVariableGlobal

on run
— Usamos la variable global
set miVariableGlobal to 1
end run

Persistencia de información en AppleScript

A veces podemos necesitar guardar información para la ejecución de un AppleScript entre una y la siguiente ejecución. Para este motivo AppleScript nos proporciona un tipo especial de variables: las propiedades

Las propiedades, como las variables globales, se declaran al comienzo del script pero a diferencia de las variables globales, al declararlas es necesario indicar un valor inicial. Por ejemplo:


-- Declaramos la variable
global miVariableGlobal
-- Declaramos la propiedad
property propertyVar : 1

A la hora de manipular una propiedad se hace al igual que con una variable utilizando el comando set

Ejemplo

Vamos a ver un ejemplo simple en el que veremos cómo se comportan las variables locales, globales y propiedades con cada nueva ejecución del script. Para ello abre el editor de scripts de Macos, escribe el siguiente código y utiliza la opción run unas cuantas veces para ver cómo varia la información con cada nueva ejecución.


-- Las propiedades y variables globales se declaran al comienzo del script

global globalVar
property propertyVar : 1

on run
— Inicializamos los valores
set localVar to 1
set globalVar to 1
set localVarText to localVar as text
set globalVarText to globalVar as text
set propertyVarText to propertyVar as text

— Preparamos el texto a verbalizar
set result to «El valor local es » & localVarText & «, el global es » & globalVarText & » y el valor de propiedad es » & propertyVarText
— Verbalizamos el resultado
say result

— Actualizamos los valores para la siguiente ejecución
set localVar to localVar + 1
set globalVar to globalVar + 1
set propertyVar to propertyVar + 1
end run

Variables en Swift

A la hora de crear un programa o aplicación informática necesitamos poder almacenar, manipular, comparar y actualizar información. Para todas estas operaciones los lenguajes de programación utilizan un elemento conocido como variable. Una variable es una porción de memoria donde el programa almacena un valor indicado por el programador.

Las variables poseen un nombre con el que identificarlas y un tipo. El tipo define qué clase de información podrá almacenar la variable. A modo de ejemplo, imaginemos que tenemos diversos productos: agua, zapatos y naranjas y tenemos varios tipos de contenedores: caja de cartón, bolsa de plástico y botella de cristal. Cada contenedor es idóneo para un tipo de elemento concreto y podría ser perjudicial si introdujésemos un elemento en un contenedor no apropiado como meter agua en la caja de cartón o en la bolsa de plástico con algún posible agujero.

Declarando variables en Swift

En Swift, al igual que otros muchos lenguajes de programación necesitamos declarar las variables que vamos a utilizar para que el sistema pueda preparar la memoria del ordenador para almacenar la información que va a contener la variable. La forma de declarar una variable en Swift es utilizando la palabra var. La sintaxis completa es:

var nombreDeVariable : tipo = valorInicial

Ese valor inicial es obligatorio a menos que hagamos que nuestra variable sea de tipo opcional pero los tipos opcionales implican un concepto un poco complejo que se explicará más adelante en otros artículos donde tratemos con clases, objetos e instancias.

El tipo de la variable indica qué clase de información va a almacenar dicha variable: texto, números decimales, números enteros, un botón de nuestra interfaz, el dato de un contacto de nuestra agenda o un tipo que hayamos creado nosotros mismos.

Los tipos básicos en Swift son los siguientes:

String
Cadena de texto
Int
Número entero
Float
Número decimal
Double
Número decimal con más de 6 decimales
Bool
Valor booleano que almacena verdadero o falso

En Swift podemos dejar que el propio lenguaje deduzca el tipo de la variable, es lo que se denomina inferencia. Esto lo podemos hacer al declarar la variable y asignarle un valor sin indicar su tipo.

var miNombre = "Fulano de tal"

Una vez definido el tipo de una variable no podemos cambiar su tipo posteriormente por lo que hay que tener esto en cuenta a la hora de manipular las variables para cambiar sus valores.

Constantes en Swift

Una constante en programación es una variable que una vez declarada con su valor dicho valor no cambia en ningún momento. Ejemplos como el valor del número PI, la aceleración de la gravedad en la Tierra o el número máximo del nivel de vida del personaje jugador del juego que estamos programando son ejemplos de constantes en Swift.

Para declarar una constante se utiliza la palabra let y la sintaxis es la misma que para una variable.

let nombreDeConstante : tipo = valorParaLaConstante

También podemos utilizar la inferencia a la hora de declarar una constante.

let aceleracionGravedad = 9.8

En Swift, como en otros muchos lenguajes de programación el símbolo de coma numérica se indica con el signo . (punto) esto tanto para Float como Double como otros posibles tipos de números decimales

Utilizando variables

Una vez hemos declarado la variable podemos operar con ella simplemente nombrándola y realizando operaciones con ella. Por ejemplo:

Cambiando su valor:


var miVariable = 3
miVariable = 5

Combinando matematicamente varias variables:


var num1 = 3
var num 2 = 5
var num 3 = num1 + num2

Modificando una variable a partir de su valor anterior


var num1 = 5
num1 = num1 + 100

Visualizando el valor de una variable

Ya vimos en el artículo de primeros pasos con Swift el comando print. Por ahora utilizaremos dicho comando para ir viendo los diferentes valores de las variables en nuestros ejemplos.

La función print() nos permite mostrar una cadena de texto por la consola de depuración de xCode. Su sintaxis es muy sencilla:

print(variableDeTextoParaMostrar)

Ahora sólo debemos conocer cómo poder incluir en una variable de texto el valor de otras variables. La forma es muy sencilla. Recordemos que para poder declarar una cadena de texto debemos encerrar el valor de texto de nuestra variable entre los símbolos de dobles comillas ("). por ejemplo:


var miTexto = "Esto es un texto de prueba"
print(miTexto)

Si en nuestro Playground escribiesemos el código anterior obtendríamos el siguiente resultado por la consola de depuración:

Esto es un texto de prueba

Para incluir el valor de una variable dentro de una cadena de texto debemos utilizar una secuencia de escape que permita a xCode conocer nuestra intención de insertar en una posición concreta de la cadena de texto el valor de una variable. Esa secuencia de escape consiste en escribir barra invertida seguida de abre paréntesis y cierra paréntesis (\()). Por ejemplo, veamos el siguiente código:


var numero = 33
var texto = "Diga \(numero)"
print(texto)

Ejercicio de manipulación de variables

Vamos a poner en prática los conocimientos aprendidos hasta ahora y vamos a escribir un código en nuestro Playground que realice las siguientes operaciones:

  • Declarar 3 constantes con 3 valores numéricos distintos
  • Declarar una variable numérica para almacenar el resultado de las distintas operaciones
  • Sumar las dos primeras constantes y mostrar el resultado por consola
  • Al resultado anterior restarle la tercera constante y mostrarlo por consola
  • Al resultado anterior multiplicarlo por 100

Es muy recomendable que antes de ver la solución propuesta intentéis crear vuestro propio código.

La solución propuesta es la siguiente:


let num1 : Int = 3
let num2 : Int = 5
let num3 : Int = 6
var resultado = 0

resultado = num1 + num2
print("Operación 1 = \(resultado)")
resultado = num1 + num2 - num3
print("Operación 2 = \(resultado)")
resultado = resultado * 100
print("Operación 3 = \(resultado)")

El resultado que saldrá por consola será:

Operación 1 = 8
Operación 2 = 2
Operación 3 = 200

Si os fijáis para las constantes si hemos indicado el tipo pero para la variable de resultado hemos utilizado la inferencia.

Conclusiones

En este artículo hemos visto:

  • Cómo hacen las aplicaciones para almacenar y manipular información
  • Los requisitos de tipo a la hora de manipular información con variables
  • Las diferencias entre variables y constantes
  • Realizar operaciones matemáticas y almacenar los resultados
  • Introducir el valor de una variable dentro de una cadena de texto
  • Usar la función print() para algo más que saludar

Es necesario familiarizarse con el uso de variables en Swift si queremos progresar en este lenguaje de programación por lo que es muy recomendable que hagáis vuestros propios experimentos y recordad que dentro de un Playground no se romperá nada en tu ordenador por lo que podéis hacer todas las pruebas que queráis.