none
¿Cuál de estas dos expresiones consideran que es más conveniente usar?

    Pregunta

  • En términos de velocidad de ejecución u otra consideración, cuál es más conveniente usar o consideran que no hay mayor diferencia?

    Esta:

    If  {100, 200}.Contains(Cantidad) then

      'Hacer algo

    End If

    o esta otra?

    If (Cantidad = 100) OrElse (Cantidad = 200) then

      'Hacer algo

    End If

         
    sábado, 7 de enero de 2017 4:42

Respuestas

  • Hola:

    En la primera instrucción te evalúa las dos expresiones y en la segunda te evalúa la primera, si es correcta ejecuta la instrucción si no es correcta te evalúa la segunda expresión.

    Yo personalmente acostumbro a  trabajar con la segunda opción, con lo que evito tener que evaluar todo si la primera ya es correcta.

    Por el tema de velocidad no creo que tenga importancia, pero de cualquier manera trabaja menos de la segunda forma si como te digo cuando a través del orelse no tiene que evaluar todo el if cuando encuentra que la coindición ya es verdadera, no continúa y pasa a ejecutar eñ if.

    Un saludo.

    Gemma

    sábado, 7 de enero de 2017 6:06
  • "James2016-2" preguntó:

    > En términos de velocidad de ejecución u otra consideración, cuál es más
    > conveniente usar o consideran que no hay mayor diferencia?
    >
    > Esta:
    >
    > If  {100, 200}.Contains(Cantidad) then
    >
    >  'Hacer algo
    >
    > End If
    >
    > o esta otra?
    >
    > If (Cantidad = 100) OrElse (Cantidad = 200) then
    >
    >  'Hacer algo
    >
    > End If

    Entiendo que todo dependerá de cuántos elementos tenga la matriz de Integer que utilizas para llamar al método Contains. Si solamente tiene dos elementos, mejor será que utilices la instrucción If junto con el operador OrElse, porque si el resultado de la primera expresión (Cantidad = 100) es True, no se evalúa la segunda expresión (Cantidad = 200), tal y como bien te ha explicado Gemma.

    En cambio, si utilizas el método Contains, éste tendrá que recorrer INTERNAMENTE un bucle (que tú no lo observas pero que en la clase correspondiente del marco de trabajo de .NET se ejecutará) para conocer si la matriz contiene el valor asignado a la variable Cantidad, por lo que éste método lo podrías utilizar si la matriz de Integer en lugar de tener 2 elementos tiene 20.000 elementos, porque tampoco es cuestión de escribir una instrucción If ... OrElse ... OrElse ... OrElse ... OrElse ... OrElse ... OrElse ..., y así hasta 20.000 veces. ;-)

    Aparte, una matriz es un objeto (un tipo de dato de referencia) que no es lo mismo que declarar una simple variable Integer (un tipo de dato de valor), por lo que hay que crearlo e instanciarlo, cosa que hará el compilador por ti si la matriz no la has declarado y creado explícitamente:

    ' Declarar y crear una matriz de Integer con dos elementos
    Dim source As Integer() = New Integer() {100, 200}
    
    ' Llamar al método Contains pasándole la matriz y el valor
    ' que se desea conocer si se encuentra incluido o no en la
    ' matriz
    If (Enumerable.Contains(Of Integer)(source, Cantidad)) Then
    
        ' Hacer algo
    
    End If

    En definitiva, que todo dependerá de los muchos o pocos elementos que tenga una matriz concreta.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.







    sábado, 7 de enero de 2017 12:30
    Moderador

Todas las respuestas

  • Hola:

    En la primera instrucción te evalúa las dos expresiones y en la segunda te evalúa la primera, si es correcta ejecuta la instrucción si no es correcta te evalúa la segunda expresión.

    Yo personalmente acostumbro a  trabajar con la segunda opción, con lo que evito tener que evaluar todo si la primera ya es correcta.

    Por el tema de velocidad no creo que tenga importancia, pero de cualquier manera trabaja menos de la segunda forma si como te digo cuando a través del orelse no tiene que evaluar todo el if cuando encuentra que la coindición ya es verdadera, no continúa y pasa a ejecutar eñ if.

    Un saludo.

    Gemma

    sábado, 7 de enero de 2017 6:06
  • "James2016-2" preguntó:

    > En términos de velocidad de ejecución u otra consideración, cuál es más
    > conveniente usar o consideran que no hay mayor diferencia?
    >
    > Esta:
    >
    > If  {100, 200}.Contains(Cantidad) then
    >
    >  'Hacer algo
    >
    > End If
    >
    > o esta otra?
    >
    > If (Cantidad = 100) OrElse (Cantidad = 200) then
    >
    >  'Hacer algo
    >
    > End If

    Entiendo que todo dependerá de cuántos elementos tenga la matriz de Integer que utilizas para llamar al método Contains. Si solamente tiene dos elementos, mejor será que utilices la instrucción If junto con el operador OrElse, porque si el resultado de la primera expresión (Cantidad = 100) es True, no se evalúa la segunda expresión (Cantidad = 200), tal y como bien te ha explicado Gemma.

    En cambio, si utilizas el método Contains, éste tendrá que recorrer INTERNAMENTE un bucle (que tú no lo observas pero que en la clase correspondiente del marco de trabajo de .NET se ejecutará) para conocer si la matriz contiene el valor asignado a la variable Cantidad, por lo que éste método lo podrías utilizar si la matriz de Integer en lugar de tener 2 elementos tiene 20.000 elementos, porque tampoco es cuestión de escribir una instrucción If ... OrElse ... OrElse ... OrElse ... OrElse ... OrElse ... OrElse ..., y así hasta 20.000 veces. ;-)

    Aparte, una matriz es un objeto (un tipo de dato de referencia) que no es lo mismo que declarar una simple variable Integer (un tipo de dato de valor), por lo que hay que crearlo e instanciarlo, cosa que hará el compilador por ti si la matriz no la has declarado y creado explícitamente:

    ' Declarar y crear una matriz de Integer con dos elementos
    Dim source As Integer() = New Integer() {100, 200}
    
    ' Llamar al método Contains pasándole la matriz y el valor
    ' que se desea conocer si se encuentra incluido o no en la
    ' matriz
    If (Enumerable.Contains(Of Integer)(source, Cantidad)) Then
    
        ' Hacer algo
    
    End If

    En definitiva, que todo dependerá de los muchos o pocos elementos que tenga una matriz concreta.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.







    sábado, 7 de enero de 2017 12:30
    Moderador
  • ok, buen punto, gracias.
    sábado, 7 de enero de 2017 19:34
  • Ok, depende de la cantidad de elementos. Gracias.
    sábado, 7 de enero de 2017 19:36