SmileBASIC заслуживает большего внимания. Я видел только 3 пользователей (включая меня!), Которые давали ответы SB, и хотя это меня не удивляет, меня это разочаровывает. Это время платного Ланга, а также будет BASIC диалектом , конечно , превращает человек прочь, но для тех , кто владеет его на самом деле это довольно гибкие и, что удивительно, golfable. Я решил, что открою эту ветку с советами и посмотрим, что получится.
Я ожидаю, что 12Me21 будет часто посещать :)
Используя
?
,.
,@
и незакрытые строкиМногие диалекты BASIC поддерживают
?
печать, и SB не является исключением. Наличие чрезвычайно короткой функции вывода текста является большим преимуществом.В SmileBASIC
.
оценивается0.0
, поэтому его можно использовать вместо 0 для экономии места. Например:SPSET 0,21
может бытьSPSET.,21
, сохраняя 1 байт. (SPSET0,21
недопустимо, потому что этоSPSET0
может быть пользовательская функция)EXEC.
- это чрезвычайно короткий способ сделать цикл программы навсегда (но он сбрасывает все ваши переменные, поэтому он не всегда может использоваться)Этикетки (используются для
GOTO
,GOSUB
и чтениеDATA
) представлены как@LABEL
в SmileBASIC. При использовании в выражении они фактически рассматриваются как строки. Например,BGMPLAY"@305C"
можно записать какBGMPLAY@305C
Строки автоматически закрываются в конце строки (или в конце программы).
?"Hello, World!"
можно записать как?"Hello, World!
. Это также можно использовать, чтобы сделать программы более читабельными, разбив их на несколько строк без изменения длины:?"Meow"BEEP 69
может бытьисточник
@A<POP(H$)
короче"@"<POP(H$)
(A
не имеет значения, он проверяет только первый символ, поскольку он никогда не будет прежним)Использовать индексирование строк вместо
MID$
MID$
Функция является общей функцией во многих основах для того чтобы подстрока из где - то в середине строки. Однако, если вам просто нужно получить символ по какому-либо индексу, использование индексации строк будет намного короче. Например:Оба эти печатают C. Строки поддерживают индексирование, подобное массиву, на символьной основе, поэтому, если вам нужно проверять только один символ за раз, это лучший способ сделать это.
источник
A$=@AA:A$[2]="BD":A$[0]="":A$[2]="C"
Когда использовать
:
(или нет)Символ
:
используется в качестве нарушителя утверждений в SB. По сути, вы используете его, чтобы сложить операторы в одну строку следующим образом:В противном случае ваше среднее утверждение будет прервано переводом строки:
На самом деле, вам часто не нужно использовать двоеточие вообще. До тех пор, пока операторы могут быть разбиты на синтаксически допустимые токены, синтаксический анализатор имеет тенденцию выяснять, когда один заканчивается, а другой начинается. То же самое часто происходит с пробелами.
Конечно, это не всегда работает. Всегда есть неоднозначные случаи и недопустимые синтаксисы, где вы должны явно нарушать операторы. Взять, к примеру:
Точка с запятой означает, что
PRINT
ожидает вывода другого выражения, если только оператор не прервется там (мы используем висячие точки с запятой для подавления новой строки.) Здесь предполагается, чтоEND
это должно быть значение, несмотря на то, что он является ключевым словом, и пытается его напечатать, в результате чего в ошибке. Таким образом, мы должны явно нарушить это утверждение, будь то двоеточие или символ новой строки.В общем, если что-то кажется неоднозначным, попробуйте, чтобы увидеть, работает ли оно. Если это не так, нарушите утверждение. Кроме того, все, что выдает неправильный синтаксис, не подсвечивается правильно, как упоминалось в 12Me21.
источник
Используйте подсветку синтаксиса!
Редактор кода SmileBASIC имеет встроенную подсветку синтаксиса, которую можно использовать для определения, будет ли работать код. Например, если вы попытаетесь это сделать
BEEP0
, он не будет выделен, потому что между функцией и цифрой должен быть пробел. ОднакоBEEP.
работает, потому что. это не цифра.Обычно подобный код
X=7BEEP
действителен, поскольку функции не может начинаться с цифры, поэтому SB предполагает , что7
иBEEP
отдельно. Однако.X=7END
НЕ допускается (и не выделяется), потому что он пытается интерпретировать7E...
как число, но так как после E нет цифры, происходит сбой, вызывая ошибку. Обычно это было бы довольно сложно понять, но с очень надежной подсветкой синтаксиса гораздо проще сказать, что вы можете и не можете делать.Моя подсветка синтаксиса SmileBASIC разработана (чтобы, мы надеемся) идеально соответствовала поведению SB, поэтому вы можете использовать его для проверки правильности кода.
источник
Избегайте оператора MOD
Оператор модуля действительно длинный, и его следует избегать, если это возможно.
Если вы получаете символы из строки, вы можете просто повторить строку:
Иногда вы можете сохранить 1 символ с помощью
AND
:источник
Пропуск
OUT
возвращаемых значенийOUT
Функция формы один с несколькими возвращается; Вы указываете переменные для принятия возвращаемых значений послеOUT
ключевого слова. Пример использованияDTREAD
:Но что, если вам нужно только одно из значений, например, текущий месяц? Вы можете «игнорировать» остальные значения, просто не записывая имя переменной, чтобы принять их! Вы, однако, должны оставить запятые (кроме случайного необязательного возврата.)
Который может быть дальше в гольф
источник
использование
LAST()
Теперь, когда SmileBASIC 4 в Японии, мы можем проверить некоторые потенциальные сбережения в гольф. Одна из них, которая сразу же выскакивает, - это новая
LAST()
функция, которая возвращает последний индекс массива или строки. Вы можете сохранить один байт.источник