Foros del Web » Programando para Internet » Ruby »

Manejo de excepciones

Estas en el tema de Manejo de excepciones en el foro de Ruby en Foros del Web. Gente una pregunta, tengo por ejemplo una clase punto y otra clase circulo como podría hacer para crear un circulo con un punto, pero si ...
  #1 (permalink)  
Antiguo 18/11/2014, 17:44
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 9 meses
Puntos: 0
Manejo de excepciones

Gente una pregunta, tengo por ejemplo una clase punto y otra clase circulo como podría hacer para crear un circulo con un punto, pero si creo ese punto con por ejemplo (1,zz) o algo invalido manejarlo por excepciones

Código Python:
Ver original
  1. class Hoja
  2.     def initialize()
  3.         @figuras = []
  4.     end
  5.     def AreaTotal()
  6.         tot = 0
  7.         @figuras.each{|fig| tot = tot + fig.area}
  8.         return tot
  9.     end
  10.     def agregar(fig)
  11.         @figuras.push(fig)
  12.     end
  13.     def to_s()
  14.         return "Hoja: " + @figuras.to_s
  15.     end
  16.     def inspect()
  17.         return self.to_s
  18.     end
  19.     def exportar(nombre)
  20.         begin
  21.             archivo = File.open(nombre,'w')
  22.             @figuras.each{|fig| archivo.puts fig}
  23.         rescue
  24.             puts "No se a podido crear el archivo"
  25.         end
  26.         archivo.close
  27.     end
  28.     def importar(nombre)
  29.         h = Hoja.new
  30.         begin
  31.             archivo = File.open(nombre,'r')
  32.             while linea = archivo.gets
  33.                 linea = linea.split(' ')
  34.                 caso = case linea[0]
  35.                     when "Circulo" then Circulo.creacion(linea)
  36.                     when "Cuadrado" then Cuadrado.creacion(linea)
  37.                     when "Rectangulo" then Rectangulo.creacion(linea)
  38.                 end
  39.                 h.agregar(caso)
  40.             end
  41.         rescue
  42.             puts "No se a podido abrir el archivo"
  43.         end
  44.         archivo.close
  45.         return h
  46.     end
  47. end
  48.  
  49. class Punto
  50.     def initialize(x1 = 0,y1 = 0)
  51.         @x = x1
  52.         @y = y1
  53.     end
  54.     def px()
  55.         return @x
  56.     end
  57.     def py()
  58.         return @y
  59.     end
  60.     def rect(p)
  61.         rec = Rectangulo.new(p)
  62.         rec.origen(self)
  63.         return rec
  64.     end
  65.     def to_s()
  66.         return @x.to_s + "," + @y.to_s
  67.     end
  68.     def inspect()
  69.         return self.to_s
  70.     end
  71. end
  72.  
  73. class Figura
  74.     def initialize()
  75.         @origen = Punto.new()
  76.     end
  77.     def mover(p)
  78.         @origen = Punto.new(@origen.px() + p.px(),@origen.py() + p.py())
  79.     end
  80.     def origen(p)
  81.         @origen = Punto.new(p.px(),p.py())
  82.     end
  83.     def to_s()
  84.         c = @origen.to_s
  85.         muestra = self.nombre + c + "," + self.caracteristica
  86.         return muestra
  87.     end
  88.     def inspect()
  89.         return self.to_s
  90.     end
  91.    
  92. end
  93.  
  94. class Circulo < Figura
  95.     def initialize(r = 1)
  96.         super()
  97.         @radio = r
  98.     end
  99.     def area()
  100.         return 3.14159*@radio
  101.     end
  102.     def nombre()
  103.         return "Circulo "
  104.     end
  105.     def caracteristica()
  106.         return @radio.to_s
  107.     end
  108.     def self.creacion(linea)
  109.         begin
  110.             linea = linea[1].split(',')
  111.             circulo = self.new(linea[2].to_i)
  112.             circulo.origen(Punto.new(linea[0].to_i,linea[1].to_i))
  113.             return circulo
  114.         rescue => err
  115.             puts err.message
  116.         end
  117.     end
  118. end
  119.  
  120. class Cuadrado < Figura
  121.     def initialize(l = 1)
  122.         super()
  123.         @lado = l
  124.     end
  125.     def area()
  126.         return @lado*@lado
  127.     end
  128.     def nombre()
  129.         return "Cuadrado "
  130.     end
  131.     def caracteristica()
  132.         return @lado.to_s
  133.     end
  134.     def self.creacion(linea)
  135.         begin
  136.             linea = linea[1].split(',')
  137.             cuadrado = self.new(linea[2].to_i)
  138.             cuadrado.origen(Punto.new(linea[0].to_i,linea[1].to_i))
  139.             return cuadrado
  140.         rescue => err
  141.             puts err.message
  142.         end
  143.     end
  144. end
  145.  
  146. class Rectangulo < Figura
  147.     def initialize(p = Punto.new)
  148.         super()
  149.         @base = p.px
  150.         @altura = p.py
  151.     end
  152.     def area()
  153.         return @base*@altura
  154.     end
  155.     def nombre()
  156.         return "Rectangulo "
  157.     end
  158.     def caracteristica()
  159.         return @base.to_s + "," + @altura.to_s
  160.     end
  161.     def self.creacion(linea)
  162.         begin
  163.             linea = linea[1].split(',')
  164.             rectangulo = self.new(Punto.new(linea[2].to_i,linea[3].to_i))
  165.             rectangulo.origen(Punto.new(linea[0].to_i,linea[1].to_i))
  166.             return rectangulo
  167.         rescue => err
  168.             puts err.message
  169.         end
  170.     end
  171. end

Aclarando un poco mas el tema pongo un ejemplo

Circulo 10,10,5 (Esto lo tendria que tomar)
Cuadrado 5,5,zz (Esto ya no)
Rectangulo 10,10,10 (Esto si)
  #2 (permalink)  
Antiguo 18/11/2014, 17:45
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Manejo de excepciones

PD: puse codigo en python pero es de ruby
  #3 (permalink)  
Antiguo 26/11/2014, 09:57
 
Fecha de Ingreso: noviembre-2014
Mensajes: 1
Antigüedad: 10 años
Puntos: 0
Respuesta: Manejo de excepciones

Puedes hacer un tratamiento como el siguiente:
Cita:
def accion
#proceso correcto de la accion en cuestion
rescue Exception => e
flash[:error] = e.message
redirect_to :back
end
Importante: Debes tener validado ya sea modelo o algun otro lugar los cmapos donde vas a guardar los valores de los puntos, de echo se puede validar en el modelo y evitas las excepciones, es mas efectivo
Nota: El bloque redirect_to :back es para volver a la pagina anterior y evitar un error 505

Etiquetas: excepciones, manejo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:56.