SmileBASIC zasługuje na większą uwagę. Widziałem tu tylko 3 użytkowników (w tym siebie!), Którzy udzielają odpowiedzi SB, i choć to mnie nie dziwi, to mnie rozczarowuje. Jest to płatny język, a także dialekt BASIC z pewnością zniechęca ludzi, ale dla tych, którzy go posiadają, jest dość elastyczny i, co zaskakujące, gra w golfa. Pomyślałem, że otworzę ten wątek z poradami i zobaczę, co się pojawi.
Oczekuję, że 12Me21 będzie często odwiedzać :)
Korzystanie
?
,.
,@
, i niezamknięte ciągiWiele dialektów obsługi języka BASIC
?
dla drukowania, a SB nie jest wyjątkiem. Ogromną zaletą jest możliwość bardzo krótkiego wysyłania tekstu.W SmileBASIC
.
jest oceniane na0.0
, więc można go użyć zamiast 0, aby zaoszczędzić miejsce. Na przykład:SPSET 0,21
może byćSPSET.,21
, zapisując 1 bajt. (SPSET0,21
jest niepoprawny, ponieważSPSET0
może to być funkcja zdefiniowana przez użytkownika)EXEC.
to bardzo krótki sposób na zrobienie pętli programu na zawsze (ale resetuje wszystkie zmienne, więc nie zawsze jest użyteczna)Etykiety (stosowane
GOTO
,GOSUB
i czytającDATA
) są przedstawione@LABEL
w SmileBASIC. Użyte w wyrażeniu są traktowane jak ciągi znaków. Na przykładBGMPLAY"@305C"
można zapisać jakoBGMPLAY@305C
Ciągi znaków są automatycznie zamykane na końcu wiersza (lub na końcu programu).
?"Hello, World!"
można zapisać jako?"Hello, World!
. Można to również wykorzystać do zwiększenia czytelności programów poprzez podzielenie ich na wiele linii bez zmiany długości:?"Meow"BEEP 69
możnaźródło
@A<POP(H$)
jest krótsza niż"@"<POP(H$)
(toA
nie ma znaczenia, sprawdza tylko pierwszy znak, ponieważ nigdy nie będzie taki sam)Użyj indeksowania ciągów zamiast
MID$
Ta
MID$
funkcja jest powszechną funkcją w wielu językach BASIC, umożliwiającą uzyskanie podciągu gdzieś pośrodku łańcucha. Jeśli jednak potrzebujesz tylko znaku w jakimś indeksie, użycie indeksowania ciągów jest znacznie krótsze. Na przykład:Oba te elementy drukują C. Ciągi znaków obsługują indeksowanie tablicowe na podstawie znaków, więc jeśli chcesz zaznaczyć tylko jeden znak na raz, jest to najlepszy sposób, aby to zrobić.
źródło
A$=@AA:A$[2]="BD":A$[0]="":A$[2]="C"
Kiedy używać
:
(lub nie):
Znak jest używany jako oświadczenie wyłącznika w SB. Zasadniczo używasz go do układania instrukcji w jednym wierszu w taki sposób:W przeciwnym razie przeciętny wyciąg jest dzielony przez nowy wiersz:
W rzeczywistości często nie trzeba wcale używać jelita grubego. Tak długo, jak instrukcje można podzielić na tokeny poprawne pod względem składniowym, parser ma tendencję do określania, kiedy jeden się kończy, a drugi zaczyna. To samo często dotyczy białych znaków.
Oczywiście to nie zawsze działa. Zawsze występują niejednoznaczne przypadki i niepoprawne składnie, w których trzeba jawnie łamać instrukcje. Weź na przykład:
Średnik oznacza, że
PRINT
oczekuje wydrukowania innego wyrażenia, chyba że instrukcja tam się zepsuje (używamy wiszących średników w celu stłumienia nowego wiersza). Tutaj zakłada, żeEND
ma być wartością, mimo że jest słowem kluczowym, i próbuje ją wydrukować, w wyniku czego w błędzie. Dlatego musimy wyraźnie złamać to stwierdzenie, czy to dwukropek, czy nowy wiersz.Ogólnie rzecz biorąc, jeśli coś wydaje się niejednoznaczne, spróbuj, czy działa. Jeśli tak się nie stanie, złam instrukcję. Ponadto wszystko, co mogłoby spowodować niepoprawną składnię, nie jest poprawnie podświetlane, jak wspomniano w 12Me21.
źródło
Użyj wyróżnienia składni!
Edytor kodu SmileBASIC ma wbudowany wyróżnik składni, którego można użyć do ustalenia, czy kod będzie działał, czy nie. Na przykład, jeśli spróbujesz to zrobić
BEEP0
, nie podświetli go, ponieważ między funkcją a cyfrą musi być odstęp. JednakBEEP.
działa, ponieważ. nie jest cyfrą.Normalnie kod podobny
X=7BEEP
jest poprawny, ponieważ funkcje nie mogą zaczynać się od cyfry, więc SB przyjmuje to7
iBEEP
są oddzielne. Jednak.X=7END
NIE jest dozwolone (i nie jest podświetlone), ponieważ próbuje interpretować7E...
jako liczbę, ale ponieważ po E nie ma cyfry, zawodzi, powodując błąd. Zwykle trudno byłoby to rozgryźć, ale dzięki bardzo niezawodnemu rozświetlaczowi składni znacznie łatwiej jest powiedzieć, co możesz, a czego nie możesz zrobić.Mój wyróżnik składni SmileBASIC został zaprojektowany (mam nadzieję) idealnie pasujący do zachowania SB, więc możesz go użyć do sprawdzenia poprawności kodu.
źródło
Unikaj operatora MOD
Operator modułu jest naprawdę długi i należy go w miarę możliwości unikać.
Jeśli otrzymujesz znaki z ciągu, możesz po prostu powtórzyć ciąg:
Czasem
AND
zamiast tego możesz zapisać 1 postać :źródło
Pominięcie
OUT
zwracanych wartościFunkcja
OUT
formularza to funkcja z wieloma zwrotami; określasz zmienne, aby akceptować zwracane wartości poOUT
słowie kluczowym. Przykład użyciaDTREAD
:Ale co, jeśli chcesz tylko jedną z wartości, jak bieżący miesiąc? Możesz „zignorować” pozostałe wartości, po prostu nie wpisując żadnej nazwy zmiennej, aby je zaakceptować! Musisz jednak zostawić przecinki (oprócz sporadycznego opcjonalnego zwrotu).
Na które można dalej grać w golfa
źródło
Posługiwać się
LAST()
Teraz, gdy SmileBASIC 4 jest już dostępny w Japonii, możemy sprawdzić niektóre z potencjalnych oszczędności w golfa. Tym, co od razu mi się podoba, jest nowa
LAST()
funkcja, która zwraca ostatni indeks tablicy lub łańcucha. Możesz zapisać jeden bajt.źródło