Subrotinas e funções em VBScript

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…

3 Respostas para “Subrotinas e funções em VBScript”

  1. Fabiano Matias Disse:

    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

  2. The And Disse:

    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

  3. Anselmo Domingos Perroni Disse:

    Muito, estava precisando exatamente disto. Fatorial de um número para fechar uma subrotina da teoria dos conjuntos.

    Abraços,

    Prof. Anselmo

Deixe um comentário