Curso de Basic
Funções


  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:   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:
  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.


MARMSX/CURSOS/Basic