Author Archives: Uriel

About Uriel

Programador en constante aprendizaje, futuro ing. en Desarrollo de Software. "La escuela es para socializar, internet es para aprender" Viviendo en la era javaScript.

Expresiones booleanas y operadores lógicos

Como en todos los lenguajes, Ruby tiene variables booleanas y operadores lógicos para el manejo de instrucciones de control, como el if, el switch y los ciclos. En realidad, en Ruby existen los objetos booleanos, es decir incluso este tipo de dato es un objeto en Ruby. Déjame explicarte esto claramente porque puede ser un poco confuso, en Ruby existen dos clases peculiares TrueClass y FalseClass, son clases muy peculiares porque tú no puedes crear objetos a partir de esas clases, de hecho, en el lenguaje sólo hay un objeto de la clase TrueClass y es el objeto True, del mismo modo la clase FalseClass sólo es la instancia de un objeto, False. Lo anterior puede parecer un poco confuso, ya que en lenguajes como JAVA true y false son palabras reservadas del lenguaje, y no objetos, como en Ruby, sin embargo su uso es similiar, así que no te preocupes por eso. Veamos a través de un ejemplo cómo es que funcionan los objetos True y False de Ruby.

  if True 
    puts "Esto siempre se ejecuta porque True siempre adopta el valor verdadero de un booleano"
  end
  if False
    puts "Esto nunca se ejecutara porque False siempre adopta el valor falso de un booleano"
  end

El ejemplo, creo expresa el funcionamiento de cada uno de ellos, aunque en realidad no es práctico. Antes de pasar a las expresiones lógicas, cabe mencionar que sólo dos clases son falsas en Ruby, es decir, cumplen un valor falso en un boolean, éstas son FalseClass y NilClass, hablaremos del objeto Nil más adelante en el curso. Operadores Lógicos. Si has programado en cualquier lenguaje, seguro estás familiarizado con las operaciones lógicas, que básicamente son expresiones que sólo pueden retornar un valor booleano verdadero cuando se cumple una condición, o un valor booleano falso cuando no se cumple la condición, en el caso particular de Ruby, sería retornar el objeto True y el objeto False respectivamente. Cabe apuntar que la condición a evaluar está dada por ciertos operadores, en este tutorial veremos los siguientes.

  • “< ” Menor que, evalúa si el objeto de la derecha es menor que el de la izquierda. Ejemplo:
     if 2<3 puts "2 es menor que 3"
  • “> ” Mayor que, evalúa si el objeto de la derecha es mayor que el de la izquierda. Ejemplo:
     if 3>2 puts "3 es mayor que 2"
  • “and/&& ” Se puede usar “&&” y “and”, ambos cumplen la función de retornar True cuando dos condiciones son True.
     if 2<3 and 3>2 puts "Retorna True :)"
  • “or/&& ” Se puede usar “||” y “or”, ambos cumplen la función de retornar True cuando una de dos condiciones es True, o ambas son True.
     if 2<3 or 3>2 puts "Alguna de las dos condiciones se cumplio"

Como anotación en los operadores and y or, te recomiendo usar las palabras en lugar de los símbolos || y &&. Como ves son los operadores básicos, no tomamos en cuenta el operador de negación porque en el siguiente artículo conocerás la contraparte de la instrucción if. En general estas operaciones, como te mencionaba, se usan para controlar el flujo de la aplicación, pero puede usarse para asignación de valores, ejecutar excepciones y más. Por ahora lo dejaremos en lo básico y comenzaremos usándolas con instrucciones de control en los siguientes tutoriales.

Curso de Ruby – Introducción al Lenguaje.

Con este post damos inicio al curso que estaremos presentando aquí en CódigoProgramación. La intención es llevarlos desde lo más básico del lenguaje de programación Ruby, a un nivel avanzado como el manejo de archivos, testing, POO y más.

Naturalmente si ya has programado, o estás buscando un lenguaje para iniciar a programar te preguntarás, ¿por qué habría de elegir Ruby? Para responder la pregunta, hagamos un poco de historia antes de ir a las cualidades de Ruby como lenguaje.

Ruby, fue creado por Yukihiro “Matz” Matsumoto que comenzó a trabajarlo en 1993 y lo sacó a la luz en 1995. Ruby combina algunas de las características de lenguajes como Python, Lisp, Perl y otros. De hecho, un dato curioso es que el nombre “Ruby” proviene de una parodia al lenguaje “Perl”. Matz creo el lenguaje esperando que fuera divertido programar en él, es decir, que el programador fuera feliz al utilizar Ruby, así pues dejaríamos de centrarnos en cómo aceptan las máquinas un lenguaje, para pensar en cómo las personas aceptan al lenguaje.

Si hablamos de las características del lenguaje, Ruby es un lenguaje totalmente orientado a objetos, lleva éste paradigma de programación al extremo puesto que incluso operadores aritméticos pueden considerarse objetos en Ruby. La sintaxis retoma algunas cosas de Python y Perl, sin embargo, en lo personal puedo decir que es considerablemente diferente a los lenguajes a los que estamos acostumbrados (C, JAVA, etc).

Algo interesante en Ruby es que puedes re escribir el lenguaje, esto significa que si, por ejemplo, por alguna extraña razón deseas un comportamiento distinto de la isntrucción if, podrás hacerlo. En el siguiente ejemplo de código agregamos un método a la clase Float (sí los flotantes también son objetos) para redondear números dado un entero pasado por parámetro.

class Float
def round_to(x)
(self * 10**x).round.to_f / 10**x
end
end

 

Por ahora no es necesario que entiendas la sintaxis del lenguaje, sólo e un ejemplo de cómo puedes agregar funcionalidades a los objetos del core de Ruby, o modificar comportamientos, además permite darte un idea de cómo luce el código en Ruby.

Pues bien, con esto quedamos con el tutorial de inicio, en el siguiente veremos la instalación y así poco a poco iremos yendo a cosas de niveles más difíciles.

Strings en Ruby.

El manejo de Cadenas o Strings es primordial en cualquier lenguaje, es por eso que este post esta dedicado a la clase String de Ruby y algunos métodos que te servirán para manipular cadenas.

Como sabemos, la clase String es utilizada para definir una cadena de texto, un conjunto de caracteres. Sobre este conjunto se pueden aplicar distintas operaciones, empecemos con una básica, la concatenación.

Concatenar significa unir 2 cadenas, en el caso de programación pueden unirse enteros o reales a un cadena, incluso objetos complejos que pueden representarse en una cadena pueden concatenarse, pudiera decirse que el operador de concatenación en Ruby es el siguiente : #{} para ver el cómo funciona veamos código de ejemplo:

#Concatenar cadenas.
resultado = 2+3
print "La suma de 2 + 3 = #{resultado}"

Como verás incluimos una variable dentro de la cadena a encerrándola en el operador que antes mencionábamos, bastante bien. En este caso se concatena el valor de una variable al String, si quisiéramos unir dos conjuntos de caracteres lo haríamos usando el operador <<.

cadena = "Hola"
cadena << "Mundo" #Agregar cadena a una existente.

En el ejemplo anterior concatenamos “Mundo” a “Hola”.

Ahora bien, pasemos a otro aspecto, en algunos lenguajes los operadores aritméticos están sobrecargados para ejercer otras funciones cuando se ejecuten sobre cadenas, veamos el ejemplo de la multiplicación.

cadena = "ja"*4 #retorna la cadena repetida 4 veces

Como el comentario en la instrucción indica, la operación anterior daría como resultado en cadena el valor “jajajaja” por multiplicar la cadena 4 veces.

Existen, además, métodos específicos de la clase String que permiten ejecutar operciones interesantes con las cadenas, por ejemplo:

nombre = "uriel"
print nombre.capitalize

En el ejemplo anterior mi nombre se imprimirá con la primera letra en mayúscula.

Y bueno, con eso dejamos la clase String para que en el siguiente artículo veamos cosas más avanzadas.

Conversión de tipos y alcance de variables.

Una vez hemos hablado un poco sobre las variables y los tipos de éstas, hablemos sobre cómo convertirlas y el alcance que tienen.

Alcance variables.

Cuando te refieres al alcance de una variable o al scope de la misma, haces referencia a, desde cuántos lugares puedo acceder a esa variable, es decir, si una variable es declarada dentro de un método, no podrás acceder a ella fuera de ese método, a menos claro que la declares como global.

En Ruby hay 3 tipos de variables, las globales, las de clase y las locales.

Las primeras se declaran con un signo de pesos ($) al inicio y pueden ser accedidas desde cualquier parte del script:

$global = "Uriel"
def ejecutar_global
 print $global
end
ejecutar_global()

En el caso de las variables de clase, son muy utilizadas en el desarrollo de aplicaciones web con Ruby on Rails, y su característica es que pueden ser accedidas desde cualquier parte de la clase en la que fueron declaradas, además  se identifican con un signo arroba al inicio (@), veamos el ejemplo:

class Ejemplo
  @global = ""
  def initialize()  
    @global = "Uriel"
  end  
  def ejecutar_global
    @global
  end	
end
e = Ejemplo.new()
print e.ejecutar_global()

Estoy muy seguro que el ejemplo anterior es mucho más complejo que lo que hasta ahora hemos visto, pero lo entenderás en futuros artículos, por ahora podrás ver cómo la variable @global es utilizada en distintos lugares de la clase.

Por último tenemos las variables locales, no iremos muy a fondo en ellas porque en realidad, son aquellas que no llevan un signo antes de su nombre, es decir las que vimos en el tutorial de Variables y Operadores.

Conversión de Tipos.

Nos enfocamos en 3 tipos de conversiones, de Real a Entero, de String a Entero y de Real/Entero a String.

Y lo ejemplificaremos de manera más sencilla a través de código.

  entero = 3.21.to_i #convertimos un flotante a entero.
  entero = "9".to_i #convertimos una cadena a entero
  cadena = entero.to_s #convertimos el entero a cadena
  flotante = "3.21".to_f #convertimos una cadena a flotante.

Como los ejemplos lo describen, to_f convierte un objeto entero o cadena a flotante, to_i lo hace a entero y to_s a cadena.

Seguimos avanzando y en el siguiente tema veremos manejo de cadenas con Ruby.