Autor
|
Tema: ¿Se asume el valor del else? (Leído 2,627 veces)
|
Orb
Desconectado
Mensajes: 81
|
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 ; Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim mensaje1 As String Dim mensaje2 As String If txt1.Text < 3.14 Then mensaje1 = "Es menor que pi" MsgBox(mensaje1) ElseIf txt1.Text = 3.14 Then mensaje2 = "Es igual que pi" MsgBox(mensaje2) Else MsgBox(" Es mayor que pi") End If 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
Mensajes: 9.878
|
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: 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: Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles Button1.Click Dim pi As Double = CDbl(Math.PI.ToString("n2")) ' 3.14 Dim refValue As Double Double.TryParse(Me.txt1.Text, refValue) Select Case refValue Case Is < pi MessageBox.Show("Es menor que pi") Case Is > pi MessageBox.Show("Es mayor que pi") Case Else MessageBox.Show("Es igual que pi") End Select 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 : http://msdn.microsoft.com/en-us/library/752y8abs.aspxDos ejemplos aleatorios que he escrito por si te ayudan a entenderlo: If "str1".Equals("str2") Then ' No se cumple esta condición. Salta a la siguiente condición. ElseIf "str1".Equals("str3") Then ' No se cumple esta condición. Salta a la siguiente condición. ElseIf "str1".Equals("str4") Then ' No se cumple esta condición. Salta al Else. Else ' Ninguna condición de arriba se cumplió. Por eso es que se procesa este bloque condicional. MessageBox.Show("Ningua condición se cumplió!") End If
If True = False Then ' Esta condición jamás se podrá cumplir. MessageBox.Show(" True es igual que False ") Else ' Como sabemos que la condición anterior no se cumple, ' y como sabemos que True solo puede ser True o False, ' entonces asumimos que True es igual a True, ya que no puede ser otra cosa llegados a este punto. MessageBox.Show(" True es igual que True ") End If
|
|
« Última modificación: 22 Diciembre 2014, 06:04 am por Eleкtro »
|
En línea
|
|
|
|
Orb
Desconectado
Mensajes: 81
|
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
Mensajes: 9.878
|
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): 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
Mensajes: 81
|
Vale , esta vez si que me ha quedado todo más claro.
Muchas gracias de nuevo Elektro¡
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Telefónica reduce el número de despidos a 6.500 y asume los costes
Noticias
|
wolfbcn
|
0
|
1,562
|
1 Junio 2011, 18:23 pm
por wolfbcn
|
|
|
Como Obtener valor de un textbox, desde un valor, hasta otro valor [VB6]
Programación Visual Basic
|
revenge1252
|
4
|
6,824
|
17 Julio 2012, 09:38 am
por BlackZeroX
|
|
|
PwC asume la responsabilidad por el error en la entrega del Oscar a Mejor ...
Noticias
|
wolfbcn
|
0
|
1,067
|
27 Febrero 2017, 14:50 pm
por wolfbcn
|
|
|
Gobierno bolivariano asume diferencial en nóminas de las industrias
Foro Libre
|
engel lex
|
3
|
1,900
|
26 Agosto 2018, 17:29 pm
por PalitroqueZ
|
|
|
El Ejército de Sudán detiene al presidente Al Bashir y asume el poder del país
Foro Libre
|
PalitroqueZ
|
0
|
1,369
|
11 Abril 2019, 20:26 pm
por PalitroqueZ
|
|