Новая версия платформы MetaTrader 5 build 2690: Улучшения в MetaEditor - страница 8

 
Roman:

Уважаемые разработчики.
Почему для массива фиксированного размера происходит копирование элементов "хвоста" ?
Пример из документации. https://www.mql5.com/ru/docs/array/arrayremove

Разве это правильная логика? 
Ведь создаются дубли элементов!


Предлагаю исправить поведение ArrayRemove(), и "хвост" заполнять:
или значением NULL
или значением ноль для численного типа массива
или значением "" для строкового типа массива
или значением '\0' для символьного типа массива

Вам виднее, чем лучше заполнить "хвост" для универсальности функции, но заполнение дублями, не верная логика.

Чем 0 отличается от 9? Чем 0.0 отличается от 0.12345? Чем "" отличается от "выпейте ещё чаю и съешьте этих французских булок"? Семантически ничем.

Данное поведение описано явно. Поведение точно соответствует описанию.

 
Slava:

Чем 0 отличается от 9? Чем 0.0 отличается от 0.12345? Чем "" отличается от "выпейте ещё чаю и съешьте этих французских булок"? Семантически ничем.

Данное поведение описано явно. Поведение точно соответствует описанию.

Оно то соответствует описанию, но поведение заполнения "хвостов" ожидалось другое!
Зачем дубликатами хвост заполнять?  При проходе по циклу получаем значения дублей.
Вы понимаете что массив содержит не нужные дубли?
А если это будет масив объектов или массив структур, то будет содержать не нужные объекты или структуры.

Вы серьёзно не находите разницу? 
РАЗНИЦА В СОДЕРЖИМОМ ЭЛЕМЕНТОВ
Какая семантика? Когда тут должна быть конкретика.

По вашему 0 == 9    ???


 
Alexey Viktorov:

А самостоятельно заNULLить что мешает? Ведь всего одна строка кода.

Не чего не мешает, если есть штатная функция, её поведение должно быть корректным.
С таким подходом, не чего не мешает самомому тогда написать логику функции, но с правильным заполнением "хвоста"
А какой тогда смысл в mql функциях?

 
Roman:

Оно то соответствует описанию, но поведение заполнения "хвостов" ожидалось другое!
Зачем дубликатами хвост заполнять?  При проходе по циклу получаем значения дублей.
Вы понимаете что массив содержит не нужные дубли?
А если это будет масив объектов или массив структур, то будет содержать не нужные объекты или структуры.

Вы серьёзно не находите разницу? 
РАЗНИЦА В СОДЕРЖИМОМ ЭЛЕМЕНТОВ
Какая семантика? Когда тут должна быть конкретика.

По вашему 0 == 9    ???


Чётко соответствует описанию!

О каких дубликатах идёт речь? Хвост не заполняется дубликатами. Значения там просто остаются теми же.

ArrayRemove неприменим к фиксированному массиву объектов.

0 - такое же равноправное значение, что и 9.

Если в в конце фиксированного массива было значение 0, то на какое значение его нужно менять после выполнения ArrayRemove?

 
Slava:

Чётко соответствует описанию!

О каких дубликатах идёт речь? Хвост не заполняется дубликатами. Значения там просто остаются теми же.

ArrayRemove неприменим к фиксированному массиву объектов.

0 - такое же равноправное значение, что и 9.

Если в в конце фиксированного массива было значение 0, то на какое значение его нужно менять после выполнения ArrayRemove?

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

Оно может и равноправное по вашему, но оно с ДРУГИМ значением(содержимым)!
В массивах мы работаем не с равноправием а с элементами и значениями!
И если мы удаляем значение элемента массива, то ожидается его явное обнуление.
А то потом оказывается, что где то там в хвосте, есть дубли этих значений.



 
Roman:

Не чего не мешает, если есть штатная функция, её поведение должно быть корректным.
С таким подходом, не чего не мешает самомому тогда написать логику функции, но с правильным заполнением "хвоста"
А какой тогда смысл в mql функциях?

А вообще зачем применять ArrayRemove() к статическому массиву? Удалить строку там, где её удалять нельзя. Глупость какая-то. ИМХО.

 
Roman:

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

Оно может и равноправное по вашему, но оно с ДРУГИМ значением(содержимым)!
В массивах мы работаем не с равноправием а с элементами и значениями!
И если мы удаляем значение элемента массива, то ожидается его явное обнуление.
А то потом оказывается, что где то там в хвосте, есть дубли этих значений.



А вот мне вдруг единицами надо будет заполнять. А вы тут со своими нулями.
 
Aliaksandr Hryshyn:
А вот мне вдруг единицами надо будет заполнять. А вы тут со своими нулями.

Если функция предполагает УДАЛЕНИЕ значения элемента, значение должно обнулится!
Хвост скопироваться, заполнив разрыв ячеек если он имеется, но при этом получившийся пустой хвост, ожидается видеть обнулённым.
Иначе, при проходе в цикле по массиву, мы получаем дубли значений, предыдущего хвоста.
Каким значением вам нужно заполнить хвост, это уже вторичная логика пользователя.
Первичное будет, обнуление. Согласно смыслу функции.

 
Igor_Gagarin:

В открывашке бывает бид выше аска стоит. Надо все эти аномалии проверять.

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

Нервирует игнорирования проблемы со стороны разработчиков.

 
Roman:

Если функция предполагает УДАЛЕНИЕ значения элемента, значение должно обнулится!
Каким значением вам нужно заполнить хвост, это уже вторичная логика пользователя.
Первичное будет, обнуление. Согласно смыслу функции.

Если функция предполагает удаление элемента, то элемент удаляется. Просто удаляется безо всякого обнуления.

Роман, идите уже учиться.