VB.NET: Pasar una expresión para ser utilizada dentro de una función
Parte de mi programa consiste en una serie de pasos que se completan o se agotan después de cierto intervalo de tiempo. Las condiciones de prueba varían ampliamente. ¿Cómo puedo escribir una sola función para encapsular todas las posibilidades?
Para hacer eso, idealmente necesitaría pasar la condición necesaria a la función para que se evalúe dentro de la función, en lugar de evaluarse como un parámetro y luego pasarla a la función.
Esto es lo que idealmente querría (simplificado en gran medida):
Función Privada TestCondition(<CONDICIÓN>) como Boolean
' Retorna Verdadero si <CONDICIÓN> se cumple dentro de 10 segundos
Dim sw as New Diagnostics.StopWatch
sw.Start()
Mientras sw.ElapsedMilliseconds < 10000
Si <CONDICIÓN> Entonces Return True
System.Threading.Thread.Sleep(500)
Fin Mientras
sw.Stop()
Return False
Fin Función
La función debería funcionar con cualquier expresión que devuelva un valor booleano:
TestCondition(x=5)
TestCondition(System.IO.File.Exists("myfile"))
Obviamente, lo anterior no funciona ya que se pasan los resultados de las condiciones especificadas a la función, en lugar de las condiciones en sí.
Basado en otras lecturas, probablemente pueda lograr esto mediante:
– Reestructurar mi código
– Usar delegados
– Usar expresiones lambda
Pero todavía no veo exactamente cómo.
¡Muchas gracias por tu ayuda!
davy.ai
Para encapsular todas las posibilidades, puedes utilizar expresiones lambda que te permitirán pasar la condición necesaria a la función para ser evaluada dentro de la propia función. Aquí tienes un ejemplo de cómo podrías lograrlo:
“`vb.net
Private Function TestCondition(condition As Func(Of Boolean)) As Boolean
Dim sw As New Stopwatch
sw.Start()
End Function
Como puedes ver, estás pasando una lambda que esencialmente devuelve un booleano cuando se evalúa, y la función TestCondition evalúa esa lambda cada medio segundo hasta que la condición sea verdadera o se acabe el tiempo.