Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Try Except --finally-- (https://www.clubdelphi.com/foros/showthread.php?t=36111)

Caral 02-10-2006 20:24:10

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.:D
Saludos y Gracias
Saludos

maeyanes 02-10-2006 20:37:01

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...

seoane 02-10-2006 20:37:39

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;

dec 02-10-2006 20:41:12

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é. :D :D :D :D

dec 02-10-2006 20:48:38

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;

maeyanes 02-10-2006 20:52:40

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... :D


Saludos...

Caral 02-10-2006 20:54:24

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

dec 02-10-2006 20:58:25

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. :D :D :D

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. ;)

Caral 02-10-2006 21:48:17

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

dec 02-10-2006 21:53:53

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.

Bicho 02-10-2006 21:58:14

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

Caral 02-10-2006 22:03:37

Señores muy amables
Mi duda esta completamente evacuada y realmente he aprendido mucho
Muchisimas gracias.
Saludos

maeyanes 02-10-2006 22:09:40

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...

dec 02-10-2006 22:12:24

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. ;)


La franja horaria es GMT +2. Ahora son las 16:11:16.

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