Sentencia If/Then

Q-SYS Control 101 Training (Spanish) : Control de Flujo

3 ) Comunicación Básica

12m 57s

4 ) Block Controller

0m 0s

6 ) Control de Flujo

33m 58s

7 ) Término del Entrenamiento Control 101

1m 24s

Descripción de la lección

Sentencia If/Then 10m 0s

Explora el proceso de toma de decisiones de la Sentencia If/Then y úsala para crear sentencias condicionales que controlen tu diseño de Q-SYS.

Transcripción de video

Sentencia If/Then 10m 0s
0:08
¡Ya casi! ¡Todo nos lleva a este punto! Todo lo de imprimir y comentar, los metadatos del árbol de
0:14
control, funciones y variables, tan solo han sido piezas del rompecabezas. Ahora… Finalmente
0:19
podremos hacer algo.
0:21
Presentando – las sentencias If/then (si/entonces). Este es básicamente el componente de toma de
0:26
decisiones de nuestro script. Si esto es verdadero, has X. Si aquello es verdadero has Y. Si presionas el
0:33
acelerador, entonces el coche avanzará. Si grabamos esto en la primera toma, entonces no
0:38
tendremos que venir el sábado.
0:40
Ahora, tal vez pienses que debimos de haber tocado este tema de toma de decisiones mucho antes,
0:45
cuando empezamos a combinar el EventHander y las Funciones.
0:49
Después de todo, pudimos usar el EventHandler para iniciar una función, la cual hizo una tarea
0:55
determinada. Así que esto funciona así: presionas un botón y la función sucede. Pero no hay una
1:01
toma de decisiones real o algún análisis detallado ahí, ya que esa función siempre hará lo mismo cada
1:08
vez que se dispara el EventHandler, y esto sucede cuando el botón está en ON o en OFF.
1:14
Ahora con nuestra sentencia if/then, podemos hacer sentencias condicionales calificativas.
1:20
El cuerpo de nuestra sentencia if/then se ve así:
1:23
if – [Sentencia Calificativa]
1:26
then – [resultado]
1:28
end
1:30
Podemos usar esto para asegurarnos que el resultado solo ocurra bajo ciertas condiciones. Por
1:35
ejemplo, previamente mostramos un fader que se pone amarillo cuando llega al tope de su rango.
1:40
Podemos hacer esto con una sentencia if/then de la siguiente manera:
1:44
Cuando Controls.MrFader.EventHandler es disparado, iniciará una función function ()
1:54
If Controls.MrFader.Value > 0
1:58
then Controls.MrFader.Color = “yellow” (Amarillo)
2:04
end 6(para terminar la sentencia if/then)
2:07
y luego otro end para terminar la función.
2:10
Y al mover el fader, su EventHander es constantemente disparado, pero su función solo cambia el
2:16
color del control si el valor del control está dentro del rango especificado.
2:21
Pero… no tenemos nada que cambie el color del fader a negro cuando regresa por debajo de 0
2:26
decibeles. Ahora, podemos añadir una segunda sentencia if/then después de la primera que diga “si
2:33
el valor es menor que 0 entonces cambia el color a… aqua”, pero hay maneras más eficientes de
2:40
hacer esto. El cuerpo de nuestra sentencia if/then también puede incluir un “else” (si no).
2:47
Este “else” nos permite especificar un resultado alternativo que ocurrirá si la sentencia calificativa no
2:54
se cumple. En este caso, no necesitamos esta segunda sentencia if/then, ya que todo puede
3:00
simplificarse con una sentencia else dentro del cuerpo de la primer sentencia if/then.
3:06
Puedes ver que esto trabaja perfectamente: nuestro fader es amarillo en lo alto de su rango y es aqua
3:12
en cualquier otro lugar.
3:14
De hecho, podemos continuar modificando nuestra sentencia if/then con otra herramienta llamada
3:19
“elseif”. Estas son sentencias calificativas adicionales para ser analizadas, en orden de, si la sentencia
3:25
calificativa anterior no se cumple. Mientras que nuestra sencilla sentencia if/then tiene solo dos
3:31
resultados posibles, el añadir varios “elseif” permite obtener un número ilimitado de resultados
3:37
posibles.
3:38
Iniciaré con este fader, y añadiré un tercer color cuando el control está cerca del fondo de su rango.
3:44
Así que añadiré un elseif …. Valor < -40, entonces el color es “gris”. Ahora si el control no cumple con
3:53
la primer condición de estar arriba de 10, lo verificará para ver si cumple con la segunda condición de
3:58
estar debajo de -40. Si lo está, su color es gris. Si no lo está, entonces se cumplirá la condición
4:05
estándar else de ser aqua.
4:07
No te olvides de usar variables para tu beneficio también. Puedo hacer esta sentencia if/the más fácil
4:13
de escribir si definiera una variable global al inicio como Y=Controls.MrFader. Ahora no necesito
4:22
molestarme en escribir todo el tiempo, solo uso Y.Value e Y.Color, lo cual hace mucho más fácil de
4:29
leer también.
4:31
De la misma manera, ten en cuenta que esta es una sentencia sencilla. Puedes tener muchas cosas
4:37
que sucedan en cada uno de tus resultados, dirigidas a diferentes controles o a sus muchas
4:42
propiedades del árbol de control como sus Valores, sus cadenas o puedes dirigirlas a un método de
4:48
control, el cual, si lo recuerdas, te permite activar un trigger, el cual puede estar conectado a algo
4:55
más en tu diseño como un snapshot. Puedes complicarte como desees con tus resultados para hacer
5:00
que un gran número de cosas sucedan.
5:03
También puedes añadir más complejidad dentro de tus sentencias calificativas. Por ejemplo, puedes
5:08
especificar que dos cosas diferentes tengan que ser verdaderas con una sentencia “and”, o que
5:13
cualquiera de las dos cosas satisfaga la condición con una sentencia “or”. Puedes también combinar
5:19
ideas juntas usando paréntesis para crear condiciones extremadamente específicas.
5:25
No olvides de usar las herramientas de impresión y de comentarios también. Puedes añadir un
5:30
comando dentro del cuerpo de tu resultado, para así, tener un registro de que haya pasado. Esta es
5:35
una gran forma de probar que tu función opera correctamente. Y en cuanto tu script crezca, añade
5:41
comentarios para recordarte a ti mismo a alguien más qué es lo que significa cada pedazo de código.
5:46
Tabién puedes darle formato a tu script haciendo referencia a funciones dentro de otras funciones.
5:52
Por ejemplo, si la sentencia if/then se vuelve difícil de leer. En su lugar, yo tomaría el resultado de
5:58
una y la definiría como una función en la parte superior del script.
6:03
Llamemos literalmente a esta función como “result1”. Añadiré un “end” para limitar esta función y
6:09
que la sentencia if/then pueda hacer referencia a la función en lugar de escribir todo de nuevo. Ahora
6:15
he haré lo mismo para “result2”. Lo terminaré aquí y lo redefiniré aquí en la parte superior de mi
6:21
script como su propia función y luego, haré referencia a esa función dentro de mi sentencia if/then.
6:27
Ahora mi sentencia if/then es mucho más fácil de leer, ya que he reemplazado estos comandos feos y
6:33
largos con nombres de funciones, las cuales solo se llamarán bajo las condiciones correctas.
6:40
Hay una cosa que puedes haber visto en esta última función y que debo advertirte: el uso del doble
6:45
signo de igual. Cambiemos a un script muy sencillo para enfocarnos en esto. Aquí tengo un solo
6:51
botón. Cuando su valor es 1, imprimiremos “on”, de lo contrario imprimiremos “off”. A mí me parece
6:58
un código bastante limpio, pero en la ventana de depuración tenemos un error. ¿Por qué pasa esto?
7:05
Bueno, para ti y para mí, este signo de igual tiene un perfecto sentido lingüístico – “si el valor es igual
7:11
a 1, haz tu trabajo”. Pero para una computadora, un signo de igual es realmente un llamado a la
7:17
acción. Le dice que cambie una cosa a otra cosa, ¡pero no queremos cambiar nada aquí! Así que si
7:24
solo estás comparando dos cosas tendremos que usar el doble signo de igual, el cual es el símbolo
7:30
para equivalencia.
7:32
En lenguaje de computadora, esto dice, “si el valor del control es equivalente a 1” entonces, haz algo.
7:39
Esto es algo en lo que te puedes equivocar en tus primeras sentencias if, así que ¡ten cuidado!
7:46
Si pensamos en los Control Components, puede que recuerdes que llevamos a cabo una tarea muy
7:50
sencilla usando Control Functions. Hay alrededor de 30 funciones distintas aquí, las cuales, son en
7:56
esencia, bloques de scripting preseleccionados. El bloque de Logic AND, por ejemplo, requiere que
8:02
ambas entradas tengan un valor de 1, para que su salida sea 1.
8:06
Bueno, es exactamente lo mismo en esta sentencia if/then. Si Controls.Inputs 1 y 2 son equivalente a
8:14
1, entonces el Controls.Outputs.Value es 1. Si no, el valor es 0. Probablemente ahora veas porqué
8:23
estas Control Functions son útiles para trayectorias lógicas sencillas, sin embargo, no tienen el mismo
8:29
nivel de personalización que sí tienes al escribir tu propio un script. Las sentencias calificativas y
8:35
resultados de estas Control Functions son fijos y solo hacen una cosa, mientras que el script es tan
8:40
flexible como tú quieras.
8:43
Finalmente, veamos cómo construir sentencias if/then en el Block Controller. Encontrarás el bloque
8:48
de “if” en la categoría de “Flow Control” (control de Flujo). La nomenclatura aquí es if/do, pero es el
8:55
mismo concepto. Puedes definir tu sentencia calificativa en la ranura del if, y construir el resultado
9:02
deseado aquí en la ranura del Do.
9:05
Si das click en el ícono del engrane, puedes re estructurar el cuerpo de este bloque para incluir la
9:10
sentencia “Else” y tantas sentencias ElseIf como quieras. Así como en un script de Lua, puedes apilar
9:17
muchos comandos dentro de la sección “Do”, puedes hacer referencia a funciones y variables que
9:22
hayas definido por ahí y puedes añadir más operadores lógicos dentro de las ranuras de tu if y else-if
9:29
para añadir complejidad. Y puedes acoplar bloques de “debug print” (impresión de depuración) así
9:34
como bloques de comentarios para mantener todo organizado.
9:38
Así que, ve y diviértete. Regresa a tu hoja de trabajo de control y termina el ejercicio de la sentencia
9:43
if/then, y siente libre de ponerte creativo y ver que más puedes llevar a cabo incorporando todas las
9:49
cosas que has aprendido hasta ahora en este entrenamiento. Después, continua con el siguiente
9:54
video cuando estés listo.