O VBScript possibilita a segmentação do código – tornando-o mais objetivo e reutilizável – com a criação de subrotinas e funções. Veja como utilizá-las e quais suas diferenças.
Nesta aula trabalhamos com subrotinas e funções no VBScript. O conceito de função na programação já foi visto em aulas anteriores. Uma explicação breve pode ser vista nesta aula, sobre funções no Javascript.
A grande diferença entre utilizar funções no Javascript, no PHP ou no VBScript é que, neste último, existe dois tipos de “função”: a função propriamente dita e a subrotina. Na verdade, ambas só diferem em uma questão: a função retorna um valor, enquanto que a subrotina não retorna nada.
Para ficar mais claro, vamos a um exemplo:
<% ' declaração de uma subrotina chamada mostraData Sub mostraData () Dim hoje, dia, mes, ano ' array meses Dim meses(11) meses(0) = "janeiro" meses(1) = "fevereiro" meses(2) = "março" meses(3) = "abril" meses(4) = "maio" meses(5) = "junho" meses(6) = "julho" meses(7) = "agosto" meses(8) = "setembro" meses(9) = "outubro" meses(10) = "novembro" meses(11) = "dezembro" ' obtém data atual hoje = Date ' extrai o dia da data dia = Day(hoje) ' extrai o mês da data mes = Month(hoje) ' extrai o ano da data ano = Year(hoje) ' exibe a data completa Response.Write(dia & " de " & meses(mes-1) & " de " & ano) ' fim da subrotina End Sub
Ao executar o código acima, vocês perceberão que nada acontece. Não há nada de errado. Apenas declaramos uma subrotina, mas não a utilizamos. Para utilizá-la, basta o seguinte:
' chamada à função mostraData ' ou Call mostraData ' com ou sem parênteses mostraData() Call mostraData()
Utilizamos quatro chamadas à função só para que ficasse claro que poderíamos fazê-lo de várias formas diferentes. Com ou sem a palavra “Call” e com ou sem parênteses.
Após a execução é possível compreender melhor o código da subrotina. O que ela faz é obter a data atual, extrair algumas informações desta data e exibí-la de uma forma específica. Após seu processamento, nenhuma informação produzida na subrotina é utilizada posteriormente no script, já que subrotinas não retornam valores.
Vamos conferir outro exemplo, desta vez utilizando parâmetros:
<% Sub fatorial(numero) Dim i, mult mult = numero For i = numero-1 To 1 Step -1 mult = mult * i Next Response.Write(mult) End Sub
O parâmetro em questão é o que está entre os parênteses: o “numero”. Com a utilização de parâmetros (ou argumentos) é possível introduzir valores na subrotina ou função. No exemplo acima, a subrotina exibe o fatorial de um valor especificado. Como especificar esse valor? Vejamos:
' chamada à subrotina fatorial Call fatorial(5)
O valor fornecido (5) entra na subrotina como sendo o valor para a variável de nome “numero”. Ou seja, os cálculos envolvendo a variável “numero” tomam por seu valor o parâmetro passado na chamada da subrotina. Desta forma podemos exibir o valor do fatorial de qualquer número, basta especificá-lo como parâmetro. Exemplos:
Call fatorial(9) Call fatorial(8) Call fatorial(7) Call fatorial(6)
E se desejarmos fazer algo com o valor do fatorial, como armazená-lo em uma variável ou inserí-lo em um cálculo matemático? Isso só é possível se utilizarmos funções ao invés de subrotinas. Vejamos:
Function fatorial2(numero) Dim i, mult mult = numero For i = valor-1 To 1 Step -1 mult = mult * i Next fatorial2 = mult End Function
A declaração de uma função é bem similar à declaração de uma subrotina. A diferença é que em algum ponto da função é necessário atribuir um valor à função. Neste exemplo, isto acontece ao colocarmos “fatorial2 = mult”. Quando atribuímos um valor à função, estamos na verdade retornando um valor. Ou seja, é como se a função possuísse um valor, semelhante a uma variável.
Vejam também que não mostramos qual o resultado do fatorial. Não há nenhum Response.Write dentro da função. Na verdade, as funções tendem a ser tão genéricas quanto possível. Não exibindo o valor durante o processamento, a função permite que o façamos apenas quando for necessário (e se realmente for). Em uma determinada situação, poderemos exibir o resultado imediatamente, em outra, talvez não seja interessante exibí-lo. No exemplo acima, para mostrarmos esse valor ou armazenarmos em uma variável faríamos o seguinte:
' Chamando função Dim valorFat ' Armazenando seu valor de retorno em uma variável valorFat = fatorial2(4) ' Exibindo seu valor de retorno Response.Write(valorFat) ' Inserindo a função dentro de uma expressão matemática e exibindo o resultado Response.Write(fatorial2(5) + fatorial2(6)) %>
Dúvidas? Comentem…
2.01.2008 às 14:03 |
Olá Iran,
Ótimo artigo, muito claro e objetivo. Gostei muito. Estou procurando como passar argumentos externos em VBScript. Como já se faz com arquivos em lote: “C:\teste.bat %1″. Você sabe algum lugar que explique como receber o argumento? Parabens pelo artigo e desde já agradeço a atenção.
Abraço.
Fabiano Matias
22.12.2008 às 14:39 |
sobre a função acho que ficou errado a 4 linha
onde se lê > For i = valor-1 To 1 Step -1
entende-se > For i = numero-1 To 1 Step -1
28.01.2009 às 13:00 |
Muito, estava precisando exatamente disto. Fatorial de um número para fechar uma subrotina da teoria dos conjuntos.
Abraços,
Prof. Anselmo