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
É 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
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:
- Se temos no início da palavra uma letra em minúsculas ou a letra “R” - [a-zR]
- Que a segunda letra não é um “a” – [!a]
- 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:
Enviar um comentário