elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  ¿Se asume el valor del else?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Se asume el valor del else?  (Leído 2,369 veces)
Orb

Desconectado Desconectado

Mensajes: 81


Ver Perfil
¿Se asume el valor del else?
« en: 22 Diciembre 2014, 03:18 am »

Buenas.

No sé si el título está bien formulado , pero allá va mi cuestión.
Actualmente ando con los condicionales de vb.net , y tras empollarme la lección , me puse a intentar crear un código que , al introducir un número en un textbox te dijera si era mayor , menor , o igual que el número pi(Una tontería , pero algo tenía que hacer para practicar)
Total que me puse a ello y busqué mas información con respecto a los condicionales.
Observé en diversos sitios que añadían el else , y la última condición se "auto-completaba" por decirlo así.
Os pondré un ejemplo , este es el código que hice , se basa en un textbox y un button que al ser pinchado te dice si es mayor , igual o menor ;

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.        Dim mensaje1 As String
  5.        Dim mensaje2 As String
  6.  
  7.        If txt1.Text < 3.14 Then
  8.            mensaje1 = "Es menor que pi"
  9.            MsgBox(mensaje1)
  10.        ElseIf txt1.Text = 3.14 Then
  11.            mensaje2 = "Es  igual que pi"
  12.            MsgBox(mensaje2)
  13.        Else
  14.            MsgBox(" Es mayor que pi")
  15.        End If
  16.    End Sub

(También me di cuenta de que podía acortar bastante el código , como por ejemplo no declarar los mensajes que te tira al comprobar como string ya que directamente puedes ponerlo como msgbox en la condición)
Ahora viene mi duda , veréis que tanto para el if como para el elseif establezco por así decirlo la condición , tanto = 3.14 como < 3.14 , pero al poner el else , directamente interpreta que es mayor , y así lo comprobé al ejecutarlo , que directamente si ponías un número mayor te tiraba el mensaje de que era mayor , sin necesidad de establecer el >3.14
Mi pregunta es , ¿Esto por qué sucede así?¿Siempre es similar?¿Sirve para Strings y demás?Porque no acabo de entender su funcionamiento , busqué un par de ejemplos , e incluso en la página oficial de microsoft pero no sirvió demasiado para despejarme la duda.

Un saludo y muchas gracias , a pesar de que mis dudas sean tan imperdonables xD


« Última modificación: 22 Diciembre 2014, 03:30 am por Orb » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: ¿Se asume el valor del else?
« Respuesta #1 en: 22 Diciembre 2014, 05:26 am »

Mi pregunta es , ¿Esto por qué sucede así?¿Siempre es similar?

Sucede porque es la única posibilidad restante.

Es decir, tú has hecho una condición para cuando es Menor, y otra condición para cuando es Igual, entonces obviamente la última condición Else solo puede procesar los números que sean mayores, ya que no hay existe ninguna otra posibilidad.

La condicional que has mostrado If + ElseIf + Else se puede traducir de la siguiente manera:
Código:
Si "x" es menor que "y", entonces...

Si "x" es igual que "y", entonces...

Si "X" no es menor ni igual que "y", entonces...

fín

Si las condiciones anteriores al Else no se cumplieron, entonces... solo puede ser Mayor.


¿Siempre es similar?

No se muy bien que estás preguntando, si en tu código quitas la condición de Igual (el ElseIf), y dejas el Else, entonces las instrucciones del bloque Else se procesarán cuando el valor sea Igual o Mayor, ya que existen esas 2 posibilidades.

Que lio te has montado, mira que es fácil de entender xD, aunque quizás yo no sé explicarme demasiado bien.

Por cierto, en las circunstancias en las que te encuentras, donde haces condiciones con valores "constantes", te sugiero utilizar un Select Case:

Código
  1.    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
  2.    Handles Button1.Click
  3.  
  4.        Dim pi As Double = CDbl(Math.PI.ToString("n2")) ' 3.14
  5.        Dim refValue As Double
  6.  
  7.        Double.TryParse(Me.txt1.Text, refValue)
  8.  
  9.        Select Case refValue
  10.  
  11.            Case Is < pi
  12.                MessageBox.Show("Es menor que pi")
  13.  
  14.            Case Is > pi
  15.                MessageBox.Show("Es mayor que pi")
  16.  
  17.            Case Else
  18.                MessageBox.Show("Es igual que pi")
  19.  
  20.        End Select
  21.  
  22.    End Sub

saludos

EDITO:


no acabo de entender su funcionamiento

Las instrucciones que escribas después de la declaración Else, se ejecutarán si ninguna condición anterior se evaluó como True.
Es tan simple como eso :P: http://msdn.microsoft.com/en-us/library/752y8abs.aspx

Dos ejemplos aleatorios que he escrito por si te ayudan a entenderlo:

Código
  1. If "str1".Equals("str2") Then ' No se cumple esta condición. Salta a la siguiente condición.
  2.  
  3. ElseIf "str1".Equals("str3") Then ' No se cumple esta condición. Salta a la siguiente condición.
  4.  
  5. ElseIf "str1".Equals("str4") Then ' No se cumple esta condición. Salta al Else.
  6.  
  7. Else ' Ninguna condición de arriba se cumplió. Por eso es que se procesa este bloque condicional.
  8.    MessageBox.Show("Ningua condición se cumplió!")
  9.  
  10. End If

Código
  1.        If True = False Then ' Esta condición jamás se podrá cumplir.
  2.            MessageBox.Show(" True es igual que False ")
  3.  
  4.        Else
  5.            ' Como sabemos que la condición anterior no se cumple,
  6.            ' y como sabemos que True solo puede ser True o False,
  7.            ' entonces asumimos que True es igual a True, ya que no puede ser otra cosa llegados a este punto.
  8.            MessageBox.Show(" True es igual que True ")
  9.  
  10.        End If


« Última modificación: 22 Diciembre 2014, 06:04 am por Eleкtro » En línea

Orb

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: ¿Se asume el valor del else?
« Respuesta #2 en: 22 Diciembre 2014, 12:50 pm »

Pues sí , la verdad es que me monté un buen lío , pero al ser la primera vez que toco programación , intento comprender cada cosa lo máximo posible y quizás me como demasiado la cabeza xD
Es justo eso lo que me intrigaba , si al solo quedar una opción posible dentro de la condición el else asume la última.Con respecto a lo de siempre es similar me refería a si siempre se da ese caso , si siempre que solo quede una condición el else la asume sin necesidad de establecer nada.Siendo sincero , respecto al código que escribiste intentando aclararme hay bastantes funciones que no entiendo , o mas bien , no las he dado , ahora me pondré a documentarme sobre ellas.Por cierto , ¿es necesario declarar el la variable de pi?

Muchísimas gracias por tu respuesta Elektro , un saludo
« Última modificación: 22 Diciembre 2014, 12:52 pm por Orb » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: ¿Se asume el valor del else?
« Respuesta #3 en: 22 Diciembre 2014, 15:07 pm »

Con respecto a lo de siempre es similar me refería a si siempre se da ese caso , si siempre que solo quede una condición el else la asume sin necesidad de establecer nada

No exactamente ya que la funcionalidad de la declaración Else no es "asumir", pero podriamos decir que sí, siempre que quede una única condición posible, el Else "la asume".


Por cierto , ¿es necesario declarar el la variable de pi?

En el código que mostré, estrictamente necesario no es, pero es lo correcto, ya que al declarar la variable puedo acceder directamente al valor en la memoria, en lugar de duplicar instrucciones innecesarias en el Select Case, puesto que es más rápido (y dinámico) acceder directamente a la variable que llamar a la función .ToString * 3 veces para que devuelva el mismo siempre el mismo valor y castearlo a Double :-/, el tiempo de ejecución aumenta.

PD: De todas formas la diferencia del tiempo de ejecución es ínfima (quizás no llegue a 5-10 ms de diferencia), pero sigue siendo lo correcto, y yo soy bastante maniático estricto con esas cosas xD.

EDITO: Si te referías a la variable 'refValue', entonces esa si que es totálmente necesaria, ya que la función .TryParse pide una variable referida como parámetro, pide una variable para modificarla y almacenar el resultado en caso de que la conversión del string tenga éxito,
por otro lado, en otras circunstancias si que podrías evitar declarar la variable referida, usando el constructor (New):
Código
  1. If Double.TryParse("1", New Double) Then...

De todas formas esa parte del código era solo un control de errores (muy básico), así que puedes omitir la declaración de la variable 'refValue', y la utilización de TryParse.

Saludos
« Última modificación: 22 Diciembre 2014, 15:33 pm por Eleкtro » En línea

Orb

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: ¿Se asume el valor del else?
« Respuesta #4 en: 23 Diciembre 2014, 13:15 pm »

Vale , esta vez si que me ha quedado todo más claro.

Muchas gracias de nuevo Elektro¡
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines