Después de la entrega del juego memory en Python, me puse con este ejemplo en el que se usan procedimientos, funciones y colecciones.
Este ejemplo no se si lo he dejado en el foro adecuado. Ya que la función de este código no es hacer algo para que lo podáis reutilizar,
si no la de ver como esta hecho ( enseñar) y comentar. No creo que General fuera su sitio.
En este ejemplo se crea una red de usuarios, que pueden estar conectados o no conectados.
Al comenzar el código estaba todo en el mismo bloque y luego lo fui dividiendo en procedimientos y funciones.
La salida va por consola, no se usa formulario. Aunque al comenzar el ejemplo, escogiese formulario..ejem.
Naturalmente al repartir el código en varios procedimientos y funciones, desaparecen muchas variables que
estaban en el único bloque, convirtiéndose en variables locales de los procedimientos y funciones.
Pego el ejemplo aquí:
Private usuarios As New Collection
Public Sub _new()
End
Public Sub Form_Open()
Dim usuarios_conectados As New String[]
Dim usuarios_desconectados As New String[]
Dim conectados As Boolean = True
Dim desconectados As Boolean = False
Crear_Usuarios()
usuarios_conectados = agrupar_usuarios(usuarios, conectados)
usuarios_desconectados = agrupar_usuarios(usuarios, desconectados)
Mostrar_Resumen(usuarios, usuarios_conectados, usuarios_desconectados)
End
Public Sub Mostrar_Resumen(col_usuarios As Collection, uconectados As String[], udesconectados As String[])
Print "Resumen de la red"
Print "Nuestra red esta formada por " & col_usuarios.Count & " usuarios"
Print "Tenemos " & uconectados.Count & " usuarios conectados"
Print
Print "Están conectados: " & mostrar_usuarios(uconectados)
Print "Están desconectados: " & mostrar_usuarios(udesconectados)
End
Public Sub Crear_Usuarios()
'Añadimos los usuarios conocidos de la red.Estado y nombre
usuarios.Add(True, "Juan")
usuarios.Add(True, "Daniel")
usuarios.Add(False, "Javier")
usuarios.Add(False, "Antonio")
usuarios.Add(True, "Maria")
usuarios.Add(False, "Lourdes")
usuarios.Add(True, "Loli")
usuarios.Add(True, "Manuel")
End
Public Function mostrar_usuarios(grupo As String[]) As String
Dim usuario As String
Dim concatena As String
For Each usuario In grupo
concatena &= usuario & ","
Next
' Para eliminar la ultima coma de la derecha
concatena = Left$(concatena, RInStr(concatena, ",") - 1)
Return concatena
End
Public Function agrupar_usuarios(col_usuarios As Collection, estado As Boolean) As String[]
Dim estado_usuario As Boolean
Dim grupo_usuario As New String[]
For Each estado_usuario In col_usuarios
'Comprobamos el estado y añadimos el usuario al grupo_usuario.Obteniendo su nombre con la clave de la colección
If estado_usuario = estado Then grupo_usuario.Add(col_usuarios.Key)
Next
Return grupo_usuario
End
Public Sub _new()
End
Public Sub Form_Open()
Dim usuarios_conectados As New String[]
Dim usuarios_desconectados As New String[]
Dim conectados As Boolean = True
Dim desconectados As Boolean = False
Crear_Usuarios()
usuarios_conectados = agrupar_usuarios(usuarios, conectados)
usuarios_desconectados = agrupar_usuarios(usuarios, desconectados)
Mostrar_Resumen(usuarios, usuarios_conectados, usuarios_desconectados)
End
Public Sub Mostrar_Resumen(col_usuarios As Collection, uconectados As String[], udesconectados As String[])
Print "Resumen de la red"
Print "Nuestra red esta formada por " & col_usuarios.Count & " usuarios"
Print "Tenemos " & uconectados.Count & " usuarios conectados"
Print "Están conectados: " & mostrar_usuarios(uconectados)
Print "Están desconectados: " & mostrar_usuarios(udesconectados)
End
Public Sub Crear_Usuarios()
'Añadimos los usuarios conocidos de la red.Estado y nombre
usuarios.Add(True, "Juan")
usuarios.Add(True, "Daniel")
usuarios.Add(False, "Javier")
usuarios.Add(False, "Antonio")
usuarios.Add(True, "Maria")
usuarios.Add(False, "Lourdes")
usuarios.Add(True, "Loli")
usuarios.Add(True, "Manuel")
End
Public Function mostrar_usuarios(grupo As String[]) As String
Dim usuario As String
Dim concatena As String
For Each usuario In grupo
concatena &= usuario & ","
Next
' Para eliminar la ultima coma de la derecha
concatena = Left$(concatena, RInStr(concatena, ",") - 1)
Return concatena
End
Public Function agrupar_usuarios(col_usuarios As Collection, estado As Boolean) As String[]
Dim estado_usuario As Boolean
Dim grupo_usuario As New String[]
For Each estado_usuario In col_usuarios
'Comprobamos el estado y añadimos el usuario al grupo_usuario.Obteniendo su nombre con la clave de la colección
If estado_usuario = estado Then grupo_usuario.Add(col_usuarios.Key)
Next
Return grupo_usuario
End
Espero que a los nuevos les cree dudas, que les motive y que hagan preguntas. No se corten, háganlas.
Ok, aquí va la primera. Como veis, desde el bloque principal se va llamando a los otros trozos mas pequeños de código, procedimiento, funciones,
no han tenido un orden. ¿ Creéis que según se va llamando desde el bloque principal, deberían estar ordenados abajo del principal ?.
La segunda. ¿ Usarías un orden concreto ?.¿ Agruparías de alguna manera los procedimientos y funciones ?.
Saludos