vb.net if-statement colon

vb.net - ''If'' declaración y el colon



if-statement (5)

Aquí hay una pieza de código interesante que los miembros de mi equipo estaban teniendo una discusión acalorada sobre ...

Dim fred As Integer If True Then fred = 5 : fred = 3 : fred = 6 Else fred = 4 : fred = 2 : fred = 1

Después de ejecutar el fragmento de código anterior, ¿cuál es el valor de fred ?

Trate de no engañar y depurar el código.

Este es un ejemplo de código altamente artificial que comenzó como un ejemplo del uso de los dos puntos con una instrucción If, pero luego alguien decidió tomar la iniciativa de ofrecer un resultado para Fred .

ACTUALIZACIÓN : normalmente no escribiría código como este y este fragmento solo sirve como un ejemplo. Como ocurre, esta pregunta se originó en una discusión que involucró la creación de un documento de estándares de codificación para nuestro equipo.


El resultado final es 6.
Ahora la verdadera pregunta es: ¿Cómo entraste en mi repositorio?
:-)


No he usado BASIC de forma extensiva por un tiempo, así que esto es sólo una suposición, pero creo que fred es 6 .

Francamente, el código no es muy legible. Siento que al no tener todo en una línea y usar sangrías, el código sería más legible:

Dim fred As Integer If True Then fred = 5 fred = 3 fred = 6 Else fred = 4 fred = 2 fred = 1 End If

Creo que es un código equivalente, si no me equivoco.

Pero, si el código no es equivalente, eso trae a colación otro punto: el código original es "complicado" de una manera que lo que parece estar diciendo no es exactamente lo que realmente está sucediendo. Similar a la trampa en lenguajes estilo C:

if (condition) do_something(); do_other_thing();

El código parece decir que implica que do_something y do_other_thing se ejecutan cuando la condition es verdadera, pero en realidad, do_other_thing siempre se ejecuta.

Lo mejor es intentar adherirse a los estilos de codificación que hacen que la intención del código sea más obvia y menos ambigua.


Solo una suposición

fred = 6 porque puede tener varias declaraciones en la misma línea separadas por dos puntos.

No estoy seguro si el "else" es legal (es decir, compilable)

En mi humilde opinión, se debe elegir un mejor estilo de codificación:

if (condition) then statement statement else statement statement end if


En dialectos BÁSICOS muy antiguos, lo único que podría seguir a "ENTONCES" era un número de línea. Muchos dialectos mejoraron al permitir que el código siguiera el "ENTONCES"; después de analizar más allá del "ENTONCES" saltaban a la siguiente línea si la condición indicada era falsa, o si no continúan con la línea actual. Otros dialectos agregaron la capacidad de omitir hasta el final de la línea o "ELSE", lo que ocurriera primero; intentar ejecutar una instrucción "ELSE" saltaría al final de línea.

Cuando se introdujo QuickBasic, se agregó soporte para bloques multilínea if / then / else, pero se mantuvo el soporte para el enfoque de estilo antiguo. Visual Basic hizo lo mismo y vb.net continúa con la tradición.


Supongo que te refieres a VB.Net.

De acuerdo con la gramática en la especificación de lenguaje VB, que puede leer aquí:

http://www.microsoft.com/Downloads/thankyou.aspx?familyId=39de1dd0-f775-40bf-a191-09f5a95ef500&displayLang=en

El resultado debería ser "6".

Esto se debe a que la gramática para una "línea if statement" es:

If BooleanExpression Then Statements [ Else Statements ] StatementTerminator

y "declaraciones" se define como

Statements ::= [ Statement ] | Statements : [ Statement ]

Editar: Me gustaría señalar que la depuración del código no es "trampa".

Solía ​​trabajar en el equipo de compiladores de VB en Microsoft.

Hubo momentos en que la especificación era ambigua o no coincidía con lo que habíamos enviado realmente. En varios de esos casos, la solución (lo que hicimos para solucionarlo) siempre se basaba en "bueno ... ¿qué hace el compilador ahora?".

A veces cambiamos el compilador, a veces cambiamos la especificación.

Sin embargo, siempre ejecutaremos el compilador para ver qué es lo que realmente hizo antes de tomar una decisión.

Entonces ... depurar el código es una gran parte de averiguar qué hace ...