Jump to content

Mexer com Structure


Gooden
 Share

Recommended Posts

Boas People. =D

Estava a responder a outro tópico fiz aqui um código que pode interessar a muitos quanto a mexer com estruturas juntamente com List of. =)

Primeiro criamos a estrutura =D


    Private Structure Cliente
        Implements IComparable(Of Cliente)
        Private _nome As String
        Private _zona As String
        'esta sub server para podermos usar o New Cliente("","")
        Public Sub New(ByVal Nome As String, ByVal Zona As String)
            _nome = Nome
            _zona = Zona
        End Sub
        'Server Para retomar ou Definir o Nome
        Public Property Nome() As String
            Get
                Return _nome
            End Get
            Set(ByVal Nome As String)
                _nome = Nome
            End Set
        End Property
        'Server Para retomar ou Definir a Zona
        Public Property Zona() As String
            Get
                Return _zona
            End Get
            Set(ByVal Zona As String)
                _zona = Zona
            End Set
        End Property
        'Funçao que irá Comparar as Zonas
        Public Function CompararZonas(ByVal bo As Cliente) As Boolean
            'Neste caso o UPPER fara com que não haja diferença em escrever LISBOA ou Lisboa
            Return bo.Zona.ToUpper = Me.Zona.ToUpper
        End Function
        'Funçao que irá Comparar os Nomes
        Public Function CompararNomes(ByVal bo As Cliente) As Boolean
            'Neste caso o UPPER fara com que não haja diferença em escrever JOÃO ou João
            Return bo.Nome.ToUpper = Me.Nome.ToUpper
        End Function
        'Comparar Nome Com Cliente
        Public Function CompareNomeTo(ByVal other As Cliente) As Integer Implements System.IComparable(Of Cliente).CompareTo
            Return other.Nome.ToLower = Me.Nome.ToLower
        End Function
    End Structure

É uma estrutura simples para que entendam bem =) os comentários estão la para ajudar a entender as coisitas =D

Após isso é só testar 👍

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Criamos uma Lista de Clientes e Zona onde moram
        Dim Clientes As New List(Of Cliente)
        Clientes.Add(New Cliente("Bruno Pacheco", "Porto"))
        Clientes.Add(New Cliente("Heckel", "Braga"))
        Clientes.Add(New Cliente("João Silva", "Lisboa"))
        Clientes.Add(New Cliente("Bruno XPTO", "Rio Grande"))
        Clientes.Add(New Cliente("Heckel", "Lisboa"))

        'Aqui vamos criar um cliente com os parametros que queremos procurar =)
        'Escrevi com Letras maiusculas e minusculas para o .toUpper fazer a sua Funçao =)
        Dim Procurar As New Cliente("HeCkEl", "LiSbOa")
        'Vamos procurar Todos os Clientes neste caso na zona de lisboa
        Dim Clt As Cliente
        For Each Clt In Clientes.FindAll(AddressOf Procurar.CompararZonas)
            MsgBox("Zona Igual: " & Clt.Nome & " - " & Clt.Zona)
        Next
        'Vamos procurar Todas as zonas cujo o nome do cliente é igual
        For Each Clt In Clientes.FindAll(AddressOf Procurar.CompararNomes)
            MsgBox("Nome Igual: " & Clt.Nome & " - " & Clt.Zona)
        Next
        'Vamos procurar Todas as zonas cujo o nome do cliente é igual, Metodo 2
        For Each Clt2 As Cliente In Clientes
            If Procurar.CompareNomeTo(Clt2) Then
                MsgBox("Nome Igual: " & Clt2.Nome & " - " & Clt2.Zona)
            End If
        Next Clt2
        'vamos procurar se existe algum Bruno Pacheco na Zona de Lisboa
        If Clientes.Contains(New Cliente("Bruno Pacheco", "Lisboa")) Then
            MsgBox("Bruno Pacheco encontrado na zona de Lisboa!")
        Else
            MsgBox("Bruno Pacheco não encontrado na zona de Lisboa!")
        End If
        'vamos procurar se existe algum Bruno Pacheco na Zona de Porto
        If Clientes.Contains(New Cliente("Bruno Pacheco", "Porto")) Then
            MsgBox("Bruno Pacheco encontrado na zona de Porto!")
        Else
            MsgBox("Bruno Pacheco não encontrado na zona de Porto!")
        End If
    End Sub

Espero que isto vos seja útil de alguma maneira =)

Projecto:

http://rapidshare.com/files/292404579/Exemplo_Structure_Com_List_Of.zip.html

Link to comment
Share on other sites

Como a abordagem está boa 👍

Vou falar das interfaces que também é possível as implementar.. a syntax é Implements, que fica na linha a baixo do nome da Structure..

Um exemplo da implementação da interface IComparable..

     Public Structure Pessoa
        Implements IComparable(Of Pessoa)

        Public Nome As String
        Public Apelido As String
        Private Idade As Integer
        Public Morada As String

        Public Property AnoNascimento() As Integer
            Get
                Return Now.Year - Idade
            End Get
            Set(ByVal value As Integer)
                Idade = Now.Year - value
            End Set
        End Property

        Public Function NomeCompleto() As String
            Return Nome & Space(1) & Apelido
        End Function

        Public Sub New(ByVal NomePessoa As String)
            Nome = NomePessoa
        End Sub

        Public Function CompareTo(ByVal other As Pessoa) As Integer Implements System.IComparable(Of Pessoa).CompareTo
            Return other.Nome.ToLower = Me.Nome.ToLower
        End Function

    End Structure

Nota: ao colocar 'Implements IComparable', automaticamente o VB irá colocar os métodos da respectiva interface.. que neste caso é CompareTo

Compr.

Making the impossible possible and pwing the world on db at a time.

Link to comment
Share on other sites

Todos os ingredientes reunidos para uma boa sopa de Wiki.

Sempre queres reescrever o artigo Gooden? Se não, quando tiver uns tempinhos dou-lhe uns retoques para ficar mais completo.

fLaSh_PT, porreiro era um artigo sobre Interfaces (já estive quase, quase para escrever um, mas a porcaria do tempo....) para que se possa referenciar no artigo das structures.

Acho preferível os artigos lá do que a informação aqui e desta forma.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

fLaSh_PT alterei o código inicial... era aqulo?

Foi apenas um exemplo, secalhar até ficaria melhor com uma interface criada.. como por exemplo:

    ' Iterface do Cliente
    Interface Comparador(Of Cliente)
        ' Funções..
        Function CompararNomes(ByVal bo As Cliente) As Boolean
        Function CompararZonas(ByVal bo As Cliente) As Boolean
        ' Propriedades ..
        Property Nome() As String
        Property Zona() As String
    End Interface

    Private Structure Cliente
        Implements Comparador(Of Cliente)
        'Implementa a interface..

        Private _nome As String
        Private _zona As String

        'esta sub server para podermos usar o New Cliente("","")
        Public Sub New(ByVal Nome As String, ByVal Zona As String)
            _nome = Nome
            _zona = Zona
        End Sub

        'Server Para retomar ou Definir a Zona
        Public Property Nome() As String Implements Comparador(Of Cliente).Nome
            Get
                Return _nome
            End Get
            Set(ByVal value As String)
                _nome = value
            End Set
        End Property

        'Server Para retomar ou Definir o Nome
        Public Property Zona() As String Implements Comparador(Of Cliente).Zona
            Get
                Return _zona
            End Get
            Set(ByVal value As String)
                _zona = value
            End Set
        End Property

        'Funçao que irá Comparar as Zonas
        Public Function CompararNomes(ByVal bo As Cliente) As Boolean Implements Comparador(Of Cliente).CompararNomes
            'Neste caso o UPPER fara com que não haja diferença em escrever JOÃO ou João
            Return bo.Nome.ToUpper = Me.Nome.ToUpper
        End Function

        'Funçao que irá Comparar os Nomes
        Public Function CompararZonas(ByVal bo As Cliente) As Boolean Implements Comparador(Of Cliente).CompararZonas
            'Neste caso o UPPER fara com que não haja diferença em escrever LISBOA ou Lisboa
            Return bo.Zona.ToUpper = Me.Zona.ToUpper
        End Function
    End Structure

Isto serve apenas para demonstrar como utilizar as interfaces nas Structure, pode não parecer mas é muito útil, imaginem que tem um projecto com umas 100 classes.. na qual umas 15 tem os mesmas propriedades e metodos, se for criado uma interface e ser implementados nessas 15 classes.. quando houver necessidade de alterar/adicionar/remover alguma método o trabalho torna se simples 🙂

PS: as Interfaces são utilizadas nas classes da mesma forma que nas Structure ..

Compr.

Making the impossible possible and pwing the world on db at a time.

Link to comment
Share on other sites

Estou a gostar da "discussão" e dos métodos que estou a ver, mas mais um pequeno exemplo de como as Lambda Expressions podem simplificar:

        For Each Clt As Cliente In Clientes.FindAll(Function(f) f.Zona.ToUpper = "LISBOA")
            Debug.WriteLine(String.Format("Nome: {0} - Morada: {1}", Clt.Nome, Clt.Zona))
        Next

Isto não invalida que não se utilizem structures e interfaces, mas em muitas situações, e especialmente para coisas não muito complexas, é muito útil e simples de utilizar.

Link to comment
Share on other sites

@jpaulino

Sim, muito útil e simple de utilizar..

Não utilizo ainda muito, porque são novos métodos do .NET 3.x e a maioria dos PC's ainda não o tem instalado.. com .NET 2.x é mais provável um determinado PC já o ter instalado.. mas claro é uma questão de tempo.. creio que o Windows 7, já traz embutido o .NET 3.x 🙂

Making the impossible possible and pwing the world on db at a time.

Link to comment
Share on other sites

Ribeiro importas-te depois de dar uma revisa e fazer o artigo para a wiki??? Não tenho  muito jeito para isso e meu português é de assassino xD

Creio que deves ser tu fazer o artigo para a wiki.. quanto a erros podes utilizar um processador de texto como o MS Word.. acho que seria melhor começares e caso precises de ajuda.. levantares questões, assim creio que não te deve faltar ajuda.. 🙂

Making the impossible possible and pwing the world on db at a time.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.