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

Литература по BASIC
Post Reply
User avatar
Dahl
Posts: 53
Joined: Thu Jan 01, 2015 10:42 am

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

Post by Dahl »

Опытным путём обнаружено, что объявленные массивы инициализируются нулями (строковые — пустыми строками), а переменные при первом к ним обращении также имеют нулевое/пустое значение. Можно ли исходить из того, что такая инициализация гарантирована языком?

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

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

Code: Select all

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

Code: Select all

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

User avatar
Mr. Kibernetik
Site Admin
Posts: 4782
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

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

Post by Mr. Kibernetik »

Да, нулевые значения переменных при их инициализации гарантированы языком.
Об этом идет речь в Уроке №6.

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

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

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

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

User avatar
Dahl
Posts: 53
Joined: Thu Jan 01, 2015 10:42 am

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

Post by Dahl »

Надо полюбопытствовать эти уроки, хотя я давно привык руководствоваться официальной документацией на язык…

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

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

Code: Select all

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

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

User avatar
Dutchman
Posts: 848
Joined: Mon May 06, 2013 9:21 am
My devices: iMac, iPad Air, iPhone
Location: Netherlands
Flag: Netherlands

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

Post by Dutchman »

I will add that to the PDF-manual.

User avatar
Mr. Kibernetik
Site Admin
Posts: 4782
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

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

Post by Mr. Kibernetik »

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

User avatar
Dahl
Posts: 53
Joined: Thu Jan 01, 2015 10:42 am

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

Post by Dahl »

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

User avatar
Dutchman
Posts: 848
Joined: Mon May 06, 2013 9:21 am
My devices: iMac, iPad Air, iPhone
Location: Netherlands
Flag: Netherlands

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

Post 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.

User avatar
Dahl
Posts: 53
Joined: Thu Jan 01, 2015 10:42 am

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

Post 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!

Post Reply