• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gooden

Mexer com Structure

14 mensagens neste tópico

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 :thumbsup:

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É o bom de ser uma Wiki como é.

Se achas que está mal, incompleto ou impreciso... larga ferro :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como a abordagem está boa :thumbsup:

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

Também eu :)

No emprego todos os PC's têm apenas o .NET Framework 2.0 e apenas em projectos externos utilizo Lambda, LINQ ou XML Literals. Paciência.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não gosto de pessoas como tu..... fazem-me concordar com elas e com vontade de trabalhar :D

estou a brincar....

Vou começar a escrever o artigo. :) HERE I GOOOOOOOOOOOOOOO WIIIIIIIIII

Sou da opinião que não se devia falar de implements neste artigo... fazer 1 apenas de estruturas e depois outro de implements

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora