Поведение MatrixRW при чтении по индексу за пределами матрицы не соответствует поведению ArrayRW. Эти два компонента имеют сходный функционал, поэтому пользователь вправе ожидать непротиворечивости их поведения. Однако IRL всё совсем не так:
code_15866.txt
Что наблюдается: Message Box с заголовком MartixRW.
Что ожидается: отсутствие такого MessageBox.
"Или я что-то не понимаю?" (с)
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
|
|||
карма: 1 |
| ||
файлы: 1 | code_15866.txt [678B] [189] |
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
еще вопрос в каком именно элементе поведение не соответствует ожидаемому.
|
|||
карма: 27 |
|
Ответов: 5446
Рейтинг: 323
|
|||
Dilma, я бы сказал - в MatrixRW (точнее, в Matrix). Уж если мы предоставляем класс для работы с матрицами, так почему бы не взять на себя заботу о проверках индексов?
|
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
iarspider писал(а): так почему бы не взять на себя заботу о проверках индексов?а этого нет разве? |
|||
карма: 27 |
|
Ответов: 5446
Рейтинг: 323
|
|||
Dilma, в ArrayRW - есть (в случае неверного индекса событие onRead не происходит). В MatrixRW - происходит. Вот я и прошу, чтобы в MatrixRW было как в ArrayRW.
|
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
iarspider, проверка есть как в ArrayRW, так и в MatrixRW в чем можно убедиться, открыв соответсвующие исходники классов. Вопрос видимо правильно ставить следующим образом: нужно ли выдавать событие onRead в случае неверно заданного(ых) индекса(ов)?
Поясню опять таки во избежании недопонимания: в ArrayRW при выходе индекса за границы диапозона элемент не делает ничего, т.е. пользователь отследить данное событие не в состоянии. В MatrixRW в той же ситуации выдается NULL, благодаря чему можно поставить условие проверки и прореагировать на создавшееся положение. Отсюда и: Dilma писал(а): еще вопрос в каком именно элементе поведение не соответствует ожидаемому. |
|||
карма: 27 |
|
Ответов: 1926
Рейтинг: 172
|
|||
Dilma, а как отличить onRead с пустой строкой в потоке и onRead, произошедший после неверного индекса (в матрице)? Ведь в обоих случаях будет ничего. Не лучше ли убрать выдачу onRead при неверном индексе?
Dilma писал(а): благодаря чему можно поставить условие проверки и прореагировать на создавшееся положениеЕсли нужен контроль индексов, то программа должна делать это ещё до doRead: снача проверить, потом - читать значение. |
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Может сделать свойство, выдавать ли onRead? А для совместимости сделать различное значение по-умолчанию
А вообще, я бы сделал два события: onRead и onIndexError |
|||
карма: 1 |
|
Ответов: 5446
Рейтинг: 323
|
|||
tsdima, только не отдельную точку onIndexError, а точку onError плюс код ошибки (1 - нет массива, 2 - неверный индекс, ...)
|
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
iarspider, ошибки вида "нет массива" лучше не делать нигде и никогда - вносить в код элемента обработку DesignTime Errors это стремится к творениям уровня VCL. Если это так уж необходимо такие строка обносятся соответствующим дефайном, который сможет их исключить впоследствии. К сожалению не все наши девелоперы придерживаются аналогичного мнения, поэтому обращаю на это особое внимание.
|
|||
карма: 27 |
|
10