Типы переменных в ThinkScript

Разобравшись с переменными как они объявляются теперь разберемся с тем, какие переменные вообще могут быть. Когда мы объявляем переменную мы не обращаем внимание на то, какого типа она будет, так как в thinkScript не требуется указывать тип объявляемой переменной, это происходит автоматически.

Что вообще означает тип переменной. Для того чтобы с этим разобраться проведем параллель с ситуацией в жизни. Если Вам необходимо хранить скоропортящиеся продукты, то скорее всего для этих целей вы приобретете холодильник. Если же вам некуда вставить обувь, то вы купите обувную полку. Я не думаю что будете хранить обувь в холодильнике. Теоретически конечно так поступить можно, но я думаю будет лучше если для каждой вещи будет свое место. В программировании всё как раз так и устроено. Если мы объявляем переменную, то мы должны представлять что именно мы будем хранить в этой переменной.

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

А теперь давайте напишем так 128456. Вы можете сказать что здесь написано текст или число? Вообще это конечно число, но почему это число не может быть просто текстом? Так как в thinkScript автоматически определяет тип значений передаваемых в переменную, то если мы ему напишем 128456 то он воспримет это как число. Есть один момент, если мы все-таки хотим передать значение как текст, то его необходимо заключать в двойные кавычки. Написав число в кавычках «128456» мы говорим нашему и индикатору, что мы передаем в переменную именно текст, а не число. Всё что мы хотим передать в виде текста заключаемых в кавычки.

При объявлении переменных имена переменных мы пишем в виде текста, но без кавычек, так как при объявлении переменных кавычки указывать нет необходимости. Фраза нет необходимости не говорит о том что их указывать нельзя. Вспомним что при объявлении переменной имя переменной не должно содержать пробелов, а также не должно начинаться с числа. Но если нам всё-таки очень сильно хочется создать переменную которая будет содержать пробел, то мы можем имя переменной заключить в кавычки.

plot "Name Data Close" = close;

В этом примере имя переменной состоит из 3 слов и эти слова разделены пробелами. Обращаться к такой переменной нам также необходимо с указанием кавычек.

plot "Name Data Close" = close;
plot out = "Name Data Close" - open;

Такая конструкция допустима при программировании на языке thinkScript. Но сразу скажу что такая конструкция редко используется в каких-то других языках программирования, и я по крайней мере таких не встречал. Так как я программирую на многих языках то данную конструкцию я не применяю.

Идём дальше, ранее я уже говорил о том что переменные объявленные с помощью таких слов как def и plot могут принимать лишь только числовые значения и пытаться в них поместить какие-то другие значения приведет к ошибке.

Разобравшись немного с тем что такое типы переменных разберемся с тем, какие они эти типы бывают. В thinkScript используются лишь только часть от всех существующих в мире типов переменных, при изучении других языков программирования обращайте внимание на то что там могут присутствовать дополнительные типы.

Может возникнуть собственно вопрос. Если в thinkScript тип переменной определяется автоматический, то зачем тогда нам вообще вникать в то, какие типы существуют. Огромный необходимости в этом нет, но если мы будем знать с какими типами можно работать, нам будет проще сформировать алгоритм работы нашего индикатора. Ну и конечно нам это необходимо для работы с функциями. Если вы откроете любую функцию которая присутствует абсолютно в любом языке программирования, то синтаксис этой функции будет описан примерно следующим образом. Мы возьмем для примера функцию которая отображает сообщения в левом верхнем углу графика — addLabel. Её синтаксис следующий.

AddLabel (boolean visible, Any text, CustomColor color);

В скобках указаны параметры, которые принимает функция, но перед каждым параметрам присутствует тип принимаемого параметра. Слева направо здесь используются следующие типы boolean, Any, CustomColor. Если функция принимает цвет, то не надо пытаться передать в функцию в этот параметр текст, она его не поймет.

Теперь мы разобрались что такое типы и зачем они нужны поэтому приступаем к изучению типов.

Первый тип который мы рассмотрим называется Any. Это такой Тип который можно назвать что это абсолютно любой тип. Здесь нет упоминания о каком-то конкретном типе, если в функции написано Any, значит в этот параметр можно передавать абсолютно всё что угодно текст, числа, логические значения и так далее. Единственным исключением является тип CustomColor, только его нельзя передавать, а остальное всё можно. В примере выше как раз можно наблюдать данный тип во втором параметре функции AddLabel. Тут указано Any text, но это вовсе не означает что сюда можно передавать лишь только текст, слово Any нам говорит как раз то, что сюда мы можем передавать абсолютно все что захотим кроме цвета. Итак, разобрались Any означает любой.

Следующий тип на очереди CustomColor. Это как раз таки есть цвет. Если в функции написано что параметр принимает CustomColor, значит передаём в функцию в этом параметре цвет. Каким образом вы получите этот цвет не играет никакой роли. Можете выбрать его из выпадающего списка который отображает редактор thinkScript при написание индикатора, можете получить цвет по индексу с помощью функции GetColor, можете создать собственный цвет используя функцию CreateColor, да как угодно, главное чтобы это был цвет.

Двигаемся дальше, тип IDataHolder. Наверное самый интересный тип, так как является наверное самым непонятным из всех. Но тут всё просто, если перевести на русский фразу «Data Holder«, то это может звучать как «Держатель данных«. Это означает что мы передаем в функцию не какое-то конкретное одно число, а передаем много чисел, можете называть это как угодно набор данных, массив чисел, таблицу или как вам больше нравится. Главное понять что в функцию попадает не одно число а целый ряд. Ну представьте функцию усреднения average, первым параметром она как раз таки и принимает IDataHolder, мы передаем ей все цены с графика, а не какое-то одно число, а вот во втором параметре мы задаем количество цен для расчёта среднего значения. Надеюсь что теперь стало понятно.

Оставшиеся типы такие как boolean, double, int, String Я уже подробно объяснял в главе Типы пользовательских переменных.

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

Функция принимает

Тип передаваемых данных Правила преобразования
boolean double, IDataHolder, int Числа 0 и 0.0 а так же значение Double.NaN будет преобразовано в No. Все другие числа, в том числе и отрицательные, будут преобразованы в Yes
CustomColor Только цвет, другие типы передавать нельзя Преобразования не происходит.
double boolean, IDataHolder, int Yes преобразуется в 1.0, а No преобразуется в 0.0
IDataHolder boolean, double, int Число преобразуется в массив, элементы которого будут равны этому числу. То есть если вы передали 10, то можете представить, что вы передали целый ряд десяток. Yes и No сначала преобразуются в число 1 или 0, а потом из нулей или единиц будет составлен массив.
int boolean, double, IDataHolder

Yes и No преобразуются в числа 1 и 0 соответственно. Переданные дробные числа округляются до целых.

Постоянная ссылка на это сообщение: https://k-pavel.ru/tipy-peremennyh-v-thinkscript/

avatar

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
Подписаться на