Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB.NET: AndAlso, OrElse e Using

A utilização de operadores lógicos é tão comum que um pouco por todo o código se usam operadores como o And ou o Or . No entanto o VB.NET tem novos operadores, já disponíveis nas primeiras versões .NET, que muitos não usam por desconhecimento da sua real funcionalidade.

Os operadores AndAlso e OrElse, são designados short-circuiting operators, ou seja, são operadores de rápida validação ou de circuito reduzido.

Vejamos o funcionamento de uma validação:

CONDIÇÃO 1 CONDIÇÃO 2 RESULTADO
True True True
False True False
True False False
False False False

Ou seja, qualquer condição a False irá produzir um resultado False.

O que o AndAlso faz é quando encontrar uma condição a False, decide logo e não executa a condição seguinte. Isto pode reduzir bastante, dependendo das condições, o tempo de execução da aplicação.

A seguinte função leva algum tempo a executar e retorna o resultado (True ou False) indicado no parâmetro. Serve apenas para mostrar os diferentes resultados, na utilização de diferentes operadores, nos exemplos seguintes.

''' <summary>
''' Efectua um ciclo retornando o resultado indicado no parâmetro
'''
</summary>
Private Function doTestLoop(ByVal result As Boolean) As Boolean
    For
x As Byte = 0 To 200
        Threading.Thread.Sleep(5)
        Application.DoEvents()
    Next

   
Debug.WriteLine("Executado às " & Now.ToString)
    Return result
End Function

Este exemplo executa duas vezes a função doTestLoop() e irá depois parar na condição falsa


If
doTestLoop(False) And doTestLoop(False) Then
    Stop
' Condição verdadeira
Else
    Stop
' Condição falsa
End If

Usando o operador AndAlso, e no mesmo exemplo, irá ser executado apenas a primeira condição e salta para a condição falsa, reduzindo o tempo de ciclo.

If doTestLoop(False) AndAlso doTestLoop(False) Then
    Stop
' Condição verdadeira
Else
    Stop
' Condição falsa
End If

Isto permite que se criem validações, apenas em uma linha, sem erros indesejados.

Por exemplo, o seguinte código tenta encontrar um Form na aplicação que não existe, ficando a variável frm a Nothing. Neste caso é verificada a primeira condição, que é falsa, e sai da validação, mas se utilizássemos o operador And, iria ser feita a primeira condição e depois a segunda, originando um erro "Object reference not set to an instance of an object".


Dim
frm As Form = My.Application.OpenForms("Nome não Existente")
If frm IsNot Nothing AndAlso frm.Text = "Nome Pretendido" Then
    Stop
' Condição verdadeira
End If

O mesmo acontece com o operador OrElse. Se encontrar uma condição verdadeira ele decide, sem ter de executar a próxima.

A validação de uma condição Or funciona desta forma, ou seja, qualquer condição verdadeira irá ter um resultado verdadeiro:

CONDIÇÃO 1 CONDIÇÃO 2 RESULTADO
True True True
False True True
True False True
False False False

Neste exemplo simples será executado apenas a primeira condição, saltando logo para a condição verdadeira:


If doTestLoop(True) OrElse doTestLoop(True) Then
    Stop
' Condição verdadeira
End If


Resumindo: são dois operadores que podem e devem ser utilizados, especialmente se as condições/validações podem levar algum tempo a executar. Podem ainda simplificar o código, evitando-se utilizar If’s dentro de If’s para se conseguir o mesmo resultado.


O bloco Using é uma novidade da Visual Studio 2005/.NET Framework 2.0 e permite criar um bloco, onde no final, os recursos utilizados são libertados. Isto é muito útil e prático, especialmente quando se utilizam unmanaged resources, como ligações a base de dados, ligações a ficheiros de texto, objectos COM, etc.

Os unmanaged resources, são recursos que o CLR (Common Language Runtime) não liberta e que ficam a consumir desnecessariamente recursos do sistema. Os managed resources, por sua vez, são geridos pelo CLR através do .NET Framework Garbage Collector (GC).

No seguinte exemplo, mesmo que aconteça um erro, a ligação à base de dados é fechada e limpa, porque o Using faz o .Disposal() automaticamente sem código adicional.

Dim myConnectionString As String = String.Empty

Using conn As New SqlConnection(myConnectionString)
    conn.Open()

    Using command As New SqlCommand("SELEC * FROM myTable", conn)
        command.ExecuteNonQuery()
    End Using

End Using

Como se pode ver neste exemplo simples, é declarada a variável, usada dentro do bloco e finalmente faz o Disposal da variável.


PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!

0 comentários:

Mensagens Recentes



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico