Бета версия онлайновой книги по программированию на MQL4 - автор Сергей Ковалев (SK.) - страница 11

 

to SK

1. Учебник выложили как бета версию, т.е с предложением критики.
2. ну я напрягся на предложение и нашел строчку "все массивы статические по определению".))) т.е. это не мои проблемы.
3. Если произвольно поступать по Этой одной критикуемой строчке учебника якобы все массивы по определению статические, то можно получить в трассировщике ошибку адреса "incorrred start position 0 for ArrayMinimum function"
(эта Одна единственная строчка не умаляет достоинств учебника, общий Вам Респект SK)
4. Так вот. Статический массив это прежде всего в смысле выделения памяти. если память заново выделяется, то заново может быть,
а может и не быть новая иницализация каждого элемента.
Что мы видим в MQL4? При каждом вызове аккуратно инициализируется каждый элемент по умолчанию ноль, явно - из определения.
Т.е. данные в подпрограммах не сохраняются без пред-описания static.
Это означает, что MQL4-подпрограммы исполняются с динамическим выделением памяти переменных.
Однозначно, что по умолчанию в подпрограммах MQL4 все переменные и все массивы без явногоразмера - динамические. Иначе их надо закреплять описанием static.
5. Например, динамическое выделение памяти это возможность писать объявлять double a[][]..[]; с пустымии размерностями,
однако нужно обязательно упомянуть, что програмер должен отвечать за адресацию.
(В приведенном ранее примере стандартная функция обращается по старой ссылке и не попадает в границы массива.)

 
Korey:

to SK


ОК.
 
Вопрос следующий.

Книга написана на русском языке. Разработчики говорят, что полным ходом идёт перевод на английский, а потом и на китайском появится. Уверен, что переводятся только объяснения; исходники никто трогать не собирается.

Очень много программистов по своей природе дают удобопонимаемые имена переменным из своего языка, например здесь на сайте я встречал massiv (masiv), Koef и даже MuH_IIIuPuHa_KaHaJIa. Так вот, листая учебник, наткнулся на следующий код:




Что скажет обитатель Чайнатауна, глядя на переменную Tip ? Нам-то понятно, что это такое, а другим?

( Найдено здесь: https://book.mql4.com/ru/trading/orderclose )
 
Parabellum:
Вопрос следующий.

Книга написана на русском языке. Разработчики говорят, что полным ходом идёт перевод на английский, а потом и на китайском появится. Уверен, что переводятся только объяснения; исходники никто трогать не собирается.

Очень много программистов по своей природе дают удобопонимаемые имена переменным из своего языка, например здесь на сайте я встречал massiv (masiv), Koef и даже MuH_IIIuPuHa_KaHaJIa. Так вот, листая учебник, наткнулся на следующий код:




Что скажет обитатель Чайнатауна, глядя на переменную Tip ? Нам-то понятно, что это такое, а другим?

( Найдено здесь: https://book.mql4.com/ru/trading/orderclose )

Спасибо за замечание!
Названия переменных в примерах, конечно, трогать не будем - в китайском языке, например, в исходниках не используются иероглифы, им в любом случае придётся разбираться с латиницей. Для того чтобы понять смысл данной переменной, "обитатель Чайнатауна" просто посмотрит комментарий. Кроме того, обитатели англоязычных стран тоже не воспримут слово Tip как "тип". Потому что "тип" по-английски будет type. А Tip - это "верхушка" или ещё "подсказка". Но им это не мешает понимать коды русскоязычных разработчиков. ))
 

Но я думаю все равно нужно носителю языка посмотреть на название переменных. Что бы не наступить на грабли. Вдруг переменная Tip - её звучание совпадает с русским словом из трёх букв, у которого посередине буква У ( .у. ) И слава богу если это будет душ :-) . А если нет ? Это книгу не украсит.

Может вот так будет проще и коректнее

int _OrdetType=OrderType();

if ( _OrdetType > 1 ) ....

 

Полагается, что читатель всё же будет немножко думать..

 

Вот тут https://book.mql4.com/ru/build/lots пропущены знаки деления

есть

Lots_New=MathFloor(Free*Percent100One_Lot/Step)*Step;// Расч

Нужно

Lots_New=MathFloor(Free*Percent/100/One_Lot/Step)*Step;// Расч


Немного не удобно, вроде вижу код. Хочу взять кусочек, но не весь. Т.е. что вижу копирую в буфер и вставляю в текст своей программы. Но вставка происходит неправильно. Весь код идет в одну строку. Код конца строки в книге и редакторе MQL скорее всего не совпадают

 

вот еще небольшая правка.

https://book.mql4.com/ru/build/trading

Есть

switch() управление передаётся на метку case 10 (блок 2-3).


Нужно

…. (блок 2).

 
Prival:

Вот тут https://book.mql4.com/ru/build/lots пропущены знаки деления

есть

Lots_New=MathFloor(Free*Percent100One_Lot/Step)*Step;// Расч

Нужно

Lots_New=MathFloor(Free*Percent/100/One_Lot/Step)*Step;// Расч


Немного не удобно, вроде вижу код. Хочу взять кусочек, но не весь. Т.е. что вижу копирую в буфер и вставляю в текст своей программы. Но вставка происходит неправильно. Весь код идет в одну строку. Код конца строки в книге и редакторе MQL скорее всего не совпадают


Да, это те же проблемы форматирования. Завтра поправим.

Спасибо за найденную ошибку.

Под все законченные коды есть подлинкованные файлы. Считается, что в файлах код правильный. Кстати, его можно использовать и как образец для поиска опечаток и неточностей.

 
Prival:

вот еще небольшая правка.

https://book.mql4.com/ru/build/trading

Есть

switch() управление передаётся на метку case 10 (блок 2-3).


Нужно

…. (блок 2).



А здесь исправлять не нужно. Для всех блоков обозначается место его начала и место окончания. В данном случае 2 - начало, 3 - окончание.

Всё равно спасибо:)

Причина обращения: