lunes, 26 de diciembre de 2016

Un resumen de Scala for the Impatient, parte 4

Bloques de código y asignaciones.

Un Bloque de código son un conjunto de expresiones. En scala los bloques de código, están delimitados por llaves {} y a diferencia de java o C los bloques de código retornan valor. Gracias a esto podemos inicializar un valor a partir de una expresiòn:

val distance = { val dx = x - x0; val dy = y - y0; sqrt(dx * dx + dy * dy) }

Como ya dijimos un bloque de código que no devuelva valor retornara Unit. La asignación no retorna valor por lo tanto si hacemos lo siguiente:

val x = y = 2

x no va a contener nada o Unit

Por lo tanto un bloque que termine en asignación sera de tipo Unit :

{ r = r * n; n -= 1 }

Input y Output.

Para imprimir algo podemos utilizar la función print o println :

print("Answer: ")
println(42)

Similar a :

println("Answer: " + 42)

También podemos utilizar print como C:

printf("Hello, %s! You are %d years old.\n", "Fred", 42)

Podemos leer una linea de tipo String con ReadLine, a la vez podemos leer teniendo en cuenta el tipo de lo que leemos con readInt, readDouble, readByte, readShort, readLong, readFloat, readBoolean, o readChar.

Loops.

Scala tiene el while similar a java o c:

while (n > 0) {
   r = r * n
   n -= 1
}

Scala no cuenta con el for con el formato (inicializar; condición; incrementar o actualizar) si necesitamos esta expresión tenemos 2 opciones o utilizar el while o podemos usar el for de esta forma:

for (i <- 1 to n)
r = r * i

Si recuerdan  “1 to n” retorna un rango de 1 hasta n inclusive, por lo tanto i va tomar un valor del rango por iteración. Por supuesto i no puede ser val debe ser var

Si necesitamos iterar hasta n-1 podemos utilizar “until” que retorna un rango de 1 hasta n excluyendo a n.

val s = "Hello"
var sum = 0
for (i <- 0 until s.length) // Last value for i is s.length - 1
sum += s(i)

En el siguiente ejemplo no es necesario un indice podemos iterar por los caracteres directamente.

var sum = 0
for (ch <- "Hello") sum += ch