Вверх ↑
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
#1: 2009-12-01 21:41:27 ЛС | профиль | цитата
Поведение MatrixRW при чтении по индексу за пределами матрицы не соответствует поведению ArrayRW. Эти два компонента имеют сходный функционал, поэтому пользователь вправе ожидать непротиворечивости их поведения. Однако IRL всё совсем не так:

code_15866.txt

Что наблюдается: Message Box с заголовком MartixRW.
Что ожидается: отсутствие такого MessageBox.

"Или я что-то не понимаю?" (с)
карма: 1

0
файлы: 1code_15866.txt [678B] [189]
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2009-12-01 22:44:43 ЛС | профиль | цитата
еще вопрос в каком именно элементе поведение не соответствует ожидаемому.
карма: 27
0
Ответов: 5446
Рейтинг: 323
#3: 2009-12-03 15:12:57 ЛС | профиль | цитата
Dilma, я бы сказал - в MatrixRW (точнее, в Matrix). Уж если мы предоставляем класс для работы с матрицами, так почему бы не взять на себя заботу о проверках индексов?
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2009-12-03 15:54:50 ЛС | профиль | цитата
iarspider писал(а):
так почему бы не взять на себя заботу о проверках индексов?

а этого нет разве?
карма: 27
0
Ответов: 5446
Рейтинг: 323
#5: 2009-12-03 17:39:23 ЛС | профиль | цитата
Dilma, в ArrayRW - есть (в случае неверного индекса событие onRead не происходит). В MatrixRW - происходит. Вот я и прошу, чтобы в MatrixRW было как в ArrayRW.
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#6: 2009-12-03 18:06:13 ЛС | профиль | цитата
iarspider, проверка есть как в ArrayRW, так и в MatrixRW в чем можно убедиться, открыв соответсвующие исходники классов. Вопрос видимо правильно ставить следующим образом: нужно ли выдавать событие onRead в случае неверно заданного(ых) индекса(ов)?

Поясню опять таки во избежании недопонимания: в ArrayRW при выходе индекса за границы диапозона элемент не делает ничего, т.е. пользователь отследить данное событие не в состоянии. В MatrixRW в той же ситуации выдается NULL, благодаря чему можно поставить условие проверки и прореагировать на создавшееся положение. Отсюда и:
Dilma писал(а):
еще вопрос в каком именно элементе поведение не соответствует ожидаемому.

карма: 27
0
Ответов: 1926
Рейтинг: 172
#7: 2009-12-03 18:27:44 ЛС | профиль | цитата
Dilma, а как отличить onRead с пустой строкой в потоке и onRead, произошедший после неверного индекса (в матрице)? Ведь в обоих случаях будет ничего. Не лучше ли убрать выдачу onRead при неверном индексе?

Dilma писал(а):
благодаря чему можно поставить условие проверки и прореагировать на создавшееся положение


Если нужен контроль индексов, то программа должна делать это ещё до doRead: снача проверить, потом - читать значение.
карма: 9
0
Ответов: 2125
Рейтинг: 159
#8: 2009-12-03 18:28:17 ЛС | профиль | цитата
Может сделать свойство, выдавать ли onRead? А для совместимости сделать различное значение по-умолчанию
А вообще, я бы сделал два события: onRead и onIndexError
карма: 1

0
Ответов: 5446
Рейтинг: 323
#9: 2009-12-03 21:58:54 ЛС | профиль | цитата
tsdima, только не отдельную точку onIndexError, а точку onError плюс код ошибки (1 - нет массива, 2 - неверный индекс, ...)
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#10: 2009-12-03 23:30:44 ЛС | профиль | цитата
iarspider, ошибки вида "нет массива" лучше не делать нигде и никогда - вносить в код элемента обработку DesignTime Errors это стремится к творениям уровня VCL. Если это так уж необходимо такие строка обносятся соответствующим дефайном, который сможет их исключить впоследствии. К сожалению не все наши девелоперы придерживаются аналогичного мнения, поэтому обращаю на это особое внимание.
карма: 27
0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)