elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [SRC] IIfEx [by Mr. Frog ©]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SRC] IIfEx [by Mr. Frog ©]  (Leído 1,160 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
[SRC] IIfEx [by Mr. Frog ©]
« en: 11 Febrero 2011, 14:31 pm »

Bueno, os traigo esta simple función para reemplazar a IIf(). :)
IIf(), es una función muy cómoda de vb, pero no es recomendable usarla en bucles o si se necesita especial agilidad porque es leeeenta. :-(
La mía funciona exactamente igual, con la ventaja de que los argumentos en caso de ser Falso o Verdadero son opcionales. ;)

Código
  1. Option Explicit
  2.  
  3. Public Static Function IIfEx(ByVal bolExpresion As Boolean, _
  4.                    Optional ByRef varTruePart As Variant, _
  5.                    Optional ByRef varFalsePart As Variant) As Variant
  6.    If bolExpresion Then
  7.        IIfEx = varTruePart
  8.    Else
  9.        IIfEx = varFalsePart
  10.    End If
  11. End Function


Un pequeño ejemplo de velocidad usando CTiming.cls :

Código
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4. Dim t               As New CTiming
  5. Dim x               As Long
  6. Dim ret             As Variant
  7. Const s             As String = "holaa"
  8. Const sCorrect      As String = s
  9. Const sIncorrect    As String = sCorrect & "a"
  10. Const lngLoops      As Long = 100000
  11.  
  12.    If App.LogMode = 0 Then
  13.        MsgBox "Compile it stupid!", vbCritical
  14.        End
  15.    End If
  16.  
  17.    Me.AutoRedraw = True
  18.  
  19.    Me.Print "True part"
  20.    Me.Print
  21.  
  22.    t.Reset
  23.    For x = 1 To lngLoops
  24.        ret = IIf((s = sCorrect), 123, 1233)
  25.    Next
  26.    Me.Print "IIf", t.sElapsed
  27.  
  28.    t.Reset
  29.    For x = 1 To lngLoops
  30.        ret = IIfEx((s = sCorrect), 123, 1233)
  31.    Next
  32.    Me.Print "IIfEx", t.sElapsed
  33.  
  34.    Me.Print String$(20, "-")
  35.    Me.Print "False part"
  36.    Me.Print
  37.  
  38.    t.Reset
  39.    For x = 1 To lngLoops
  40.        ret = IIf((s = sIncorrect), 123, 1233)
  41.    Next
  42.    Me.Print "IIf", t.sElapsed
  43.  
  44.    t.Reset
  45.    For x = 1 To lngLoops
  46.        ret = IIfEx((s = sIncorrect), 123, 1233)
  47.    Next
  48.    Me.Print "IIfEx", t.sElapsed
  49. End Sub

Resultado (IIfEx = IIIf ; que le cambié el nombre :rolleyes:) :




Nota: Aún así si se necesita especial velocidad mejor usar If.  :rolleyes:

DoEvents! :P


« Última modificación: 11 Febrero 2011, 16:02 pm por Mr. Frog © » En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [SRC] IIIf [by Mr. Frog ©]
« Respuesta #1 en: 11 Febrero 2011, 14:35 pm »

HOLA!!!

Muy buena Mr Frog!!!

Me hacen recordar al SI(condicion,ValorVerdadero,ValorFalso) del EXCEL.

Igual ya te lo habia dicho :P.

Re bien, Mejora en un 40% a la iif Original, esta perfecta!

GRACIAS POR LEER!!!


En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [SRC] IIfEx [by Mr. Frog ©]
« Respuesta #2 en: 11 Febrero 2011, 15:15 pm »

Gracias, unicamente quería demostrar que para mejorar la velocidad de vb no hace falta romperse la cabeza.

Código
  1. ' Hago un poco de trampa usando otra función de vb, solo es una adaptación para usar MidB() como Mid()... :P
  2. Public Static Function fMid(ByRef sText As String, ByVal lngStart As Long, Optional ByVal lngLength As Long) As String
  3.    fMid = MidB$(sText, 1 + lngStart + lngStart, lngLength + lngLength)
  4. End Function

Código
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4. Dim t               As New CTiming
  5. Dim x               As Long
  6. Dim ret             As String
  7. Dim s               As String
  8. Const lngLoops      As Long = 100000
  9. Const lngStart      As Long = 34566
  10. Const lngLen        As Long = 10000
  11.  
  12.    If App.LogMode = 0 Then
  13.        MsgBox "Compile it stupid!", vbCritical
  14.        End
  15.    End If
  16.  
  17.    Show
  18.    AutoRedraw = True
  19.  
  20.    For x = 0 To 100000
  21.        s = s & ChrW$(Rnd * 255)
  22.    Next
  23.  
  24.    Cls
  25.  
  26.    t.Reset
  27.    For x = 1 To lngLoops
  28.        ret = fMid(s, lngStart, lngLen)
  29.    Next
  30.    Print "fMid", t.sElapsed
  31.  
  32.    ret = vbNullString
  33.  
  34.    t.Reset
  35.    For x = 1 To lngLoops
  36.        ret = Mid$(s, lngStart, lngLen)
  37.    Next
  38.    Print "Mid", t.sElapsed
  39. End Sub

Resultado:


DoEvents! :P
« Última modificación: 11 Febrero 2011, 18:23 pm por Mr. Frog © » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SRC] Check_Similar_Words [by Mr. Frog ©] « 1 2 »
Programación Visual Basic
Psyke1 15 4,500 Último mensaje 9 Enero 2011, 23:36 pm
por agus0
[SRC] FrogCheat v1.1 [by Mr. Frog ©] « 1 2 3 »
Programación Visual Basic
Psyke1 28 10,574 Último mensaje 6 Enero 2011, 18:13 pm
por ssccaann43 ©
[SRC] [Tip] AlignListBox [by Mr. Frog ©]
Programación Visual Basic
Psyke1 3 1,552 Último mensaje 13 Diciembre 2010, 03:36 am
por agus0
[SRC] cListBoxMultiAlign [by Mr. Frog ©] « 1 2 »
Programación Visual Basic
Psyke1 11 3,581 Último mensaje 16 Diciembre 2010, 20:40 pm
por Psyke1
[SRC] cFrogContest.cls [by Mr. Frog ©] « 1 2 »
Programación Visual Basic
Psyke1 12 4,861 Último mensaje 12 Febrero 2011, 22:29 pm
por Psyke1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines