Rangos. Bloques. Iteradores. For

RANGOS

Un rango es un tipo de variable que representa unos elementos consecutivos.

Sintaxis: (desde..hasta)

(1..10) representa a los números del 1 al 10 inclusive.

('b'..'x') representa las letras de la 'b' a la 'x' inclusive

(desde...hasta) con 'tres' puntos, significa lo mismo pero 'el hasta' no es inclusive

=== es un ´comparador' para expresar condiciones de pertenencia al rango.

#rangos

if (1..10)===10
puts "el 10 esta incluido"
else
puts "el 10 no esta incluido"
end
if
(1...10)===10
puts "el 10 esta incluido"
else
puts "el 10 no esta incluido"
end


if
('b'..'e')==='e'
puts "letra 'e' incluida"
else
puts "letra 'e' no incluida"
end

if
('b'...'e')==='e'
puts "letra 'e' incluida"
else
puts "letra 'e' no incluida"
end

# las variables tambien pueden ser rangos.

vrango=('a'..'z')
if vrango==='ñ'
puts "letra 'ñ' incluida"
else
puts "letra 'ñ' no incluida"
end


el 10 esta incluido
el 10 no esta incluido
letra 'e' incluida
letra 'e' no incluida
letra 'ñ' no incluida


BLOQUES

En ruby el concepto de bloque es muy importante

Un bloque son 'lineas' de codigo entre {}, o entre do y end

{.....} o do.......end

# Ejemplos de bloques
{a=5}
#
{
a=3
puts "uno"
puts "dos"
puts a
}
#
do
puts "linea 1"
if i==1
puts "linea2"
end
end


Un bloque puede tener parametros. Se escriben al principio etre caracteres |

{|par1|..|parn|......} o do|par1|...|parn|......end


# Ejemplos de bloques con parametros

#aqui el parametro x
{|x|a=x}
#aqui los parametros var1,var2
{|var1|var2|
a=3
puts var1
puts var2
puts a
}
#aqui los parametros x,y
do |x|y|
puts "linea 1"
if x==1
puts "linea2",x,y
end
end

ITERADORES

Un iterador es una función o método al que se le pasa como parámetro un bloque y ejecuta el bloque hasta que se cumple una condición

La sintasix es iterador bloque. En las instruciones del iterador nos dirán cual es la condición para que termine el iterador, si hay que pasar un parámetro al bloque y que significado tiene ese parametro

Ejemplos:

  • El iterador each de un string, nos ejecuta el bloque por cada palabra(pasandole el caracter separador) que hay en el string y nos deja la palabra en el parámetro del bloque
  • El iterador each_byte de un string, nos ejecuta el bloque por cada byte que hay en el string y nos deja el codigo ascii del byte en el parámetro del bloque
  • El iterador each de un rango, nos ejecuta el bloque por cada elemento del rango y nos deja el elemento del rango en el parámetro del bloque

#iteradores
#
#each de un rango
puts "contando de 'a' a 'c'"
('a'..'c').each{|var|
print "var= ",var,"\n"
}
puts "-------------"
#each de un string
#con espacio de separador
puts "separando palabras:"
"esto es una prueba"
.each(' ') do |palabra|
puts palabra
end
#byte es el ascii de la letra
#byte.chr es el caracter correspondiente
puts "-------------"
puts "las letras de una palabra"
"palabra"
.each_byte do|byte|
print "ascii=",byte,"\n"
print "caracter='",byte.chr,"'\n"
end
contando de 'a' a 'c'
var= a
var= b
var= c
-------------
separando palabras:
esto
es
una
prueba
-------------
las letras de una palabra
ascii=112
caracter='p'
ascii=97
caracter='a'
ascii=108
caracter='l'
ascii=97
caracter='a'
ascii=98
caracter='b'
ascii=114
caracter='r'
ascii=97
caracter='a'

FOR

En ruby, el bucle for es un poco complicado, pero puede ser bastante util

Su sintaxis es for elemento in coleccion...end. Una coleccion puede ser casi cualquier cosa, pero por ahora solo lo utilizaremos con rangos.

Es equivalente a colecion.each do|elemento|....end.

#prueba de for

puts "con for"
for elemento in (1..3)
puts elemento
end
puts "---------"
puts "con each"
(1..3).each do |elemento|
puts elemento
end

con for
1
2
3
---------
con each
1
2
3

.----oOO--OOo----.

No hay comentarios: