Ir para o conteúdo

Structures - Classes de brincar

Introdução

Para todas aquelas aplicações em que achamos que ter uma classe é demais ou apenas para aqueles que gostam simplesmente de catalogar e organizar, as Structures, ou estruturas, são o tipo de dados composto ideal. Podemos basear uma noção de Structures numa classe, senão reparem:

É instanciável? Sim.
Podemos declarar o constructor? Claro. Necessita apenas, obrigatoriamente, de possuír pelo menos um argumento.
Pode abrigar variáveis? Sem dúvida.
Pode abrigar propriedades? Porque não?
Pode abrigar métodos? Perfeitamente. Até estáticos.
Posso deixar de usar classes? Não. São duas coisas diferentes.

Na verdade, existem algumas coisas úteis que as Structures não podem fazer, como herdar de outras. As classes são elementos vitais e não se deve considerar a sua substituição por Structures. As Structures devem ser usadas quando existem pequenas necessidades de arrumação e/ou organização que não justifiquem a criação de uma classe.

Alguns exemplos de utilização

Agrupamento de dados

    Public Structure Coordenada
        Public X As Integer
        Public Y As Integer
        Public Descrição As String
    End Structure

    Private Sub NovaCoordenada()
        Dim Coor As New Coordenada
        Coor.Descrição = "Pixel preto"
        Coor.X = 100
        Coor.Y = 100
    End Sub

Agrupamento de dados central

    Public Structure EsteComputador
        Private Nulo As Boolean 'apenas para passar no compilador
        Public Shared Computador As String
        Public Shared IP As Net.IPAddress
        Public Shared Estado As String
    End Structure

    Private Sub EstadoDoPC()
        Dim Comp As String = EsteComputador.Computador
        Dim IP As String = EsteComputador.IP.ToString
        Dim Estado As String = EsteComputador.Estado
    End Sub

Agrupamento de dados com um método, propriedade e constructor

    Public Structure 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

    End Structure

    Private Sub NovaPessoa()
        Dim Homem As New Pessoa("José")
        Homem.Morada = "Rua dos pepinos"
        Homem.AnoNascimento = 1986
        Homem.Apelido = "Funil"

        MostraNomeCompleto(Homem)
    End Sub

    Private Sub MostraNomeCompleto(ByVal Homem As Pessoa)
        MsgBox(Homem.NomeCompleto)
    End Sub

Por que é a arrumação tão referenciada?

Utiliza-se muitas vezes a referência à arrumação porque tudo o que está dentro de uma Structure está coberto pelo Intellisense1, o que ajuda bastante a referência aos elementos da Structure. Para além disso, à semelhança das classes, e porque uma Structure é instanciável, podemos armazenar n instâncias com dados diferentes em listas ou por outros meios, tornando as Structures o tipo de dados ideal para uma "colecção de colecções de dados".