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

Operador Like

Este poderá parecer um artigo bastante simples sobre Visual Basic e até é na verdade, mas a realidade é que muito programadores ou aspirantes a programadores de Visual Basic não utilizam determinadas funcionalidades, acredito que por desconhecimento, que podem simplificar bastante o código.

O operador Like não está disponível no C# e pode ser substituído pela utilização de Expressões Regulares (Regular Expressions). No entanto, embora as expressões regulares sejam muito mais poderosas e versáteis, pequenas validações podem ser feitas mais facilmente usando este operador.

O operado Like é um dos operadores de comparação disponíveis no Visual Basic assim como o = (igual), <= (menor ou igual), >= (maior ou igual), <> (diferente), Is e IsNot. Os operadores de comparação, como deve ser do vosso conhecimento, devolvem um resultado booleano (true ou false).

resultado = texto like mascara

O seguinte exemplo mostra a utilização do operador Like:

Dim local As String = "Lisboa"
Dim resultado As Boolean = local Like "Lisboa"
' Resultado: resultado = True

O resultado da expressão indicada (local Like “Lisboa”) é True.

É um exemplo bastante simples e que até poderia ser utilizado o operador = (igual) pois está a validar se uma string é igual a outra string, mas a vantagem de utilizarmos o operador Like é que nos permite também utilizar wildcards para a mascara de validação.

Existem três wildcards que podemos utilizar:

  • “*” – Substitui um grupo de caracteres
  • “?” – Substitui um caractere
  • “#” – Substitui um dígito

Alguns exemplos utilizando o wildcard asterisco (*) e respectivos resultados:

Dim word As String = "Revista Programar"

Console.WriteLine(word Like "*Programar")
' Resultado: True

Console.WriteLine(word Like "*ista*")
' Resultado: True

Console.WriteLine(word Like "*Revista")
' Resultado: False

Agora usando o wildcard ponto de interrogação (?)
 
Dim word As String = "VB.NET"

Console.WriteLine(word Like "VB.NE?")
' Resultado: True

Console.WriteLine(word Like "VB.?")
' Resultado: False

Console.WriteLine(word Like "VB.???")
' Resultado: True

E finalmente usando o wildcard cardinal (#):
Dim cod As String = "2900-110"

Console.WriteLine(cod Like "2900-11#")
' Resultado: True

Console.WriteLine(cod Like "2900-#")
' Resultado: False

Console.WriteLine(cod Like "2900-###")
' Resultado: True

Um exemplo conjugando vários wildcards, de modo a mostrar uma validação mais complexa poderá ser:

Dim artigo As String = "PT-AB1234"

If artigo Like "*-??####" Then
Console.WriteLine("Artigo válido")
End If

Nesta validação, que nos dá um resultado verdadeiro, estamos a garantir que o artigo inicia por um texto qualquer (*), seguido de um hífen (-), tendo de seguida dois caracteres alfanuméricos (??) e três números (###).

Mas existem ainda mais formas de usar o operador Like. Podemos definir, entre parênteses rectos, que letras são permitidas na substituição ou entre que intervalos são permitidos usar. Podemos também definir múltiplos intervalos entre os parênteses rectos.

É importante ter em atenção a distinção entre maiúsculas e minúsculas e, no caso de intervalos, definir da primeira letra para a última (de acordo com a ordem do abecedário).

Alguns exemplos para que entenda melhor:  

Dim r = "Revista" Like "Revist[aeiou]"
' Resultado: True

Neste caso a última letra da palavra “Revista” está entre as permitidas nesta validação [aeiou], por isso o resultado é verdadeiro.

Dim r = "Revista" Like "[a-z]evista"
' Resultado: False

O resultado é falso pois a primeira letra da palavra “Revista” não está entre as letras a e z pois esta encontra-se em maiúsculas (“R”).

Dim r = "Revista" Like "[RV]evist[a-c]"
' Resultado: True

Neste exemplo o resultado é verdadeiro pois a primeira letra é um “R” ou “V” e a última é um “a”, “b” ou “c”.

Podemos ainda usar da mesma forma, excluindo determinados caracteres, através da indicação de um ponto de exclamação, ou seja:

Dim r = "Revista" Like "Revist[!abc]"
' Resultado: False

Ou seja, nesta validação estamos a verificar se a última letra não é um “a”, “b” ou “c” (através de [!abc]), o que torna a expressão falsa pois “Revista” termina em “a”.

Para terminar e para mostrar que podemos usar várias combinações, vamos validar:

  1. Se temos no início da palavra uma letra em minúsculas ou a letra “R” - [a-zR]
  2. Que a segunda letra não é um “a” – [!a]
  3. Que a ultima letra é um “a”, “b” ou “c” – [a-c]

Usamos ainda wildcards para outras validações já referidas anteriormente.

Dim r = "Revista" Like "[a-zR][!a]vis?[a-c]*"
' Resultado: True

Por predefinição o modelo de comparação de strings está definido como binário (Option Compare Binary). Desta forma o intervalo [A-E] valida as letra A, B, C, D e E. Se alterarmos o modelo de comparação para texto (Option Compare Text) então o mesmo intervalo valida maiúsculas e minúsculas.

Option Compare Text

Module Module1

Sub Main()

Dim r = "ÀeIÓu" Like "àeióu"
' Resultado: True

End Sub

End Module

O operador Like permite também o seu overloading, à semelhança de outros operadores, alterando desta forma o seu comportamento.

Conclusão

O operador Like é um operador de comparação que permite validar expressões utilizando mascaras, um pouco à semelhança das Regular Expressions, embora muito mais limitado. No entanto, para muitas validações, pode ser uma opção bastante válida e simples de implementar.

Este artigo, entre muitos outros, está disponível na Revista PROGRAMAR, Edição 40 de Abril de 2013

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