22 jul 2010

operadores de cortocircuito "shortcircuit operators"


Nos plantean el siguiente problema:

Dado las notas de examen final trabajos practicos y notas de examenes parciales, se desea saber  la cantidad de puntos con el cual el estudiante aprueba, solo mostrar la nota de aprobacion si nota final es mayor a 30, nota de examenes parciales es mayor a 30 y la nota de trabajos practicos es mayor a 15.

Solucion: El problema es sincillo y requiere del minimo analisis, pero ahora miremos un poco la solucion que obtenemos


01 Module Module1
02 
03     Sub Main()
04         'sobre 40 puntos
05         Dim Nota_Examen As Integer
06         ' sobre 20 puntos
07         Dim Nota_Trabajos As Integer
08         ' sobre 40 puntos
09         Dim Nota_Parciales As Integer
10         'dando 100 puntos totales
11 
12         Nota_Examen = 34 'puede tomar cualquier valor de 1 a 40
13         Nota_Parciales = 33 'puede tomar cualquier valor de 1 a 20
14         Nota_Trabajos = 16 'puede tomar cualquier valor de 1 a 40
15 
16         ' Utilizando el operador logico AND
17         If Nota_Parciales > 30 And Nota_Trabajos > 15 And Nota_Examen > 30 Then
18             Console.WriteLine("Estudiante Aprobado con " & (Nota_Parciales + Nota_Examen + Nota_Trabajos))
19         End If
20         Console.ReadLine()
21 
22         ' Utilizando IF anidados
23         If Nota_Parciales > 30 Then
24             If Nota_Trabajos > 15 Then
25                 If Nota_Examen > 30 Then
26                     Console.WriteLine("Estudiante Aprobado con " & (Nota_Parciales + Nota_Examen + Nota_Trabajos))
27                 End If
28             End If
29         End If
30         Console.ReadLine()
31 
32         ' Utilizando operador ANDALSO
33         If Nota_Parciales > 30 AndAlso Nota_Trabajos > 15 AndAlso Nota_Examen > 30 Then
34             Console.WriteLine("Estudiante Aprobado con " & (Nota_Parciales + Nota_Examen + Nota_Trabajos))
35         End If
36         Console.ReadLine()
37 
38     End Sub
39 
40 End Module


La opcion mas logica que se nos viene a la mente es utilizar el operador AND (linea 17 a 19), tambien podemos utilizar IF anidados (linea 23 a 29) y por ultimo la instruccion ANDALSO (linea 33 a 35), todas esas opciones nos dan el resultado correcto, ¿entonces cual es la diferencia?

  1. Al utilizar la instruccion AND, se evalua cada una de las condiciones y si todas son ciertas (true true true = true) se realiza la accion.
  2. Cuando utilizamos los IF anidados, se va evaluando uno por uno ingresando en cada IF respectivamente, si encuentra que una instruccion no cumple la condcion, la instruccion if se detiene.
  3. Por ultimo la instruccion ANDALSO, evalua expresion por expresion, es decir, al evaluar la primera expresion y si esta "no se cumple" ya no evalua el resto de las condiciones y no realiza la accion, similar a lo que hace un If anidado, con la excepcion de que esta instruccion es mucho mas legible y nos permite escribir todo el codigo en una sola linea.
Este operador ANDALSO y su similar ORALSO, son llamadas operadores de cortocircuito o "shortcircuit operators" en el lenguaje de shakespeare

0 comentarios:

Publicar un comentario

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | cna certification