Опрос
Опрос закрыт Тема Опроса: Используете ли вы эффект смещения строк при вставке
bars   pie
*** Этот Опрос был завершен ***


Да, изменять нельзя (прокомментируйте)    
  1 (16.7%)
Нет    
  2 (33.3%)
О чем речь?    
  0 (0.0%)
Мне все равно    
  3 (50.0%)
Нет, но изменять нельзя (прокомментируйте)    
  0 (0.0%)




Всего голосов: 6
« Последняя модификация: kms : 04. Июля 2006 :: 08:33 »
Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) Обход Структуры (число прочтений - 21551 )
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Обход Структуры
04. Июля 2006 :: 05:00
Печать  
В хранилище добавил падающий тест структуры. Он проверяет работу приведенного ниже кода.
Код
Выбрать все
Процедура ОчиститьСтруктуру(Структура)
Перем ИмяСвойства;
	Для ъ=1 По Структура.Количество() Цикл
		Структура.Получить(ъ, ИмяСвойства);
		//Сообщить(ИмяСвойства);
		Структура.Вставить(ИмяСвойства, 0);
	КонецЦикла;
КонецПроцедуры 



Как вы считаете, этот код корректный?
Или я совсем разучился писать правильный код для 1С++? Печаль
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Обход Структуры
Ответ #1 - 04. Июля 2006 :: 07:13
Печать  
Структура.Получить() работает некорректно.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Обход Структуры
Ответ #2 - 04. Июля 2006 :: 07:16
Печать  
А по-моему, Структура.Вставить() работает некорректно - меняет порядок свойств.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Обход Структуры
Ответ #3 - 04. Июля 2006 :: 07:25
Печать  
Согласен.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Обход Структуры
Ответ #4 - 04. Июля 2006 :: 07:48
Печать  
sedmin писал(а) 04. Июля 2006 :: 07:16:
меняет порядок свойств.
а разве структура, как таковая, обязана гарантировать какой-то порядок следования свойств?
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Обход Структуры
Ответ #5 - 04. Июля 2006 :: 07:51
Печать  
а точнее, если бы порядок гарантировался, то об этом былобы сказано в документции.
а раз в доке этого нет, тогда...
  

1&&2&&3
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обход Структуры
Ответ #6 - 04. Июля 2006 :: 07:56
Печать  
ИМХО код некорректный.
Здесь та же аналогия, что при удалении из таблицы значений в цикле от начала к концу таблицу номера строк становятся неверными.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Обход Структуры
Ответ #7 - 04. Июля 2006 :: 07:59
Печать  
trad
Я бы все же не допускал таких неявных подводных камней.
А то мы скоро будем сами писать книжку "1С++ Gotchas".

Цитата:
       if (m_mapProperty.Lookup(strKey, (void*&)pInNode))
       {
         int nUpperBound = m_Array.GetSize();
         --m_nCurIndex;
         int nIndex = pInNode->nIndex;
         for (int ind = pInNode->nIndex; ind < nUpperBound; ++ind)         
           --m_Array[ind]->nIndex;            
           
         m_Array.RemoveAt(nIndex);                   
         delete pInNode;
         m_mapProperty.RemoveKey(strKey);
       }
       pInnerNode->nIndex = m_nCurIndex;
       ++m_nCurIndex;
       pInnerNode->strName = strKey;
       m_mapProperty[strKey] = pInnerNode;
       m_Array.Add(pInnerNode);
     }

Просто Deb'у было проще сначала удалить соответствие, а потом добавить.
Или я смысл не полностью осознал?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Обход Структуры
Ответ #8 - 04. Июля 2006 :: 08:01
Печать  
artbear писал(а) 04. Июля 2006 :: 07:56:
ИМХО код некорректный.
Здесь та же аналогия, что при удалении из таблицы значений в цикле от начала к концу таблицу номера строк становятся неверными.

Не согласен, код корректный.
Здесь нет удаления, здесь есть (дока):
Цитата:
<стрКлюч> - (Строка)  Строка название свойства структуры, если такое свойство уже существует, то его значение изменяется, если не существует создается новое

"значение изменяется" - и никаких side - эффектов не предусмотрено.

В данном контексте - это использование равносильно методу "УстановитьЗначение" списка.
Там ведь строчки не скачут?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Обход Структуры
Ответ #9 - 04. Июля 2006 :: 08:10
Печать  
т.е. вы предлагаете одно недокументированное поведение заменить на другое недокументированное поведение в угоду пользователя "А", а как же быть с пользователем "Б" который расчитывал раньше на первое поведение.
  

1&&2&&3
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Обход Структуры
Ответ #10 - 04. Июля 2006 :: 08:16
Печать  
trad писал(а) 04. Июля 2006 :: 08:10:
т.е. вы предлагаете одно недокументированное поведение заменить на другое недокументированное поведение в угоду пользователя "А", а как же быть с пользователем "Б" который расчитывал раньше на первое поведение.


Давай исправим и документируем.

Мне, если честно, это все не важно, но не люблю таких неявных подколов.
Кроме того, давно собираюсь сделать рефакторинг структуры, как это сделано было с делегатом.

1. Нужно избавиться от CString
2. Нужно избавиться от двойного хранения строк в InnerNode /CIStringMap
3. Еще раз посмотреть на все остальное.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Обход Структуры
Ответ #11 - 04. Июля 2006 :: 08:21
Печать  
trad писал(а) 04. Июля 2006 :: 08:10:
т.е. вы предлагаете одно недокументированное поведение заменить на другое недокументированное поведение в угоду пользователя "А", а как же быть с пользователем "Б" который расчитывал раньше на первое поведение.

Добавил опрос, это для соблюдения протокола.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обход Структуры
Ответ #12 - 04. Июля 2006 :: 08:23
Печать  
Класс назван Структура, а не Массив/Список или еще как, именно потому, что порядок свойств не определен !
ИМХО еще можно называть Множество.
Я считаю, что это поведение нужно оставить и ничего не менять.
ЗЫ зачем нам еще один список значений.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Обход Структуры
Ответ #13 - 04. Июля 2006 :: 08:27
Печать  
голосующим "да"

Прошу, заметить, вопрос поставлен не "изменять нельзя?", а "используете ли вы?".
Кто ответил "да"? - ты где конкретно используешь?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Обход Структуры
Ответ #14 - 04. Июля 2006 :: 08:28
Печать  
artbear писал(а) 04. Июля 2006 :: 08:23:
Класс назван Структура, а не Массив/Список или еще как, именно потому, что порядок свойств не определен !
ИМХО еще можно называть Множество.
Я считаю, что это поведение нужно оставить и ничего не менять.
ЗЫ зачем нам еще один список значений.


документация
Цитата:
Данный класс предназначен, для имитирования структуры данных других языков. Структура является динамическим объектом, что означает возможность программного управления количеством и названиями свойств структуры.

В c++ порядок свойств не определен?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать