SmileBASIC merece más atención. Solo he visto 3 usuarios aquí (¡incluido yo mismo!) Que proporcionan respuestas SB, y aunque eso no me sorprende, me decepciona. Ser un idioma pagado y ser un dialecto BÁSICO ciertamente apaga a las personas, pero para quienes lo poseen es bastante flexible y, sorprendentemente, golfable. Supuse que abriría este hilo de consejos y vería qué pasa.
Espero que 12Me21 visite con frecuencia :)
El uso de
?
,.
,@
, y las cuerdas sin cerrarMuchos dialectos de soporte BÁSICO
?
para la impresión, y SB no es una excepción. Tener una función de salida de texto extremadamente corta es una gran ventaja.En SmileBASIC,
.
se evalúa como0.0
, por lo que se puede usar en lugar de 0 para ahorrar espacio. Por ejemplo:SPSET 0,21
puede serSPSET.,21
, guardar 1 byte. (SPSET0,21
no es válido porqueSPSET0
podría ser una función definida por el usuario)EXEC.
es una forma extremadamente corta de hacer un bucle de programa para siempre (pero restablece todas sus variables, por lo que no siempre se puede usar)Las etiquetas (utilizadas para
GOTO
,GOSUB
y lecturaDATA
) se representan como@LABEL
en SmileBASIC. Cuando se usan en una expresión, en realidad se tratan como cadenas. Por ejemplo,BGMPLAY"@305C"
se puede escribir comoBGMPLAY@305C
Las cadenas se cierran automáticamente al final de una línea (o al final del programa).
?"Hello, World!"
se puede escribir como?"Hello, World!
. Esto también se puede utilizar para hacer que los programas sean más legibles dividiéndolos en varias líneas sin cambiar la longitud:?"Meow"BEEP 69
puede serfuente
@A<POP(H$)
es más corto que"@"<POP(H$)
(A
no importa, solo verifica el primer carácter, ya que nunca será el mismo)Utilice la indexación de cadenas en lugar de
MID$
La
MID$
función es una función común en muchos BÁSICOS para obtener una subcadena de algún lugar en el medio de una cadena. Sin embargo, si solo necesita obtener el carácter en algún índice, el uso de la indexación de cadenas es mucho más corto. Por ejemplo:Ambas cadenas de impresión C. admiten la indexación tipo matriz en función de los caracteres, por lo que si solo necesita verificar un carácter a la vez, esta es la mejor manera de hacerlo.
fuente
A$=@AA:A$[2]="BD":A$[0]="":A$[2]="C"
Cuando usar
:
(o no)El
:
personaje se usa como un rompe-declaraciones en SB. Básicamente, lo usa para apilar declaraciones en una línea de la siguiente manera:De lo contrario, su estado promedio se rompe con una nueva línea:
En realidad, a menudo no es necesario usar el colon en absoluto. Siempre que las declaraciones se puedan dividir en tokens sintácticamente válidos, el analizador tiende a determinar cuándo termina uno y comienza el otro. Lo mismo ocurre a menudo con los espacios en blanco.
Por supuesto, esto no siempre funciona. Siempre hay casos ambiguos y sintaxis inválidas donde tienes que romper explícitamente las declaraciones. Tomar como ejemplo:
El punto y coma significa que
PRINT
se espera que se imprima otra expresión, a menos que la instrucción se rompa allí (usamos puntos y comas colgantes para suprimir la nueva línea). Aquí se supone queEND
se supone que es un valor, a pesar de ser una palabra clave, e intenta imprimirlo, resultando en un error Por lo tanto, tenemos que romper explícitamente esta declaración, ya sea los dos puntos o la nueva línea.En general, si algo parece ambiguo, pruébalo para ver si funciona. Si no es así, rompa la declaración. Además, cualquier cosa que produzca una sintaxis no válida no se resalta correctamente como se menciona en 12Me21.
fuente
Use el resaltador de sintaxis!
El editor de código de SmileBASIC tiene un resaltador de sintaxis incorporado, que puede usarse para determinar si el código funcionará o no. Por ejemplo, si intenta hacerlo
BEEP0
, no lo resaltará, porque debe haber un espacio entre una función y un dígito. Sin embargoBEEP.
funciona, porque. No es un dígito.Normalmente, el código like
X=7BEEP
es válido, ya que las funciones no pueden comenzar con un número, por lo que SB asume eso7
yBEEP
están separadas. Sin embargo.X=7END
NO está permitido (y no está resaltado), porque intenta interpretarlo7E...
como un número, pero dado que no hay ningún dígito después de la E, falla y causa un error. Normalmente, esto sería bastante difícil de entender, pero con un resaltador de sintaxis muy confiable, es mucho más fácil decir qué puede y qué no puede hacer.Mi resaltador de sintaxis SmileBASIC está diseñado para (con suerte) coincidir perfectamente con el comportamiento de SB, por lo que puede usarlo para verificar si el código es válido.
fuente
Evitar el operador MOD
El operador del módulo es realmente largo y debe evitarse si es posible.
Si obtiene caracteres de una cadena, puede repetir la cadena en su lugar:
A veces puedes guardar 1 personaje con
AND
:fuente
Omitir
OUT
valores de retornoUna
OUT
función de formulario es una con múltiples retornos; Usted especifica las variables para aceptar los valores de retorno después de laOUT
palabra clave. Un ejemplo usandoDTREAD
:Pero, ¿qué sucede si solo desea uno de los valores, como el mes actual? ¡Puede "ignorar" el resto de los valores simplemente no escribiendo ningún nombre de variable para aceptarlos! Sin embargo, debe salir en las comas (aparte de la devolución opcional ocasional).
Que se puede seguir jugando al golf
fuente
Utilizar
LAST()
Ahora que SmileBASIC 4 está disponible en Japón, podemos ver algunos de los posibles ahorros de golf. Uno que me llama la atención de inmediato es la nueva
LAST()
función, que devuelve el último índice de una matriz o cadena. Puedes guardar un byte.fuente