Curso de Basic
Funções
Você está em: MarMSX >> Cursos >> BASIC
As funções são sub-rotinas que tem como objetivo executar uma determinada tarefa e retornar uma resposta ao usuário. Elas podem ou não receber parâmetros e são de dois tipos no Basic: nativas e criadas pelo usuário.
Sintaxe de uma função em Basic:
nome_da_função(lista_de_parâmetros)
Onde:
- O nome_da_função é o nome utilizado para chamar a função. Também define o tipo de retorno:
- nome_da_função - retorna um tipo numérico
- nome_da_função$ - retorna um tipo string ou alfanumérico
- lista_de_parâmetros - São os parâmetros ou argumentos (dados) passados para a função. Podem ser vários nomes, separados por vírgulas.
Ex:
PRINT HEX$(4) ↵
4
Ok
É uma função que recebe um argumento no formato numérico e retorna um dado no formato string.
A função deverá sempre retornar seu valor a uma variável ou outra função compatível com o tipo de dado retorno. Dessa forma, não é possível chamar uma função sozinha. Ex:
SIN(0.34) ↵
Syntax Error
Ok
A$ = SIN(0.34) ↵
Type mismatch
Ok
Na sentença "A$ = SIN(0.34)", o tipo de retorno da função SIN é numérico e a variável para armazenar o resultado é do tipo string. Assim, um erro de "tipo incompatível" é gerado.
Funções Nativas
As funções nativas são aquelas que já fazem parte do compilador Basic e basta apenas chamá-las, forncenendo os argumentos necessários.
Lista de funções do Basic [1]:
ABS ASC ATN BIN$ CDBL CHR$ CINT COS CSNG EOF |
ERR ERL EXP FIX HEX$ INKEY$ INP INSTR INT LEFT$ |
LEN LOG LPOS MID$ MID$= OCT$ PAD PDL PEEK POINT |
POS RIGHT$ RND SGN SIN SPACE$ SPC SQR STICK STRIG |
STR$ STRING$ TAB TAN USR VAL VARPTR |
Exemplos:
PI = 3.14159 ↵
PRINT SIN(PI/2) ↵
.999999999999
Ok
A$="MarMSX" ↵
PRINT "A string " + A$ + " possui"; LEN(A$); "caracteres." ↵
A string MarMSX possui 6 caracteres.
Ok
PRINT BIN$(7) ↵
111
Ok
A função "MID$=" é a única função que não retorna valor e recebe um valor do operador igual "=":
A$="MarMSX"↵
B$="sN" ↵
MID$(A$,3,2)=B$ ↵
PRINT A$ ↵
MasNSX
Ok
Funções Criadas pelo Usuário
O usuário também pode criar funções em Basic. Isso é feito de duas maneiras:
- Funções simples através do comando DEF FN.
- Funções mais complexas com o uso de sub-rotinas (GOSUB-RETURN).
Comando DEF FN
O comando DEF FN cria uma função baseada em uma expressão matemática. Ela não permite a definição de comandos.
Sinataxe:
DEF FN nome_da_função (lista_de_parâmetros) = expressão
A função DEF FN não pode ser usada como um comando direto, ou seja, ela deverá estar inserida num programa. Além disso, a lista_de_parâmetros poderá ter até 9 parâmetros.
O nome da função poderá ter até duas letras.
Exemplo:
10 DEF FN F(X)=2*X
20 INPUT"Numero";N
30 PRINT "O dobro de";N;"é";FN F(N)
Saída:
Numero? 2
O dobro de 4 é 2
Na hora de chamar a função para calcular, é necessário o uso do "FN" antes do nome da função.
Uma função que não recebe parâmetros de entrada:
10 DEF FN Q=3*4
20 PRINT FN Q
Saída:
12
Outro exemplo: uma função para calcular a velocidade média.
10 DEF FN V(S,T) = S/T
20 INPUT"Espaço percorrido (m)";S
30 INPUT"Tempo gasto (s)";T
40 PRINT "A velocidade média foi de";FN V(S,T);"m/s."
Saída:
Espaço percorrido (m)? 100
Tempo gasto (s)? 10
A velocidade média foi de 10 m/s.
Podemos ainda utilizar outras funções dentro da definição de uma função. Ex:
10 DEF FN T(X) = 3*SIN(X) + 2*COS(X)
20 PRINT USING "##.##";FN T(0.5)
Saída:
3.19
Uma função que trabalha com strings:
10 DEF FN S$(N$) = N$ + N$
20 PRINT FN S$("BE")
Saída:
BEBE
Uma função que trabalha tanto com strings, como números:
10 DEF FN S$(N$,L) = RIGHT$(N$,L) + LEFT$(N$,L)
20 PRINT FN S$("MarMSX",3)
Saída:
MSXMar
O artigo de funções dessa página apresenta uma interessante função para formatar strings. A função dela é acrescentar um certo número de 0's à esquerda de um número.
Função como sub-rotina
Podemos também criar funções utilizando o recurso de GOSUB-RETURN.
Diferente do DEF FN, agora é possível criar uma sub-rotina para o tratamento de uma função. Entretanto, não podemos passar parâmetros e tampouco receber o retorno da função. Nesse caso, é necessário o uso de variáveis globais para se comunicar com a função.
Vamos reescrever o código do programa da seção anterior, que calcula o dobro de um número, utilizando o recurso de sub-rotinas.
10 INPUT"Numero";N
20 GOSUB 100
30 PRINT "O dobro de";N;"é";D
40 END
100 '
110 ' Calcula o dobro
120 '
130 D = N*2
140 RETURN
Tanto o argumento de entrada, como o valor de retorno são armazenados em uma variável do programa.
Referências:
[1] - Livro: Linguagem Basic MSX, editora Aleph, 5a. Edição, 1987.