Page 1 of 1

Нет во встроенной документации, но…

Posted: Mon Jan 05, 2015 4:29 pm
by Dahl
Опытным путём обнаружено, что объявленные массивы инициализируются нулями (строковые — пустыми строками), а переменные при первом к ним обращении также имеют нулевое/пустое значение. Можно ли исходить из того, что такая инициализация гарантирована языком?

Опытным путём обнаружено, что если в IF указать вместо условия математическое выражение, то оно отрабатывает как «истина», когда не равно нулю (включая вещественные и комплексные значения!) и как «ложь», когда равно нулю. Что разумно, учитывая отсутствие логического типа данных. Можно ли считать это официальной трактовкой сути условного оператора?

Интересно при этом, что вещи типа

Code: Select all

PRINT 1=1
не проходят. Хотя это могло бы быть полезным. Например:

Code: Select all

m = (a<b)*a + (a>b)*b
Такая штука возвращала бы меньшее из двух различных чисел или ноль, если числа равны между собой. Я прекрасно понимаю муторность обработки таких ситуаций, конечно. :) Можно для упрощения потребовать от программиста заключать «логико-арифметические» выражения в квадратные или фигурные скобки…

Re: Нет во встроенной документации, но…

Posted: Mon Jan 05, 2015 8:52 pm
by Mr. Kibernetik
Да, нулевые значения переменных при их инициализации гарантированы языком.
Об этом идет речь в Уроке №6.

Да, IF умеет работать с числом в качестве логического аргумента. Это официальная возможность логических операторов.
Об этом идет речь в Уроке №4.

Думаю, это хорошие замечания и их можно будет внести в штатную документацию.

Логическая операция (например "<") не возвращает числа и работает только в логических командах.
Что касается использования логики для вычислений, то здесь гораздо эффективнее будет иметь необходимые специальные функции типа MAX() или MIN(), которые вычисляются на низком уровне, чем работать с логическими операторами на высоком уровне для получения числовых значений. Тем более, что например комплексные числа сравнению не подлежат.

Еще нужно отметить, что фигурные скобки используются - для вставки в программу текста из других файлов.

Re: Нет во встроенной документации, но…

Posted: Tue Jan 06, 2015 8:00 am
by Dahl
Надо полюбопытствовать эти уроки, хотя я давно привык руководствоваться официальной документацией на язык…

Ещё два момента, которой во встроенной справке нет, но по идее они там должны быть.

Первое — упоминание, что скалярные аргументы передаются в функции по значению. Ну, классический пример:

Code: Select all

def foo(a)
 print a
 a-=1
 print a
end def

b=10
print b
foo(b)
print b
И второе — возможность рекурсии.

Re: Нет во встроенной документации, но…

Posted: Tue Jan 06, 2015 8:20 am
by Dutchman
I will add that to the PDF-manual.

Re: Нет во встроенной документации, но…

Posted: Tue Jan 06, 2015 9:01 am
by Mr. Kibernetik
Dahl wrote:Надо полюбопытствовать эти уроки, хотя я давно привык руководствоваться официальной документацией на язык…
Все дело в том, что встроенная документация изначально создавалась не как полное описание языка BASIC, а как перечень отличий и добавлений языка smart BASIC к минимальной версии языка BASIC. Поскольку официальная документация на минимальный BASIC - это уже целая книжка, то документация на smart BASIC пока таким "добавлением" и остается :D Поскольку sB предназначен для использования в том числе и на айфоне/айподе, то удобство пользования справкой и на таком микро-экранчике имеет значение.

Re: Нет во встроенной документации, но…

Posted: Fri Jan 09, 2015 6:46 pm
by Dahl
Ещё момент, который стоило бы упомянуть в документации: функции пользователя нельзя определять внутри других определяемых функций, а только на глобальном уровне. Что логично, ибо иначе с видимостью переменных начнётся незнамо что. (:

Re: Нет во встроенной документации, но…

Posted: Fri Jan 09, 2015 6:54 pm
by Dutchman
Dahl wrote:Ещё момент, который стоило бы упомянуть в документации: функции пользователя нельзя определять внутри других определяемых функций, а только на глобальном уровне. Что логично, ибо иначе с видимостью переменных начнётся незнамо что. (:
via Google translate: … user-defined function can not be defined within other defined functions…
I will add that to the manual. Thanks.

Re: Нет во встроенной документации, но…

Posted: Sat Jan 10, 2015 6:01 am
by Dahl
Область комментирования апострофом и оператором REM „закрывается“ разделителем операторов „!“ если он встречается прежде конца строки. Следующий за разделителем оператор исполняется.

Commented area started with apostrophe or REM statement ends at statements separator "!" if it is used in the same line. The following statement is active. See:

Code: Select all

REM PRINT 1 ! PRINT 2
Or

Code: Select all

'PRINT 1 ! PRINT 2
Some troubles are possible with comments like

Code: Select all

REM hurray! my program works now!