IF o CASE?

Encuesta
Cual de estos metodos es mejor?
11%
1
56%
5
11%
1
11%
1
11%
1
Hay 9 votos.
Aver si alguien me puede ayudar, estoy haciendo un programa y quiero optimizar (aunque sea una tonteria en este caso) un poco el codigo...

El tema esta en que usa un fichero de configuración que no es mas que un fichero de texto que se accede de forma seqüencial, bien...

El tema esta en la hora de leerlo, tengo puesto un if para todas las opciones que puede haber, y cada una que añado, otro mas... en total 24..

cada linea tiene consta de 4 caracteres identificativos un espacio y la opcion, por lo que leo los 4 primeros caracteres cada vez y un ejemplo seria:

ABCD J:\CARPETA\

los if estan puestos de tal forma que:

If Left(Linia, 4) = "ABCD" Then
  abcd;
ElseIf Left(Linia, 4) = "EFGH" Then
  efgh;
ElseIf Left(Linia, 4) = "IJKL" Then
  ijkl;
ElseIf Left(Linia, 4) = "MNOP" Then
  mnop;
End If


Salvo que me acabo de dar cuenta que hacer 24 lecturas de los 4 primeros caracteres es una perdida de tiempo, creeis que es mejor usar IF o usar CASE? de hecho con case haria una lectura de los 4 caracteres y me ahorro definir una variable para eso, no?

A parte tengo 4 opciones definidas con solo 2 caracteres.. aconsejais que las iguale todas a 4 y asi no tener que hacer otra vez un ic/case para esos 2? o uso 2 variables (con los 2 o 4 caracteres) con 2 IF principales o 2 CASE?
A la hora de tener un codigo mas "bonito" y facil de repasar, siempre es mejor usar el CASE, y si tienes 4 opciones con solo 2 caracteres, igualalos a 4, y asi con Un solo CASE y una sola variable, lo haces todo.

Ventajas: un solo Case, un codigo visiblemente mas claro, y una sola variable definida(ahorras memoria principal del sistema).Pero bueno, tampoco es que varie mucho....
si quieres que quede mas profesional usa el case

yo lo que hago normalmentees que si el programa que hago es pa mi, utilizo if pq siempre me olvido de la estructura exacta del case y me da pereza buscarla pero si lo tengo que entregar en la universidad o si alguien mas va a leer mi codigo utilizo case


son manias mias xD
No todos los lenguajes te van a permitir hacer un case con cadenas,
aunque el case queda más fino, tampoco creas que habrá mucha diferencia de rendimiento con un if , else if
Por que el case con valores "indexables" como enteros puede
hacer cosas para hacerlo más eficiente pero con una cadena
lo que hará es mirar uno por uno (o sea que aunque sea más elegante
internamte termina haciendo lo mismo)

En realidad lo que queda bien de verdad (si son muchas operaciones)
es un autómata (lo puedes crear con el flex) que te reconozca patrones [looco]

Ahora en serio yo una vez hice uno con if anidados
en el primer if los separaba por el primer carácter
dentro de ese if otro if para el segundo.
Así creas un árbol y en el fondo es la opción más eficiente
de hecho el flex acaba haciendo algo así ...
Pero claro eran más opciones (y estoy pensandolo para C)
Lo mas eficiente creo que será hacerlos con un case, y en la parte del codigo de cada caso al final pones un break.
De esta forma no comprobará el resto de casos y saldrá del case.
Si lo haces con varios if anidados, te va a evaluar las condiones de cada if siempre.

Por el codigo que enseñas parece que sea visual basic, no recuerdo si el break está. Si no está habrá algo parecido.
Zeldakuman escribió:Lo mas eficiente creo que será hacerlos con un case, y en la parte del codigo de cada caso al final pones un break.
De esta forma no comprobará el resto de casos y saldrá del case.
Si lo haces con varios if anidados, te va a evaluar las condiones de cada if siempre.

Por el codigo que enseñas parece que sea visual basic, no recuerdo si el break está. Si no está habrá algo parecido.


Correcto, es VB, por lo visto VB hace automaticamente el Break, por tanto, si el primer valor es correcto, se salta los demas CASE..

El problema es que el if i elseif los va haciendo todos, ya que puede ser que 2 den true... por lo visto el CASE no lo permite... en C es distinto si mal no recuerdo...
hombre un case yo lo he implementado en un ensamblador (mips r2000) y creo recordar que era mas lioso que un simple if, puesto que tenias que trastear con punteros a un array de punteros y demas cristos.



yo uso siempre ifs a no ser que lo tenga que entragar en la universidad que entonces uso case.
En vb un case con 4 opciones, sin duda. Los maneja que mejor que varios if anidados.
DiGiCharatFan escribió:
Correcto, es VB, por lo visto VB hace automaticamente el Break, por tanto, si el primer valor es correcto, se salta los demas CASE..

El problema es que el if i elseif los va haciendo todos, ya que puede ser que 2 den true... por lo visto el CASE no lo permite... en C es distinto si mal no recuerdo...


¿Cómo que los va haciendo todos porque puede haber varios true? Si vas usando una estructura de if else, una vez que entre en un if el resto se lo salta, ¿qué sentido tendría sinó usar la sentencia else?
8 respuestas