Palabras clave: Instrucciones simples
, Funciones
.
1. Instrucciones simples
Una instrucción simple es aquella que finaliza en punto y coma y puede ser:
INSTRUCCIONES SIMPLES
|
En esta lectura veremos los tres últimos tipos de instrucciones simples.
2. Funciones
Una función es una orden que se le da al ordenador expresada en un lenguaje de programación. Le dices "haz esto", "haz aquello", … Por ejemplo, puedes decirle "haz un círculo", "haz que se muestre un mensaje", "haz un sonido", … Hay órdenes que son sencillas en el sentido de que en el lenguaje de programación se dispone de instrucciones que las realizan directamente. Hay otras órdenes que son muy complejas y tendremos que "explicar" al lenguaje de programación cómo debe de hacerla expresando esa orden compleja como una secuencia de órdenes simples que el lenguaje sí es capaz de realizar.
Una función representa a una o varias instrucciones que permiten realizar una acción simple o compleja y dicha acción se identifican con un nombre único. |
Si dicho nombre aparece en una línea del programa con la intención de que realice una acción se dice que el programa invoca a la función y si se ejecutan (realizan) todas las instrucciones de la función se dice que se ha ejecutado la función.
La invocación a una función se reconoce porque aparecen los
símbolo (
y )
- propios de toda función - y el punto y coma ;
- propio de toda instrucción.
Imagina que en un lenguaje de programación ficticio le pedimos al ordenador que realice las siguientes instrucciones simples (que es capaz de realizar directamente) consistentes en mostrar un mensaje para que el usuario introduzca una orden por teclado:
muestraMensaje "Hola humano";
muestraMensaje "¿Qué haces?";
muestraMensaje "Estoy esperando una instrucción ....";
Este programa consta de 3 líneas de código y en cada una de ellas se realiza la
instrucción muestraMensaje
.
En nuestro lenguaje ficticio podríamos agrupar las 3 instrucciones e
identificarlas con el nombre que consideremos más adecuado, digamos, por
ejemplo, avisaAlUsuario()
. El modo en que se agrupan las instrucciones en una
función depende del lenguaje. En nuestro lenguaje ficticio se agruparán de esta forma:
avisaAlUsuario() {
muestraMensaje "Hola humano";
muestraMensaje "¿Qué haces?";
muestraMensaje "Estoy esperando una instrucción ....";
}
Con los símbolos ()
indicamos que creamos una función y con los símbolos {}
indicamos cuáles son las instrucciones que agrupa.
Así, de acuerdo a nuestro lenguaje ficticio, la ejecución de las
tres instrucciones muestraMensaje
son equivalentes a la ejecución de la función
avisaAlUsuario()
; y podemos entonces sustituir el primer programa,
formado por 3 líneas de código fuente, por este otro, formado por una sola línea:
avisaAlUsuario();
De este último listado también podemos decir que el programa invoca a la función avisaAlUsuario()
pues aparece el nombre de la función con la intención de dar una orden - pues aparecen los
símbolo (
, )
y ;
. La orden consiste en pedir que se ejecute la función avisaAlUsuario
, o lo que es lo mismo,
en ejecutar 3 veces la instrucción muestraMensaje
con los textos indicados en el primer listado.
En el ejemplo anterior nos hemos inventado tanto las instrucciones como la función en un lenguaje ficticio, sin embargo esto en la práctica no lo podemos hacer. No podemos inventarnos las instrucciones a nuestro antojo. Hemos de utilizar las instrucciones propias del lenguaje de programación que vayamos a utilizar.
Processing
dispone de muchas funciones que nos ayudan a dar ordenes al
ordenador. Tendrás que memorizar las más importantes. Además, como se
verá en una sesión posterior, también podrás construir tus propias funciones
con los nombres que consideres más adecuados de forma análoga a como se ha
indicado en el ejemplo anterior.
Puedes visualizar las funciones de Processing
-
o bien accediendo a la URL https://www.processing.org/reference/
-
o bien seleccionando la opción del menú
Help > Reference
.
3. Función principal
Todos los lenguajes de programación tienen muchas funciones y algunos de ellos requiere de una función principal.
Una función principal es aquella que es invocada siempre como la primera instrucción del programa. |
En general, para usar cualquier función del lenguaje de programación deberás de escribir la correspondiente instrucción invocando a dicha función. Pero hay contadas excepciones. Una de ellas es que no tendrás que escribir en ninguna parte de tu programa la instrucción que invoque a la función principal. El lenguaje de programación lo hará por ti: buscará la función principal y si existe ejecutará las líneas de código que aparezcan en ella.
La función principal de Processing se llama setup()
y siempre se pone así:
void setup() { Instrucciones que tú quieras de Processing. }
Processing permite, opcionalmente, utilizar una función principal.
Así, cuando tú escribas un programa que tenga un código similar al anterior, le estás
indicando a Processing que hay una función principal y, como tal, lo primero que hará
Processing serán invocar a la función principal setup()
lo que es equivalente
a ejecutar las instrucciones que se indiquen entre {
y }
.
Todo lo que se indica entre las llaves {
y }
recibe el nombre de bloque,
cuerpo o definición de la función.
Como acabamos de decir, la función
Estos dos aspectos los veremos en sesiones posteriores. |
El significado de |
4. Funciones de impresión
Los ordenadores son sistemas electrónicos que trabajan con información para dar resultados referentes a esa información. Processing puede mostrar los resultados que le pidamos en la pantalla ya sea en la ventana gráfica o en la consola de texto.
Para mostrar información en la consola de texto se utilizan las instrucciones
print
y println
.
Pero println()
no solo muestra números en la consola de texto.
También puedes mostrar mensajes de texto
como verás en el siguiente ejercicio.
Los mensajes de texto se llaman secuencias de caracteres. Una
secuencia de caracteres es aquello que empieza y termina con comillas
dobles, "
, y está formado por una sucesión de símbolos que pueden representar
números, letras o caracteres de escape. Las comillas dobles no forman parte del
texto que se muestra - solo sirven para delimitar dónde empieza y dónde termina
la secuencia de caracteres. Los caracteres de escape son aquellos símbolos que
pueden dar órdenes al ordenador y no son visibles cuando se muestra la secuencia de caracteres.
En el ejercicio se muestran dos caracteres de
escape: el \n
y el \t
, que sirven para empezar una línea nueva e indentar (o
tabular) el texto respectivamente.
5. Argumentos
Hemos indicado que una función es una orden que se le da a un lenguaje de programación. Las órdenes deben de ser muy concretas.
Un concepto que está asociado a las funciones es el de argumento.
Un argumento es un valor que se le suministra a una función. |
Según hemos
visto en las dos sesiones anteriores a la función println()
le hemos
suministrado tanto un número, el 4, como una cadena alfanumérica, la cadena "Hola\n\t
¿cómo estás R2P2?"
. Según la definición de argumento, tanto el 4 como la cadena
son argumentos de la función println()
.
Cuando un argumento es un número se dice que es un argumento numérico, y si el argumento es una cadena alfanumérica se dice que es un argumento alfanumérico o de tipo String.
println()
es un ejemplo de función con un argumento.
Hay funciones que pueden exigir 2, 3, … o más argumentos como veremos en breve.
Por contra, hay funciones que no necesitan argumentos.
La función principal setup() , que es la primera en ejecutarse
si está presente, es una de esas funciones a las que no
se le puede suministrar argumentos.
|
6. Expresiones
Los argumentos que hemos suministrado a la función println()
son valores literales.
Un valor es literal si representa a un valor fijo en el código del programa. |
En los siguientes dos programas:
1
2
3
4 void setup() { // Indicamos que la función principal consta de:
print(4); // - Una instrucción: print()
println(4); // - Otra instrucción: println()
}
1 println("Hola\n\t ¿cómo estás R2P2?"); // Este programa no tiene función principal
tanto el 4
como "Hola\n\t ¿cómo estás R2P2?"
son valores literales.
Frente a los valores literales están los valores calculables.
Un valor es calculable si viene determinado por una expresión, la cual puede ser o numérica o alfanumérica. |
En esta lectura nos centraremos sólamente en las expresiones numéricas.
Una expresión numérica responde a una expresión matemática pero escrita en un lenguaje de programación. |
Por tanto, en una expresión numérica aparecen operadores, operandos y funciones "matemáticas" entendiendo aquí como función "matemática" a cualquier función del lenguaje que nos dé como resultado un número.
En las dos siguientes tablas te muestro los operadores aritméticos usuales:
Observa que:
-
Las operaciones con reales se diferencian de las operaciones con naturales en el punto decimal que aparece en los operandos.
-
El operador
%
devuelve siempre el resto de la división entera, independientemente de si los operandos son enteros o reales. -
La división entera y la división real solo se pueden diferenciar por los operandos. Si los dos operandos son naturales, entonces
/
será una división entera; pero si uno de los operandos es real (tiene un punto decimal), entonces la división será real.
En la siguiente tabla se muestra algunas de las funciones matemáticas más usuales. Todas ellas requieren de un único argumento numérico (que puede ser natural o real) y todas nos devuelven un resultado numérico real.
7. Funciones anidadas
En programación puedes calcular una expresión a partir de un conjunto de valores y entonces usar el resultado del cálculo realizado como un valor a utilizar en una segunda expresión. Se puede entonces usar el valor obtenido en esta segunda expresión como un valor a utilizar en una tercera expresión. De nuevo se puede usar el valor solución de esta tercera expresión en una cuarta expresión, y así repetir el procedimiento cuantas veces lo consideres pertinente para resolver tu problema.
Lo indicado es totalmente equivalente a este otro proceso. Puedes usar un argumento para que una función calcule un valor y entonces usar ese valor como argumento en una segunda función. Se puede utilizar el valor retornado por la segunda función como argumento para una tercera función, y así sucesivamente repetir el proceso cuantas veces necesites.
Esto no es nuevo para ti. En matemáticas lo llamas composición de funciones.
La idea de la composición de funciones matemáticas recibe el nombre de funciones anidadas en el contexto de la programación.
En un lenguaje de programación no puedes componer las funciones como se te ocurran. Tienes que tener cuidado: el valor devuelto por una función deber ser una argumento aceptado por la siguiente función. Por ejemplo, como la función |
El siguiente programa muestra un ejemplo de anidamiento de funciones:
println(sin(3.14)/cos(3.14));
Realiza las siguientes acciones:
-
Calcula
sin(3.14)
, que es-0.0015
. -
Calcula
cos(3.14)
, que es0.9999
. -
Calcula el cociente
-0.0015/0.9999
, que es-0.0016
. -
Imprime el resultado
-0.0016
en la consola de texto.
Observa que las operaciones se realizan de "dentro" hacia "afuera", como harías en una composición de funciones matemáticas.
8. Precedencia de operadores y funciones
Estrictamente hablando, todas las expresiones matemáticas tienen muchos paréntesis aunque no se escriban. Por ejemplo, la expresión correcta de \(2\times 3+ 12.0:6\) es \(((2\times 3)+(12.0:6))\); pero en la práctica no solemos usar la segunda expresión sino la primera. La primera es más simple y a pesar de que no tiene todos los paréntesis sabemos el orden en el que los cálculos se deben de hacer: las multiplicaciones y divisiones preceden a las sumas y restas.
Este mismo principio también lo aplican los lenguajes de programación. Más concretamente, el orden de precedencia es el que a continuación se indica:
En la expresión numérica \(6:2\times 3\), el operador de división y de multiplicación tienen la misma prioridad. ¿Cuál se hace antes? ¿la división o la multiplicación? En caso de empate siempre se asocia por la izquierda, por lo que la expresión real es \((6:2)\times 3\), cuyo resultado es 9.
9. Comentarios
No todo lo que aparece en un programa son instrucciones. A veces, entre las instrucciones aparecen comentarios. Un comentario es un texto que aparece entre el código del programa cuyo contenido explica, normalmente en lenguaje natural, qué es lo que realizan las instrucciones a las que hace referencia.
Los comentarios son esenciales. Se estima que en grandes programas donde el código es muy complejo más de 2/3 de las líneas corresponden a comentarios. Quizás aplicar esta proporción a los programas que vamos a realizar sea un poco excesivo, pero pone de relieve la importancia de los comentarios.
Los comentarios no solo te ayudarán a aclarar qué quieres que hagan las instrucciones sucesivas, sino que además pemitirá explicar mejor a tus profesores qué es lo que estás haciendo con esas instrucciones.
El código se puede comentar de dos formas:
- Comentario en línea
-
Se presenta en la misma línea donde aparecen las instrucciones que se quieren comentar. El comentario empieza escribiendo los caracteres
//
y no puede ocupar más de una línea. Por ejemplo:
println (2+2); // Imprime la suma 2+2
Todo lo que aparezca a continuación de los caracteres //
incluidos ellos mismo será ignorado y no será procesado.
- Comentario en párrafos
-
Se suele presentar antes del grupo de instrucciones que se quieren comentar y puede ocupar varias líneas. El comentario empieza en un línea con los caracteres
/*
, en otra línea posterior finaliza con los caracteres*/
. Las dos líneas y todo lo que se escriba en las líneas intermedias se considerarán comentarios y por lo tanto no será procesado (será ignorado por Processing). Por ejemplo:
/* Imprime la suma 2+2 */ println (2+2);
10. Repasa y memoriza
-
En este documento hemos introducido las siguientes instrucciones simples: Una expresión con operadores, una llamada a una función, una instrucción compuesta por funciones anidadas.
-
println(4);
¡es una instrucción! Se reconoce porque termina en punto y coma. Esta instrucción se llamaprintln
. -
Además,
println(4);
¡es una función! porque después del nombre, que esprintln
, se abre un paréntesis '(' y se cierra el paréntesis ')' justo antes del punto y coma. Todas las funciones tienen apertura de paréntesis después de su nombre y cierre de paréntesis antes del punto y coma. -
Lo que se indica entre
(
y)
recibe el nombre de argumento si hay uno, o de argumentos si hay más de uno. Hay funciones que no requieren de argumento alguno. -
La función
print()
yprintln()
puede tener un argumento numérico o alfanumérico (una cadena de caracteres). -
Los argumentos también pueden ser el resultado de una expresión. Hay varios tipos de expresiones.
-
Una expresión numérica es una expresión matemática y como tal puede contener una o varias composiciones de funciones.
-
En una expresión numérica pueden aparecer operadores y/o funciones. Memoriza todas los operadores y las funciones matemáticas usuales.
-
Cuando una función aparece como argumento de otra función se dice que la primera está anidada en la segunda.
-
Cuando se evalúan una expresión numérica hay que tener en cuenta el orden de prioridad de operadores y funciones. Es fundamental memorizar el orden de precedencia.
-
La función principal de Processing se llama
setup()
y de aparecer será la primera función que se ejecute. Es una función que no tiene argumentos. -
En todos los programas se deben de poner comentarios. Son obligatorios y fundamentales. Cuantos más mejor.