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

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

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

Post by Dahl » Mon Jan 05, 2015 4:29 pm

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

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

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

Code: Select all

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

Code: Select all

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

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

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

Post by Mr. Kibernetik » Mon Jan 05, 2015 8:52 pm

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

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

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

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

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

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

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

Post by Dahl » Tue Jan 06, 2015 8:00 am

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

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

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

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: 807
Joined: Mon May 06, 2013 9:21 am
My devices: iMac, iPad Air, iPhone
Location: Netherlands
Flag: Netherlands

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

Post by Dutchman » Tue Jan 06, 2015 8:20 am

I will add that to the PDF-manual.
We consider it a refreshing mental exercise to figure out ways to circumvent foolishness (Quote from Richard)

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

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

Post by Mr. Kibernetik » Tue Jan 06, 2015 9:01 am

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 » Fri Jan 09, 2015 6:46 pm

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

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

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

Post by Dutchman » Fri Jan 09, 2015 6:54 pm

Dahl wrote:Ещё момент, который стоило бы упомянуть в документации: функции пользователя нельзя определять внутри других определяемых функций, а только на глобальном уровне. Что логично, ибо иначе с видимостью переменных начнётся незнамо что. (:
via Google translate: … user-defined function can not be defined within other defined functions…
I will add that to the manual. Thanks.
We consider it a refreshing mental exercise to figure out ways to circumvent foolishness (Quote from Richard)

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

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

Post by Dahl » Sat Jan 10, 2015 6:01 am

Область комментирования апострофом и оператором 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