Mais antigamente ainda não tinha o GOSUB
tinha que se virar com o GOTO
.
Nós usavamos um artifício, uma variável que armazenava o número da linha para a qual o programa deveria continuar.
Mais antigamente ainda não tinha o GOSUB
tinha que se virar com o GOTO
.
Nós usavamos um artifício, uma variável que armazenava o número da linha para a qual o programa deveria continuar.
Bem, é possível que a versão que vocês utilizavam não havia implementado gosub
. Assim como algumas não implementavam READ/DATA
(o que eu acho que seria bem interessante para a fase de testes nas linguagens atuais)
Busquei o manual do primeiro BASIC (1964) para confirmar. Tinha GOTO/GOSUB
e me deparei com algo que não conhecia. Já era possível definir funções simples iniciando com FN
e mais uma letra (até 26 funções) do tipo:
10 REM FND = DOBRO
15 DEF FND(X)=2*X
20 PRINT FND(4)
Como eram usados cartões, em vez de =
era para entrar EQU
, LSS
para <
, etc..
Moral: Aprendi algumas coisas que não sabia sobre BASIC (não vou usar mas não tem problema :D )
Provavelmente você aprendeu BASIC no CP500 não foi?
O CP500 tinha muita memória RAM.
Eu sempre fico feliz quando encontro algum programador da mesma época.
Eu usava BASIC em PCs mais simples; sem o GOSUB
.
Haviam também os Sinclair com uma versão extendida; o Sinclair BASIC, com vários (ironia aqui) comandos a mais que os outros PCs, talvez uns 5 comandos a mais.
O DEF FN
funciona de maneira semelhante ao #define
do C, utilizando o exemplo que você deu, sempre que o interpretador BASIC encontrar FND(X)
faz uma substituição por 2*X
(mantendo o que encontrar no lugar do X
); dessa maneira o programa não perdia desempenho em termos de velocidade, e ainda era possível utilizar o DEF FN
com qualquer tipo de variável inclusive alfanuméricas.
Se ingnorarmos que o C é compilado e o BASIC interpretado, então DEF FN
e #define
são exatamente iguais.
Porém; não éra possível ter "Comandos" BASIC dentro do DEF FN
, nem recursividade, nem multiplas linhas.
Não era possível por exemplo criar uma função que aguardasse o usuário digitar algo e então retornar um valor; nem uma função que pudesse ler de um arquivo e retornar um valor.
Apesar de ser uma função do ponto de vista matemático; não era uma função como as outras da própria linguagem e que morriamos de vontade de criar nossas próprias funções personalizadas; nada perto do que sabemos que é uma função numa linguagem de programação.
Isso foi introduzido mais tarde com o uso de SUB
e FUNCTION
.
Quanto ao GOSUB
não foi implementado nos primeiros interpretadores BASIC por que esse comando necessitava de uma STACK para empilhar as linhas para as quais deveria retornar.
Observe que o manual de 1964 que você leu é do "Dartmouth Time Sharing System"; e anterior ao lançamento do primeiro processador comercial; o Intel 4004 de 1971. Acredito que raríssimos programadores tiveram acesso a esse sistema da Dartmouth.
Nessa época nem os bancos tinham computadores!
Os computadores só se tornaram acessíveis aos programadores após o Z80 de 1976; mas bem depois...
No Brasil os primeiros PCs foram fabricados em meados dos anos 80 e custavam o equivalente a dois carros zero quilômetros; e as leis de importação tornavam proibitivo importar um PC.
Alguns PCs dessa época tinham o interpretador BASIC na própria ROM que costumava ter 4 kB para caber o interpretador BASIC e era invocado logo após a BIOS, isso tornava possível baratear o PC pois não precisaria uma unidade de disquetes para rodar o BASIC.
Porém a RAM como era muito cara tinha no máximo 1 kB então o GOSUB
foi suprimido evitando a necessidade de criar uma stack adicional só para esse comando.