En términos simples, las funciones son algo que toman unos datos de entrada (argumentos), los procesan y generan un resultado. Por ejemplo, Racket tiene una función ya definida llamada circle, con la cual se genera un círculo a partir de unos argumentos suministrados por el usuario como lo son el radio del circulo, el modo (relleno "solid" o sin relleno "outline") y el color.
Los programadores pueden tambien definir sus propias funciones para luego utilizarlas cuando las necesiten.
A continuación se plantea el caso en el que un código repetido puede convertirse en una función.
Análisis de caso
Un semáforo tiene tres luces: una roja, otra amarilla y una verde. Cada luz es representada con un círculo y su respectivo color. Para dibujar los círculos, se utiliza la función circle. Asi mismo, los círculos se colocan uno encima del otro mediante la función above. Tanto circle como above son funciones que vienen incluidas en Racket:
(require 2htdp/image)
(above (circle 40 "solid" "red")
(circle 40 "solid" "yellow")
(circle 40 "solid" "green") )
De lo anterior, se observa que circle 40 "solid" permanece fijo y se repite varias veces. Por el contrario, el valor de cada color es variable.
Para definir una función que reemplace el código repetido (circle 40 "solid"), lo primero es darle un nombre a dicha función. En el curso original, la función ha sido nombrada "bulb".
Luego se procede a identificar cuales son los argumentos de la función. En este caso, se toma como argumento el dato variable, es decir, el color. Dicho argumento puede representarse mediante una letra o palabra, la cual será "c".
Luego se determina cual es el cuerpo de la función, es decir, la operación que se va a realizar sobre el argumento (el color). En este caso, se toma como cuerpo de la función el dato fijo, es decir, el código repetido circle 40 "solid". Dicho código se encargara de dibujar el círculo de 40 pixeles de radio y rellenado con el color especificado en el argumento.
Para definir la función en Racket, se utiliza la expresión define, tal y como se indica a continuación:
(define (nombre_función argumento) (operación argumento) )
El código de la definición de la función quedaría así:
(define (bulb c)
(circle 40 "solid" c))
Téngase en cuenta que el argumento (c) que aparece al lado del nombre de la función y de la operación es el mismo.
Ahora bien, en este paso puede probarse la función con el color amarillo. Para ello se "llama" a la función utilizando el argumento "yellow" como se indica abajo:
(bulb "yellow")
El código completo de la prueba es el siguiente:
(require 2htdp/image)
(define (bulb c)
(circle 40 "solid" c))
(bulb "yellow")
Siguiendo con el desarrollo de la tarea, se deben colocar los círculos uno encima del otro. Esto se logra llamando a la función above, tal y como estaba antes, solo que esta vez la función above va a tener como argumentos varias funciones bulb, las cuales a su vez tienen como argumento un color:
(above (bulb "red") (bulb "yellow") (bulb "green") )
El código completo quedaría así:
(require 2htdp/image)
(define (bulb c)
(circle 40 "solid" c))
(above (bulb "red") (bulb "yellow") (bulb "green") )
Anterior
Siguiente
Apuntes del lenguaje de programación "Racket", tomados del curso virtual "How to code: simple data", que hace parte de la serie "Software development", impartida por University of British Columbia a través de edx.org. A este curso se puede acceder de forma gratuita. Los apuntes los estaré colocando en la médida que vaya avanzando en el curso.
Suscribirse a:
Enviar comentarios (Atom)
Cómo programar: datos simples (21) - Enumeración
Diseñar una definición de datos para representar las letras de calificaciones en un curso. Estas letras son A, B y C, que significan bueno,...



No hay comentarios:
Publicar un comentario