
Há várias técnicas para encurtar programas
tendo em vista a economia de memória.
Posto que o ZX81 usa 6 bytes para
armazenar números, conseguiremos uma economia notável substituindo todos os números de
um programa (excepto os de linha) por símbolos equivalentes. Se os números 0 e 1 forem
substituídos por NOT PI e SGN PI respectivamente, obtém-se uma economia de 4 bytes
de cada vez.
Para um número maior, de um ou dois algarismos,
pode usar-se a função VAL. Por exemplo, VAL '4' poupa dois bytes, pois o
algarismo 4 é armazenado como string e não como número.
A função CODE pode ser usada com números
maiores, desde que haja um símbolo, no conjunto de caracteres, que corresponda ao número
em causa. Por exemplo, CODE 'IF' substituirá o número 250.
Se o mesmo número é usado repetidamente ao
longo de um programa, então o melhor é atribui-lo no início a uma variável, e usá-lo
de cada vez que for necessário. Se o número 500 aparece repetidas vezes num programa,
então poder-se-á atribuí-lo inicialmente a uma variável - digamos LET N=500. Feito
isto, quando surgirem situações do tipo LET X = X + 500, passaremos a escrever LET X = X
+ N, poupando 5 bytes de cada vez.
Além da substituição dos valores numéricos,
outras técnicas há eventualmente aplicáveis (ou aplicadas). Um processo de poupar
memória é reduzir os gastos com instruções condicionais.
Por exemplo
IF A = X THEN LET P = P + 1
pode assumir a forma
LET P = P + (A = X)
poupando 6 bytes. Muitas das instruções utilizadas pelos MENUS
utilizam a função INKEY$ como no seguinte caso:
10 IF INKEY$ = "8" THEN LET X = X + 1
20 IF INKEY$ = "5" THEN LET X = X - 1
Elas podem ser usadas para mover algo no écran
para a direita e para a esquerda. Ora isto pode ser substituído por
10 LET X = X + (INKEY$ = "8") - (INKEY$ = "5")
poupando 20 bytes de cada vez. Se a variável tiver de aumentar
ou diminuir mais do que um, então os parêntesis deverão ser multiplicados pelo número
pretendido, como por exemplo:
10 IF INKEY$ = "6" THEN LET Y = Y + 2
20 IF INKEY$ = "7" THEN LET Y = Y - 2
pode ser substituído por
LET Y = Y + VAL "2" * ((INKEY$ = "6") - (INKEY$ =
"7"))
poupando 13 bytes.
De igual modo, muitas das instruções PRINT
podem ser modificadas para economizar memória. Por exemplo, ao escrever as instruções
para operar um programa, certas palavras podem ser substituídas por uma instrução de 1 byte.
Será o caso de PRINT "ENTRADA DO SEU NOME", que pode transformar-se no
equivalente PRINT "INPUT DO SEU NOME" em que INPUT é metido como uma
instrução. Isto poupa 6 bytes uma vez que os espaços antes e depois de INPUT
não custam nada.
Muitas outras palavras-instruções, tal como
IF, OR, TO, AND, THEN, e outras, podem ser usadas com este fim; e são-no. Contudo, para
permitir que algumas delas entrem, pode ser necessário meter primeiro THEN, e apagá-lo
posteriormente. Quando se vai escrever um texto de linhas que se completam, tal como
10 PRINT "
"
20 PRINT "
"
30 PRINT "
"
este pode ser substituído por
10 PRINT
"
",,"
",,"
"
o que, neste caso, poupa 6 bytes.
É de lembrar ainda que GOTO e GOSUB não
necessitam de ser atribuídos a valores numéricos como GOTO 100, mas que podem usar
funções. Por exemplo, a rotina
10 IF X * 1 THEN GOTO 100
20 IF X * 1 THEN GOTO 200
30 IF X * 1 THEN GOTO 300
pode ser simplesmente substituída por
10 GOTO 100 * X
poupando a enormidade de 40 bytes.
Recorrendo a técnicas como as apontadas,
encurtar-se-ão os programas com econimia de memória, e tornar-se-á a programação mais
eficaz; por outro lado, as mesmas podem facilitar a análise de determinados passos de
programas que a elas recorrem.
