O With
Introdução
Para acelerar o desenvolvimento, o VB 2008 possuí uma série de atalhos que nos permitem reduzir a quantidade de linhas ou repetições o que aumenta a legibilidade do código e consequentemente aumenta a facilidade de manutenção. Um dos atalhos mais úteis é sem dúvida o With.
Em repetições
Podemos utilizar o With quando nos queremos referenciar várias vezes à mesma instancia, por exemplo.
Dim Botao As New Button
With Botao
.Visible = True
.Top = 0
.Left = 0
.BackColor = Color.Aqua
.Text = "O meu botão"
End With
Ideia: Também o podemos fazer sem o ponto no início para melhorar a legibilidade.
A sua utilidade torna-se mais evidente em situações como esta:
Sem With
:
Dim Ano As Integer = My.Computer.Clock.LocalTime.Year
Dim Mes As Integer = My.Computer.Clock.LocalTime.Month
Dim Dia As Integer = My.Computer.Clock.LocalTime.Day
Dim Hora As Integer = My.Computer.Clock.LocalTime.Hour
Dim Minuto As Integer = My.Computer.Clock.LocalTime.Minute
Dim Segundo As Integer = My.Computer.Clock.LocalTime.Second
Com With
:
With My.Computer.Clock.LocalTime
Dim Ano As Integer = .Year
Dim Mes As Integer = .Month
Dim Dia As Integer = .Day
Dim Hora As Integer = .Hour
Dim Minuto As Integer = .Minute
Dim Segundo As Integer = .Second
End With
O With
não serve apenas para atribuições directas. Pode ser usado em qualquer situação, por exemplo:
Dim OFD As New OpenFileDialog
With OFD
.Title = "Abrir ficheiro"
.Filter = "ZugZug|zug??.zag"
If .ShowDialog() = Windows.Forms.DialogResult.Cancel Then
.Title = "Mas eu quero um ficheiro!"
.ShowDialog()
End If
Dim SR As New IO.StreamReader(.FileName)
SR.Close()
End With
Também o podemos emparelhar:
Public Class Form1
Private Structure Pessoa
Public Nome As String
Public Morada As Morada
End Structure
Private Structure Morada
Public Pais As String
Public Cidade As Cidade
End Structure
Private Structure Cidade
Public Localidade As Localidade
Public Distrito As String
End Structure
Private Structure Localidade
Public Rua As String
Public Porta As String
Public CodigoPostal As String
End Structure
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Homem As New Pessoa
Dim Nome As String = String.Empty
Dim Rua As String = String.Empty
With Homem
Nome = .Nome
With .Morada.Cidade.Localidade
Rua = .Rua
End With
End With
End Sub
End Class
Ideia: O exemplo anterior utiliza estructuras. Poderá saber mais sobre estructuras através do artigo Structures - Classes de brincar.
Em inicializações
Em inicializações o With
é também bastante útil.
Sem With
:
Dim Botao As New Button
Botao.Top = 0
Botao.Left = 0
Botao.Text = "I, Botão."
Com With
:
Dim Botao As New Button With {.Top = 0, .Left = 0, .Text = "I, Botão."}
Esta última utilização do With
é particularmente útil se estivermos a instanciar objectos fora de uma Sub
, onde não podemos atribuír valores logo após inicialização. Com o With
, já pode ser instanciado e inicializado.