Control de flujo f#

Solo disponible en BuenasTareas
  • Páginas : 6 (1448 palabras )
  • Descarga(s) : 0
  • Publicado : 26 de enero de 2012
Leer documento completo
Vista previa del texto
FLUJOS DE CONTROL.
IF ... THEN ... ELSE
F # tiene una fuerte noción de los flujos de control. De esta manera se diferencia de muchos lenguajes funcionales puros, donde la noción de flujo de control es muy floja, ya que las expresiones pueden ser evaluadas esencialmente en cualquier orden. Se puede ver la fuerte noción de flujo de control en la siguiente if ... then ... else ... expresión.

Enel F # el if ... then ... else ... construct es una expresión, lo que significa que devuelve un valor. Uno de dos valores diferentes será devuelto, en función del valor de la expresión booleana entre las palabras clave if y then.
El siguiente ejemplo ilustra esta situación. El if ... then ... else ... la expresión se evalúa para devolver " cabezas " o "colas" en función de si el programa seejecuta en un segundo par o un segundo impar.
#light
let result =
if System.DateTime.Now.Second % 2 = 0 then
" cabezas”
else
"colas"
print_string result

La expresión if ... then ... else ... tiene algunas implicaciones que no se puede esperar si usted está más familiarizado con el estilo de programación imperativo. F # ' requiere que los valores devueltos por la expresión if ... then ...else ... deben ser del mismo tipo, o el compilador generará un error. Así pues, si en el ejemplo anterior tuviera que reemplazar la cadena "colas" con un valor entero o booleano, se llega a un error de compilación. Si realmente necesita los valores de ser de diferentes tipos, puede crear un if ... then ... else ... la expresión de tipo obj (versión F # 's de System.Object), el siguiente ejemplomuestra cómo hacer esto. Se imprime en «cabezas» o falsos a la consola.

#light
let result =
if System.DateTime.Now.Second % 2 = 0 then
box " cabezas "
else
box false
print_any result

Programadores imperativos puede ser sorprendido de que en una expresión if ... then ... else ... debe tener un else si la expresión devuelve un valor. Esto es bastante lógico si se piensa en ello y si setiene en cuenta los ejemplos. Si el else es retirado del código, al identificador result no puede ser asignado un valor cuando el if evaluada como falso, y que los identificadores no inicializados es algo que F #, y la programación funcional en general, apunta a evitar.

F # tiene algunas construcciones imperativas de flujo de control. Además con el uso imperativo del if, también hay while y buclesfor.

La principal diferencia el uso de la expresión if en el estilo imperativo, es decir, su uso con una función que devuelve el tipo unit, es que no se ven obligados a utilizar un else, como en el siguiente ejemplo se muestra:

#light
if System.DateTime.Now.DayOfWeek = System.DayOfWeek.Sunday then
print_endline "Sunday Playlist: Lazy On A Sunday Afternoon - Queen"

Aunque no esnecesario disponer de una expresión else si la expresión if es del tipo unit, puede agregar uno si es necesario. Esto también debe tener el tipo unit o el compilador emitirá un error.
El siguiente ejemplo lo demuestra:

#light
if System.DateTime.Now.DayOfWeek = System.DayOfWeek.Monday then
print_endline "Monday Playlist: Blue Monday - New Order"
else
print_endline "Alt Playlist: Fell In LoveWith A Girl - White Stripes"

Puede utilizar los espacios en blanco para detectar dónde termina una expresión if. El código que pertenece a la expresión if se sangra, y la expresión if termina cuando vuelve a su sangría original. Por lo tanto, en el ejemplo siguiente, la cadena " "Tuesday Playlist: Ruby Tuesday – Rolling Stones" se imprimirá en un martes, y " Everyday Playlist: Eight Days A Week -Beatles" se imprimirá todos los días de la semana.

#light
if System.DateTime.Now.DayOfWeek = System.DayOfWeek.Tuesday then
print_endline "Tuesday Playlist: Ruby Tuesday - Rolling Stones"
print_endline "Everyday Playlist: Eight Days A Week - Beatles"

Si desea que varias sentencias formen parte de la declaración if, entonces usted simplemente les daría la misma sangría, como se muestra...
tracking img