|
|
|
|
|
Dicas
|
|
Visual Basic (Miscelâneas)
|
|
|
Título da Dica: Utilizando InStr para reduzir chamadas a funções
|
|
|
|
Postada em 8/9/2003 por Ð@®l@n
Pode-se reduzir consideravelmente as chamadas a funções utilizando simplesmente a função InStr. Veja alguns exemplos :
If UCase$(char) = "A" Or UCase$(char) = "E" Or UCase$(char) = "I" Or UCase$ _ (char) = "O" Or UCase$(char) = "U" Then ' É uma vogal End If
Esse código todo pode ser reduzido para :
If Instr("AaEeIiOoUu",char)<>0 then 'É uma vogal end if
Com isso economizou-se processamento no IF e diversas chamadas à função Ucase
Veja agora com palavras distintas :
If LCase$(word) = "winter" Or LCase$(word) = "spring" Or LCase$(word) = _ "summer" Or LCase$(word) = "fall" Then ' É uma estação do ano End If
Ou :
If Instr(";winter;spring;summer;fall;",";" & word & ";")<>0 then 'É uma estação do ano end if
Novamente substituimos várias chamadas de função por uma única chamada a Instr. Neste código várias sutilezas devem ser observadas :
O ponto e virgula separando as estações faz com que caso a variável contenha "ingsum" ela não seja erroneamente reconhecida como uma estação.
A concatenação de ; na variável faz com que caso a variável contenha "ing;sum" ela não seja erroneamente reconhecida como uma estação.
A concatenação de ; na variável exige que a string das estações possua um ponto e vírgula no início e outro no final, para permitir o reconhecimento correto.
Mas não para por ai : Podemos substituir select cases inteiros pelo uso da Instr. Veja :
Select Case LCase$(word) Case "zero" result = 0 Case "one" result = 1 Case "two" result = 2 Case "three" result = 3 Case "four" result = 4 Case "five" result = 5 Case "six" result = 6 Case "seven" result = 7 Case "eight" result = 8 Case "nine" result = 9 End Select
Ou :
result = InStr(";zero;;one;;;two;;;three;four;;five;;six;;;seven;eight;nine;", _ ";" & LCase$(word) & ";") \ 6
Este exemplo calcula o valor do resultado com base na posição gerada pelo InStr. Para isso é necessário que todas as palavras tenham o mesmo comprimento, 6 caracteres no caso (o maior número + ;).
Com base nisso, foi feita uma divisão inteira da posição encontrada pelo InStr por 6, gerando assim o mesmo resultado que o select case geraria.
|
|
|
|
|