SmileBASIC verdient mehr Aufmerksamkeit. Ich habe hier nur 3 Benutzer gesehen (einschließlich mich selbst!), Die SB-Antworten gegeben haben, und obwohl mich das nicht überrascht, enttäuscht es mich. Es ist eine bezahlte Sprache und ein BASIC-Dialekt, der die Leute sicherlich abschreckt , aber für diejenigen, die es besitzen, ist es tatsächlich ziemlich flexibel und überraschenderweise golffähig. Ich dachte, ich würde diesen Tipp-Thread dafür öffnen und sehen, was auf mich zukommt.
Ich erwarte, dass 12Me21 häufig besucht wird :)
Mit
?
,.
,@
und nicht geschlossenen StringsViele Dialekte von BASIC unterstützen das
?
Drucken, und SB ist keine Ausnahme. Eine extrem kurze Textausgabefunktion ist ein großer Vorteil.Wird in SmileBASIC
.
ausgewertet0.0
, sodass es anstelle von 0 verwendet werden kann, um Platz zu sparen. Zum Beispiel:SPSET 0,21
kann seinSPSET.,21
, 1 Byte zu speichern. (SPSET0,21
ist ungültig, weil esSPSET0
sich um eine benutzerdefinierte Funktion handeln könnte)EXEC.
ist eine extrem kurze Möglichkeit, eine Programmschleife für immer zu erstellen (sie setzt jedoch alle Ihre Variablen zurück, sodass sie nicht immer verwendet werden kann).Beschriftungen (verwendet für
GOTO
,GOSUB
und LesenDATA
) werden wie@LABEL
in SmileBASIC dargestellt. Wenn sie in einem Ausdruck verwendet werden, werden sie tatsächlich als Zeichenfolgen behandelt. Zum BeispielBGMPLAY"@305C"
kann geschrieben werden alsBGMPLAY@305C
Zeichenfolgen werden am Ende einer Zeile (oder am Ende des Programms) automatisch geschlossen.
?"Hello, World!"
kann geschrieben werden als?"Hello, World!
. Dies kann auch verwendet werden , um Programme zu machen besser lesbar , indem sie in mehrere Zeilen Splitting , ohne die Länge zu ändern:?"Meow"BEEP 69
kann seinquelle
@A<POP(H$)
ist kürzer als"@"<POP(H$)
(dasA
spielt keine Rolle, es überprüft immer nur das erste Zeichen, da es niemals dasselbe sein wird)Verwenden Sie stattdessen die Zeichenfolgenindizierung
MID$
Die
MID$
Funktion ist in vielen BASICs eine übliche Funktion, um einen Teilstring von irgendwo in der Mitte eines Strings abzurufen. Wenn Sie das Zeichen jedoch nur an einem Index abrufen müssen, ist die Indizierung von Zeichenfolgen weitaus kürzer. Beispielsweise:Beide drucken C. Strings unterstützen die Array-ähnliche Indizierung auf Zeichenbasis. Wenn Sie also jeweils nur ein Zeichen überprüfen müssen, ist dies der beste Weg, dies zu tun.
quelle
A$=@AA:A$[2]="BD":A$[0]="":A$[2]="C"
Wann zu verwenden
:
(oder nicht)Das
:
Zeichen wird in SB als Statement-Breaker verwendet. Grundsätzlich verwenden Sie es, um Anweisungen wie folgt in einer Zeile zu stapeln:Andernfalls wird Ihre durchschnittliche Aussage durch einen Zeilenumbruch unterbrochen:
In der Realität müssen Sie den Doppelpunkt häufig überhaupt nicht verwenden. Solange Anweisungen in syntaktisch gültige Token unterteilt werden können, neigt der Parser dazu, herauszufinden, wann eine endet und die andere beginnt. Das gleiche gilt oft für Leerzeichen.
Das funktioniert natürlich nicht immer. Es gibt immer mehrdeutige Fälle und ungültige Syntaxen, in denen Sie Anweisungen explizit unterbrechen müssen. Nehmen Sie zum Beispiel:
Das Semikolon bedeutet, dass
PRINT
erwartet wird, dass ein anderer Ausdruck ausgedruckt wird, es sei denn, die Anweisung bricht dort ab (wir verwenden baumelnde Semikolons, um die neue Zeile zu unterdrücken). HierEND
wird angenommen, dass es sich trotz eines Schlüsselworts um einen Wert handelt, und es wird versucht, ihn zu drucken in einem Fehler. Daher müssen wir diese Aussage explizit brechen, sei es der Doppelpunkt oder die Newline.Wenn etwas mehrdeutig erscheint, versuchen Sie es im Allgemeinen, um festzustellen, ob es funktioniert. Wenn dies nicht der Fall ist, brechen Sie die Anweisung. Darüber hinaus wird alles, was zu einer ungültigen Syntax führen würde, nicht korrekt hervorgehoben, wie in 12Me21 erwähnt.
quelle
Verwenden Sie den Syntax-Textmarker!
Der Code-Editor von SmileBASIC verfügt über einen integrierten Syntax-Textmarker, mit dem bestimmt werden kann, ob Code funktioniert oder nicht. Wenn Sie dies beispielsweise versuchen,
BEEP0
wird es nicht hervorgehoben, da zwischen einer Funktion und einer Ziffer ein Leerzeichen stehen muss. Funktioniert aberBEEP.
, weil. ist keine Ziffer.Normalerweise ist Code wie
X=7BEEP
gültig, da Funktionen nicht mit einer Zahl beginnen können. SB geht davon aus7
undBEEP
ist getrennt. Jedoch.X=7END
ist NICHT erlaubt (und nicht hervorgehoben), da es versucht,7E...
als Zahl zu interpretieren , aber da nach dem E keine Ziffer steht, schlägt dies fehl und verursacht einen Fehler. Normalerweise ist dies ziemlich schwer herauszufinden, aber mit einem sehr zuverlässigen Syntax-Textmarker ist es viel einfacher zu sagen, was Sie können und was nicht.Mein SmileBASIC-Syntax-Textmarker ist so konzipiert, dass er (hoffentlich) perfekt zum Verhalten von SB passt, sodass Sie damit überprüfen können, ob der Code gültig ist.
quelle
Vermeiden Sie den MOD-Operator
Der Moduloperator ist sehr lang und sollte nach Möglichkeit vermieden werden.
Wenn Sie Zeichen aus einer Zeichenfolge erhalten, können Sie stattdessen einfach die Zeichenfolge wiederholen:
Manchmal können Sie
AND
stattdessen 1 Zeichen speichern mit :quelle
OUT
Rückgabewerte weglassenEine
OUT
Formularfunktion ist eine Funktion mit mehreren Rückgaben. Sie geben die Variablen an, die die Rückgabewerte nach demOUT
Schlüsselwort akzeptieren sollen . Ein Beispiel mitDTREAD
:Aber was ist, wenn Sie nur einen der Werte wie den aktuellen Monat möchten? Sie können den Rest der Werte "ignorieren", indem Sie einfach keinen Variablennamen schreiben, um sie zu akzeptieren! Sie müssen jedoch die Kommas eingeben (abgesehen von der gelegentlichen optionalen Rückgabe).
Welches kann weiter Golf gespielt werden
quelle
Verwenden
LAST()
Jetzt, da SmileBASIC 4 in Japan erhältlich ist, können wir einige der potenziellen Golfeinsparungen prüfen. Eine, die mir sofort auffällt, ist die neue
LAST()
Funktion, die den letzten Index eines Arrays oder Strings zurückgibt. Sie können ein Byte speichern.quelle