Фича MQL4

 
Заглянул ради интереса на 'Расчет 3-ей волны Эллиота' и заодно в исходник. От впечатления того, что увидел, сваял собственный небольшой работающий скрипт и оставил там комментарий. Пару дней подождал, но реакции никакой - ни от автора скрипта, ни от разработчиков, ни от тех, кто его скачал (ведь целых 180 человек его качнули! волновикам, видно, особенности реализации неважны; главное, чтобы работал). Ну, значит, это никому особо не интересно, так как фича уже всем давно известна, а открытием это явилось только для меня. Для других новичков, знакомящихся с MQL4, выкладываю свой скрипт, который я "усовершенствовал", чтобы сделать более эффектным:

//+------------------------------------------------------------------+
//|                                                Test_cyrillic.mq4 |
//|                                       Copyright © 2007, Mathemat |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Mathemat"
 
#define свойство_РасстояниеПоИксу   OBJPROP_XDISTANCE
#define свойство_РасстояниеПоИгреку OBJPROP_YDISTANCE
#define объект_лейбл OBJ_LABEL
#define нуль 0
#define двадцать 20
#define десять 10
#define сорок 40
#define восемьдесят 80
#define цена 1.0045
#define время 11578987 
 
int init()
{
   ObjectsDeleteAll( нуль, объект_лейбл );
   return( нуль );
}
 
int ОбслучаитьИкс() { return( MathRand() / сорок + двадцать ); }
 
 
int ОбслучаитьИгрек() { return( MathRand() / восемьдесят + двадцать ); }
 
 
string ЧислоВСтроку( double число, int точность ) { return( DoubleToStr( число, точность ) ); }
 
 
int start()
{
   MathSrand( GetTickCount() );
   for( int счетчик = нуль; счетчик < двадцать; счетчик++ )
   {
      int СлучайнаяИкс   = ОбслучаитьИкс();
      int СлучайнаяИгрек = ОбслучаитьИгрек();
      string имяЛейбла = "лейбл_" + ЧислоВСтроку( счетчик, нуль );
      string текстЛейбла = "лейбл № " + ЧислоВСтроку( счетчик, нуль ); 
      
      ObjectCreate( имяЛейбла, объект_лейбл, нуль, время, цена );
      ObjectSet( имяЛейбла, свойство_РасстояниеПоИксу,   СлучайнаяИкс );
      ObjectSet( имяЛейбла, свойство_РасстояниеПоИгреку, СлучайнаяИгрек );
      ObjectSetText( имяЛейбла, текстЛейбла, десять );   
   }
   return( нуль );
}
Хорошая фича, мне нравится! Можно бы ее и оставить...
 
И на фига попу гармонь?.. Но вообще прикольный сам факт, что mql4 позволяет такие номера.
 

Нормальная работа препроцессора:

Используя конструкцию #define, можно в начале программы определить символическое имя или символическую константу,
которая будет конкретной строкой символов. Впоследствии компилятор заменит все не заключенные в кавычки появления
этого имени на соответствующую строку. Фактически это имя может быть заменено абсолютно произвольным текстом, не обязательно цифрами:
 
#define идентификатор значение
Что касается рускоязычной транскрипции в именах переменных, действительно, прикольно, наверное можно и на китайском их обозвать. Вот только как быть с международностью MQL4 и и пониманием текста программ инакоязычными разработчиками и пользователями, если, после Вашего обращения все начнут применять данную фичу направо и налево ?
 

На самом деле это вопрос не технический, а организационный. Первый раз увидел такую, прошу прощения за выражение, "байду" у кого-то в коде 1С: если-то-иначе-всё.
После 15 лет разработки на разных языках, но всегда в англоязычных средах разработки, мне лично такой код читать немного дико, и на его восприятие уходит времени больше, чем на "нормальный", привычный, с EN именованием модулей/классов/интерфейсов/свойств/методов.

Использовать это или нет, определяется:
1. Для индивидуального разработчика - дело его вкуса.
2. Для человека, работающего в команде или на предприятии - принципами корпоративной политики данной команды, т.е. руководителем/менеджером проекта. Иначе никакого командного восприятия не будет, что создаст в этой команде разброд и шатание. А разгул демократии лучше вовремя пресекать, не доводя до критических последствий.

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

Брать эту фишку себе в пример или нет - выбирайте, к какому пункту выше Вы относитесь.

 
Я это увидел в коде скрипта olyakish'a (функция Расчет(), которая там вызывается и исполняется без проблем), и мне тут же вспомнилось времечко, когда был админом в 1С.

Лично я предпочитаю англоязычные имена - просто потому, что привык. Мне кажется, разработчикам эта фича вряд ли понравится, несмотря на внешнюю безобидность, - и они ее, скорее всего, пресекут, так как недостаточно полная проверка идентификаторов может повлечь за собой другие уже не фичи, а баги. Впрочем, лучше бы все-таки выслушать самих разработчиков.
 
Я думаю, технически локализованные символы в MQL именах запрещать не будут. Многие среды разработки такое допускают.
А делать это или нет, вопрос выбора каждого. Цитирую свою же фразу выше: "это вопрос не технический, а организационный".
 
Тогда все же придется слегка подкорректировать документацию (Basics/Syntax/Identifiers) или хотя бы указать на возможность составления идентификаторов из букв русского (или иероглифов китайского). Сейчас в документации - numbers from 0 to 9, Latin capital and small letters a to z, A to Z (recognized as different symbols), the symbol of underlining (_).
 
Mathemat:
Тогда все же придется слегка подкорректировать документацию (Basics/Syntax/Identifiers) или хотя бы указать на возможность составления идентификаторов из букв русского (или иероглифов китайского). Сейчас в документации - numbers from 0 to 9, Latin capital and small letters a to z, A to Z (recognized as different symbols), the symbol of underlining (_).

Задумался.... А как китайцы пишут на компьюере?

 
Не знаю, Integer. Знаю только, что в Китае на английском говорит больше народу, чем в Штатах... Но ведь некое подобие русскоязычной локализации у них тоже наверняка есть. Нашел на одном форуме:
Как выглядит китайская клавиатура и каков принцип ввода иероглифов?
1. Так же, как твоя.
2. Ввод: по алфавиту пиньинь (отличие от английского - не используется буква
"V") или по чертам.
Из другого:

Если Вы пользуетесь WINDOWS 2000/XP ещё на этапе установки WINDOWS можно выбрать опцию "установить поддержку восточных языков". Если поддержку не установили сразу, то это можно сделать в пункте "Языки и региональные стандарты" Панели управления, во вкладке "Языки". Там же нажмите на Подробности - Добавить - язык ввода - и выберите Китайский(КНР). (Раскладка клавиатуры) - выбрать (Китайский (упрощённый) Microsoft PinYin IME 3.0). Теперь на панели задач можно выбрать ввод по-китайски (наряду с русским и английским).
Ввод осуществляется так: пишете иероглиф транскрипцией (можно без тона): например, "я"(пишете wo), нажимаете "ENTER", появляется нужный иероглиф, если нет, тогда нажимаете на клавиатуре стрелку "влево", появляется строка иероглифов, имеющих чтение "wo", перемещаетесь по ней клавишами "вверх" или "вниз", выбираете нужный - и жмёте "ENTER".

Например, чтобы написать "我写的汉字都好看" нужно переключится на китайский и набрать "wo xie de hanzi dou haokan" (означает - "все иероглифы, которые я пишу - красивые")

Изображения этой клавы я нигде не нашел.