Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-10-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Try Except --finally--

Hola de nuevo, Otra pregunta mas
Como quito todo esto que me desagrada usando try, execpt o algo asi, ya que como vereis uso demasiados if, si no, no me da el resultado que busco.
En el caso de Case of, no lo entiendo bien por eso no lo uso.
Hago esto:
Código Delphi [-]
if ComboBox3.Text = 'Multiplicar' Then
 Edit2.Text := FloatToStr(StrToFloat(ComboBox1.Text) * StrToFloat(ComboBox2.Text));
 If Edit1.Text <> Edit2.Text Then
 Label1.Caption:= 'Tu Respuesta es Incorrecta';
 If Edit1.Text <> Edit2.Text Then
 Image1.Visible:= False;
 If Edit1.Text <> Edit2.Text Then
 Image2.Visible:= True;
 If Edit1.Text <> Edit2.Text Then
 Image3.Visible:= False;
 If Edit1.Text <> Edit2.Text Then
 Button2.Visible:= False;
 If Edit1.Text = Edit2.Text Then
 Label1.Caption:= 'Bien Hecho Respuesta Correcta';
 If Edit1.Text = Edit2.Text Then
 Image1.Visible:= True;
 If Edit1.Text = Edit2.Text Then
 Image2.Visible:= False;
 If Edit1.Text = Edit2.Text Then
 Image3.Visible:= False;
 If Edit1.Text = Edit2.Text Then
 Button2.Visible:= False;
Como veis es una repeticion de lo mismo, pero si no lo hago el if solamente ve el primer dato y obvia los demas.
Ya se codigo de principiante.
Saludos y Gracias
Saludos
Responder Con Cita
  #2  
Antiguo 02-10-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Para simplificar algunas líneas puedes hacer:

Código Delphi [-]
var
  Correcto: Boolean;

begin
  if ComboBox3.Text = 'Multiplicar' Then
    Edit2.Text := FloatToStr(StrToFloat(ComboBox1.Text) * StrToFloat(ComboBox2.Text));
  Correcto := Edit1.Text = Edit2.Text;
  If Correcto Then
    Labe1.Caption := 'Bien Hecho Respuesta Correcta'
  else
    Label1.Caption:= 'Tu Respuesta es Incorrecta';
  Image1.Visible := not Correcto;
  Image2.Visible := Correcto;
  Image3.Visible := not Correcto;
  Button2.Visible := not Correcto
end


Saludos...
Responder Con Cita
  #3  
Antiguo 02-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vamos por partes, yo no veo necesario de try ... except, yo más bien te aconsejaria el uso de begin ... end. Es decir:

Código Delphi [-]
if ComboBox3.Text = 'Multiplicar' Then
 Edit2.Text := FloatToStr(StrToFloat(ComboBox1.Text) * StrToFloat(ComboBox2.Text));
if Edit1.Text <> Edit2.Text Then
 begin
   Label1.Caption:= 'Tu Respuesta es Incorrecta';
   Image1.Visible:= False;
   Image2.Visible:= True;
   Image3.Visible:= False;
 end else
 begin
   Label1.Caption:= 'Bien Hecho Respuesta Correcta';
   Image1.Visible:= True;
   Image2.Visible:= False;
   Image3.Visible:= False;
 end;
 Button2.Visible:= False;
Responder Con Cita
  #4  
Antiguo 02-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A mí se me ocurre a bote pronto algo así:

Código Delphi [-]
  Image3.Visible:= False;
  Button2.Visible:= False;

  if ComboBox3.Text = 'Multiplicar' then
    Edit2.Text := FloatToStr(StrToFloat(ComboBox1.Text) * StrToFloat(ComboBox2.Text));

  if Edit1.Text <> Edit2.Text then
  begin
    Label1.Caption:= 'Tu Respuesta es Incorrecta';
    Image1.Visible:= False;
    Image2.Visible:= True;
  end
  else
  begin
   Label1.Caption:= 'Bien Hecho Respuesta Correcta';
   Image1.Visible:= True;
   Image2.Visible:= False;
 end;

Edito: Como sigamos "refactorizando" al final no sabremos si la respuesta fue correcta o qué.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-10-2006 a las 20:45:15.
Responder Con Cita
  #5  
Antiguo 02-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Maeyanes
Para simplificar algunas líneas [de código fuente] (...)
Yo pienso que a veces pueden y aun deben "duplicarse" ciertas líneas con el fin de conseguir cierta legilibilidad en el código fuente. Es por eso que suelo utilizar el condicional "if" en lugar del operador "ternario" en JavaScript, por ejemplo, empero, es sólo un ejemplo. En todo caso ya digo: a veces creo que es mejor "duplicar" algo (aparentemente), si esto consigue que el código fuente se entienda mejor.

Claro que es mi opinión y no pretendo decir nada en contra de ti Maeyanes, ni mucho menos.

Por ejemplo, el bloque de código que he expuesto anteriormente puede "leerse" más o menos rápida y eficazmente sólo por sus comentarios:

Código Delphi [-]
  // Siempre
  Image3.Visible:= False;
  Button2.Visible:= False;

  // A veces
  if ComboBox3.Text = 'Multiplicar' then
    Edit2.Text := FloatToStr(StrToFloat(ComboBox1.Text) * StrToFloat(ComboBox2.Text));

  // Depende
  if Edit1.Text <> Edit2.Text then
  begin
    Label1.Caption:= 'Tu Respuesta es Incorrecta';
    Image1.Visible:= False;
    Image2.Visible:= True;
  end
  else
  begin
   Label1.Caption:= 'Bien Hecho Respuesta Correcta';
   Image1.Visible:= True;
   Image2.Visible:= False;
 end;
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-10-2006 a las 20:51:36.
Responder Con Cita
  #6  
Antiguo 02-10-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Bueno, yo creo que el código que puse es perfectamente legible, al usar la variable lógica Correcto.

Pero bueno, cada quien tiene su estilo...


Saludos...
Responder Con Cita
  #7  
Antiguo 02-10-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Gracias a Todos
Seoane, por alguna razon que desconozco con esta forma que me indicas, que ya intente, aveces funciona y aveces no, es estraño que pase esto ya que se supone que un codigo o funciona o no, pero pasa, voy a revisarlo denuevo ya que tal vez el begin no lo coloque en donde debia.
Muchas gracias a todos por sus respuestas.
saludos
Responder Con Cita
  #8  
Antiguo 02-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Maeyanes
Bueno, yo creo que el código que puse es perfectamente legible, al usar la variable lógica Correcto.
Conste que yo no dije lo contrario. Aunque, no lo voy a negar, acaso fue la comparación de tu código con el mío lo que me llevó a pensar y a exponer mi anterior opinión. Ahora, llevas razón, que cada cual eliga: mientras no te tenga a sueldo no podré exigirte (y tú negarte, por supuesto) que escribas el código de una determinda manera.

De todos modos, efectivamente, una cosa es seguir un determinado "patrón" escribiendo el código y otra la "inteligibilidad" de este... en esto puede que yo no sea quién para decir que una manera es mejor que otra... únicamente puedo limitarme a exponer mi opinión y esperar que alguien no la encuentre del todo descabellada: o lo contrario, que me rebata la misma con algún argumento que me haga rectificar.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 02-10-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Para seguir con la duda
La palabra (else) no significa en este caso (de lo contrario) osea que:
If x = Q then
tal cosa
else // de lo contrario
tal otra cosa
O algo asi, con esto me queda una duda en el codigo de Maeyanes:

Código Delphi [-]
// Varible general perfecto
var
  Correcto: Boolean;

Código Delphi [-]
// evento perfecto
begin
  if ComboBox3.Text = 'Multiplicar' Then
    Edit2.Text := FloatToStr(StrToFloat(ComboBox1.Text) * StrToFloat(ComboBox2.Text));
  Correcto := Edit1.Text = Edit2.Text;
  If Correcto Then
    Labe1.Caption := 'Bien Hecho Respuesta Correcta'
   
   // Aqui empieza mi duda
else 
   // Aqui empieza el (de lo Contrario), si es asi leera ? (Not Correcto) ?
   // Ya que a mi modo de ver si la opcion es correcta el else no se dara
  
  Label1.Caption:= 'Tu Respuesta es Incorrecta';
  Image1.Visible := not Correcto;
  Image2.Visible := Correcto;
  Image3.Visible := not Correcto;
  Button2.Visible := not Correcto
end;
Lo comento porque este codigo es nuevo para mi y veo que es realmente practico, pero creo que talvez por la prisa no se vieron ciertas cosas o bien estoy equivocado, me gustaria que me lo indicaran, si son tal amables.
Gracias
Responder Con Cita
  #10  
Antiguo 02-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Yo diría que lo que ocurre es que una cosa no quita la otra, es decir, efectivamente, el "else" de una condición indica "el camino alternativo a seguir", pero, dentro del bloque "else" es perfectamente posible utilizar el valor de la variable "Correcto".

Piensa además que la variable "Correcto" se "inicializa" antes de la condición, esto es, está disponible para cualquiera de los caminos que se tomen en esta. Otra cosa sería algo así:

Código Delphi [-]
var
  correcto: boolean;
begin
  if LoQueSea then
    correcto := true;
  else
    Edit1.Visible := correcto;
end;

Creo que el propio compilador se encargaría de alertarte de que el mismo no es del todo correcto, valga la redundancia, puesto que la variable "correcto" no estaría inicializada en el bloque "else" en este caso. Ahora bien, hacer esto no implica ningún problema y puede ser lo que se precise:

Código Delphi [-]
var
  correcto: boolean;
begin
  correcto := true;

  if LoQueSea then
    correcto := false;
  else
    Edit1.Visible := correcto;

  {...}
end;

¿Qué valor tendría "Visible" si llegara a ejecutarse el código del bloque "else"? Efectivamente, "true", puesto que ese es el valor que damos a la variable "correcto" anteriormente.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-10-2006 a las 21:58:45.
Responder Con Cita
  #11  
Antiguo 02-10-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Hola yo lo que creo que está preguntando en este caso es si ésto se ejcutará en caso de que el valor de correcto sea true

Código Delphi [-]
Image1.Visible := not Correcto;
  Image2.Visible := Correcto;
  Image3.Visible := not Correcto;
  Button2.Visible := not Correcto

Para responderte, si se ejecuta, ya que esas instrucciones estan fuera del if o el else. Piensa que para que se ejecuten dentro del if o el else deben estar incluidas ademas dentro de un bloque begin..end.

Código Delphi [-]
else begin
  Label1.Caption:= 'Tu Respuesta es Incorrecta';
  Image1.Visible := not Correcto;
  Image2.Visible := Correcto;
  Image3.Visible := not Correcto;
  Button2.Visible := not Correcto
end;

En este caso no se ejecutaria si correcto fuera true. Creo que es eso lo que querías decir.

Espero te sirva.

Saludos
Responder Con Cita
  #12  
Antiguo 02-10-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Señores muy amables
Mi duda esta completamente evacuada y realmente he aprendido mucho
Muchisimas gracias.
Saludos
Responder Con Cita
  #13  
Antiguo 02-10-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Aclarando un poco más las cosas, esto:
Código Delphi [-]
If Correcto Then
  Label1.Caption := 'Bien Hecho Respuesta Correcta'
else
  Label1.Caption:= 'Tu Respuesta es Incorrecta';
Es equivalente a esto:
Código Delphi [-]
If Correcto Then
begin
  Label1.Caption := 'Bien Hecho Respuesta Correcta'
end
else
begin
  Label1.Caption:= 'Tu Respuesta es Incorrecta'
end;

Saludos...
Responder Con Cita
  #14  
Antiguo 02-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

O lo que es lo mismo, no es preciso utilizar un bloque "begin .. end" si sólo se precisa una instrucción a continuación del "if" o "else" de turno. El bloque "begin .. end", precisamente, sirve para poder incluir tantas instrucciones como sean precisas.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:47:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi