FUNCAO FORA DO COMUM
Prezados colegas,
Estou habituado a criar funções no VB.NET para
retornar qualquer valor (String,Integer,Boolean,etc...)
Mas....
Agora surgiu uma necessidadde um pouco diferente:
Preciso criar uma simples função que retorne não um valor
único, mas um conjunto de valores numéricos.Ou seja,uma
função que retorne algo como um vetor.
1.) Alguém sabe me mostrar um exemplo,de como ficaria a sintaxe
da função neste caso?
2.) E como eu faria,para ler cada um dos valores, depois que
executar a função???
Estou habituado a criar funções no VB.NET para
retornar qualquer valor (String,Integer,Boolean,etc...)
Mas....
Agora surgiu uma necessidadde um pouco diferente:
Preciso criar uma simples função que retorne não um valor
único, mas um conjunto de valores numéricos.Ou seja,uma
função que retorne algo como um vetor.
1.) Alguém sabe me mostrar um exemplo,de como ficaria a sintaxe
da função neste caso?
2.) E como eu faria,para ler cada um dos valores, depois que
executar a função???
um exemplo
Function func() As Array
Dim vetor(10) As String
Return vetor
End Function
Function func() As Array
Dim vetor(10) As String
Return vetor
End Function
codigo, de exemplo, completo
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim x() As String = func()
End Sub
Function func() As Array
Dim vetor(10) As String
Return vetor
End Function
End Class
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim x() As String = func()
End Sub
Function func() As Array
Dim vetor(10) As String
Return vetor
End Function
End Class
Uma opção ainda melhor ao invés de um array, seria um List<T>:
Function func() As List(Of Integer)
Dim vetor as List(Of Integer)
vetor.Add(1)
vetor.Add(2)
vetor.Add(3)
vetor.Add(4)
Return vetor
End Function
E para fazer um loop no retorno, algo como:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim x As List(Of Integer) = func()
For Each item As Integer In x
Label2.Text = item.ToString()
Next
End Sub
ou melhor ainda:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
For Each item As Integer In func()
Label2.Text = item.ToString()
Next
End Sub
E usando uma expressão Lambda:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
func().ForEach(Function(item) Label2.Text = item.ToString())
End Sub
Acredite ou não, aquela linha [Ô]func().ForEach(Function(item) Label2.Text = item.ToString())[Ô] faz exatamente a mesma coisa que os outros for...each
Mas esse tipo de função, não tem nada [Ô]fora do comum[Ô], fora do comum, seria uma função que retorna uma função...
Function func() As List(Of Integer)
Dim vetor as List(Of Integer)
vetor.Add(1)
vetor.Add(2)
vetor.Add(3)
vetor.Add(4)
Return vetor
End Function
E para fazer um loop no retorno, algo como:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim x As List(Of Integer) = func()
For Each item As Integer In x
Label2.Text = item.ToString()
Next
End Sub
ou melhor ainda:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
For Each item As Integer In func()
Label2.Text = item.ToString()
Next
End Sub
E usando uma expressão Lambda:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
func().ForEach(Function(item) Label2.Text = item.ToString())
End Sub
Acredite ou não, aquela linha [Ô]func().ForEach(Function(item) Label2.Text = item.ToString())[Ô] faz exatamente a mesma coisa que os outros for...each
Mas esse tipo de função, não tem nada [Ô]fora do comum[Ô], fora do comum, seria uma função que retorna uma função...
também acho o list melhor, porem como a pergunta era especifica fiz uma resposta especifica....
agora aquele...
realmente ficou muito bom!
agora aquele...
Citação:Acredite ou não, aquela linha [Ô]func().ForEach(Function(item) Label2.Text = item.ToString())[Ô] faz exatamente a mesma coisa que os outros for...each
realmente ficou muito bom!
Só para complementar a resposta dos colegas:
Se você não souber o tamanho o Array vai ter, vai ter que usar [txt-color=#0000f0]ReDim Preserve[/txt-color]:
No Clique do botão
Depois crie a função:
repare que o uso do Vetor1 foi só para você ver o uso do ReDim no Vetor2
Abraços
Se você não souber o tamanho o Array vai ter, vai ter que usar [txt-color=#0000f0]ReDim Preserve[/txt-color]:
No Clique do botão
Dim Vetor() As String = PreencheVetor()
Depois crie a função:
Public Function PreencheVetor() As Array
Dim Vetor1() As String = {[txt-color=#e80000][Ô]Dado1[Ô][/txt-color], [txt-color=#e80000][Ô]Dado2[Ô][/txt-color], [txt-color=#e80000][Ô]Dado3[Ô][/txt-color], [txt-color=#e80000][Ô]Dado4[Ô][/txt-color], [txt-color=#e80000][Ô]Dado5[Ô][/txt-color]}
Dim Vetor2() As String
Dim X As UInt32 = 0
For X = 0 To Vetor1.Count - 1
ReDim Preserve Vetor2(X)
Vetor2(X) = Vetor1(X)
Next
PreencheVetor = Vetor2
Return PreencheVetor()
End FuncTion
repare que o uso do Vetor1 foi só para você ver o uso do ReDim no Vetor2
Abraços
Tópico encerrado , respostas não são mais permitidas