Имя: Пароль:
1C
 
Неподдельный гурутест для программиста 1С
🠗 (Волшебник 08.09.2022 09:08)
0 TormozIT
 
гуру
29.08.22
16:23
Предлагаю всем протестировать себя и, не выполняя следующий код, предсказать вычисленные значения переменных.

АдминистрированиеСервера = Новый АдминистрированиеСервера = Новый АдминистрированиеСервера;
КвалификаторыЧисла = Новый КвалификаторыЧисла = Новый КвалификаторыЧисла;
ОбработкаКартинок = Новый ОбработкаКартинок = Новый ОбработкаКартинок;
ОписаниеОповещения = Новый ОписаниеОповещения = Новый ОписаниеОповещения;
ОписаниеТипов1 = Новый ОписаниеТипов("Число, Строка") = Новый ОписаниеТипов("Число, Строка");
ОписаниеТипов2 = Новый ОписаниеТипов("Строка, Число") = Новый ОписаниеТипов("Число, Строка");
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML;
ПолеКомпоновкиДанных = Новый ПолеКомпоновкиДанных("ы") = Новый ПолеКомпоновкиДанных("ы");
СжатиеДанных = Новый СжатиеДанных = Новый СжатиеДанных;
СтандартныйПериод = Новый СтандартныйПериод = Новый СтандартныйПериод;
Структура = Новый Структура("ы") = Новый Структура("ы");
ФиксированнаяСтруктура = Новый ФиксированнаяСтруктура("ы") = Новый ФиксированнаяСтруктура("ы");

Я смог правильно предсказать НЕ все. При этом я пользовался синтакс-помощником и сайтом ИТС сначала чтобы предсказать, а потом чтобы объяснить результат. Но в ряде случаев не смог найти объяснение фактическим результатам.

Попробуй теперь ты!
1 trad
 
29.08.22
16:29
СП можно пользоваться?
2 TormozIT
 
гуру
29.08.22
16:31
(1) Я же пользовался. Так что это не стыдно =)
3 Ненавижу 1С
 
гуру
29.08.22
16:32
Не со всеми типами я работал, но все-таки предположу, что если тип имеет только read-only свойства, или не имеет изменяемых (определяется свойствами полностью в конструкторе) - то значения объектов будут равны, например "Шрифт", иначе не равны (равенство ссылок)
4 Fragster
 
гуру
29.08.22
16:33
Могу предположить, что если есть методы, то <>, если нет, то зависит от реализации
5 Fragster
 
гуру
29.08.22
16:34
по хорошему, все, что создается с Новый не должно быть равно без использования магии типа сериализации или valueOf
6 Галахад
 
гуру
29.08.22
16:34
8 из 12. Не гуру.

Кстати, почему в "консоли кода" ПараметрыЗаписиXML маскируется?
7 Fragster
 
гуру
29.08.22
16:34
проверять я это, конечно, не буду
8 СеменовСемен
 
29.08.22
16:35
бессмысленно сравнивать объекты по ссылке на них
9 Asmody
 
29.08.22
16:37
(0) Любая из 12 строк в живом коде => Вон из профессии!
10 СеменовСемен
 
29.08.22
16:38
я бы выбрал так
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML;
ПолеКомпоновкиДанных = Новый ПолеКомпоновкиДанных("ы") = Новый ПолеКомпоновкиДанных("ы");
СжатиеДанных = Новый СжатиеДанных = Новый СжатиеДанных;

запускать влом
11 trad
 
29.08.22
16:40
ОбработкаКартинок, СжатиеДанных - истина
остальные - ложь
не проверял
12 trad
 
29.08.22
16:46
(11) +
проверил, загрустил
13 vde69
 
29.08.22
16:52
я так вижу, тут вопрос в том как идет сравнение, по значению или по ссылке

АдминистрированиеСервера = ложь
КвалификаторыЧисла = Истина
ОбработкаКартинок = ? не знаю что это
ОписаниеОповещения = ложь
ОписаниеТипов1 = истина
ОписаниеТипов2 = истина
ПараметрыЗаписиXML = ?
ПолеКомпоновкиДанных = ложь
СжатиеДанных = Истина
СтандартныйПериод = ложь
Структура = ?
ФиксированнаяСтруктура = истина
14 TormozIT
 
гуру
29.08.22
16:56
(6) Возьми консоль кода ИР. Там не маскируется.
15 Святофор
 
29.08.22
16:57
(13) по ссылка или значению может идти передача

сравнение это IComparable и реализация компоратора
16 СеменовСемен
 
29.08.22
16:58
(15) скорее всего там синглтон в основе равных
17 Святофор
 
29.08.22
16:59
(16) это как?
18 trad
 
29.08.22
16:59
(15) оператор сравнения реализуется для типа
19 Галахад
 
гуру
29.08.22
17:02
(14) Как раз в ней и смотрю. Может версия старая. 6_6.27.1
Такой код не показывает результата: ПараметрыЗаписиXML = 1;
20 СеменовСемен
 
29.08.22
17:03
(17) не знаешь что такое синглтон?
это когда объект всегда один
21 Святофор
 
29.08.22
17:03
(18) а какой смысл сравнивать два типа?

два объекта одного класса надо сравнивать - чтобы сортировать или эквивалентность проверить...
22 TormozIT
 
гуру
29.08.22
17:04
(19) Так много лет пользуешься и даже не научился версию ИР получать =)
У меня работает https://i.imgur.com/HkAEGEB.png
23 Святофор
 
29.08.22
17:04
(20) я знаю, только это здесь причем? я не понял
24 vde69
 
29.08.22
17:05
(20) типа как в php можно создавать объекты класса а можно использовать класс как сингл объект...
25 СеменовСемен
 
29.08.22
17:05
(23) ну так значения равны ибо по факту это один и тот же объект
26 trad
 
29.08.22
17:06
(21) ок, оператор сравнения реализуется для класса
27 Галахад
 
гуру
29.08.22
17:07
(22) Зачем мне? Хорошо работает, зачем что-то менять. :-)
28 free dude
 
29.08.22
17:07
(0) why?
29 Святофор
 
29.08.22
17:08
(25) т.е. не смотря на Новый - там синглтон? накрутили...
30 СеменовСемен
 
29.08.22
17:08
(28) а зачем задачки про шарики решают?
31 СеменовСемен
 
29.08.22
17:09
(29) синглтон - он всегда Новый ...
Там не совсем синглтоны, а синглтоны с параметрами. Это правильнее называть мемоизацией
32 free dude
 
29.08.22
17:10
(30) Коты задачки про шарики решают, потому что им делать нечего. А вы зачем?
33 СеменовСемен
 
29.08.22
17:11
(32) а зачем ты сюда пришел?
ответ на все эти вопросы - одинаковый
34 free dude
 
29.08.22
17:12
(33) Посмотреть на тест гуру 1С, а это херня какая то на постном масле.
35 Святофор
 
29.08.22
17:12
(31) синглтон - он всегда Новый ...

он один раз Новый

да и получение через Новый скрывают. Экземпляр синглтона предоставляет статической метод класса
36 Lama12
 
29.08.22
17:33
Не удивлюсь, если от версии к версии платформы, результаты будут разные.
37 Fragster
 
гуру
29.08.22
17:36
Вообще в работе часто приходится сравнивать поля компоновки, периоды и описания типов (включая внутренности) и там сравнение работает. С остальными сказать ничего не могу
38 СеменовСемен
 
29.08.22
17:45
(37) ну чтож победителю - медаль
39 TormozIT
 
гуру
29.08.22
17:51
(36) Ну это ты прям сильно предъявил платформе. Я проверял выборочно разные версии - везде одинаковые результаты.
40 TormozIT
 
гуру
29.08.22
17:53
(34) Возможно у каждого гуру свой тест и этот тест не для тебя?
41 Конструктор1С
 
29.08.22
18:00
(0) зачем так извращаться?
42 free dude
 
29.08.22
18:07
(40) а что дает этот тест? В чем его суть? в 90% случаев он бесполезный и как правильно заметили в разных платформах может давать разные результаты.
43 Святофор
 
29.08.22
18:11
(42) раз до этого добрался значит уже остальное все охвачено. и начались изыски в стиле "Веселый 1С". Или "CLR via C#"
44 TormozIT
 
гуру
29.08.22
19:21
(41) В чем смысл жизни?
45 Smit1C
 
29.08.22
19:37
(41) просто у кого-то  слишком много свободного времени... ))
46 TormozIT
 
гуру
29.08.22
19:38
В итоге как то более менее нашел объяснения всем случаям кроме СжатиеДанных. Его результат не укладывается. Вроде он - очень простой немутабельный объект, но почему то он уникальные экземпляры имеет. Возможно его проектировали с прицелом на какую то мутабельность, но сложилось. В итоге так и оставили.
47 TormozIT
 
гуру
29.08.22
19:42
(46) [поправка] НЕ сложилось
48 Кирпич
 
29.08.22
20:48
Знание бесполезной ерунды не делает никого гуру. Это тест для задротов, а не для гуру. Никто в реальной жизни такое не сравнивает.
49 Святой Нос
 
29.08.22
21:33
(44) > В чем смысл жизни?
42
50 senior_pomidor
 
30.08.22
06:36
(48) это даже не тест .не о чем хрень
51 Irbis
 
30.08.22
06:47
(45) Так много, что даже отдохнуть некогда. Отдых — это моё самое занятое время, не могу отвлечься ни на мгновение.
52 Fragster
 
гуру
01.09.22
12:10
(48) см (37)
53 Ботаник Гарден Меран
 
01.09.22
12:30
У сжатия данных есть [разная] степень, в конструкторе она по умолчанию.
Не тяну на гуру совсем, 4 из 12.
54 TormozIT
 
гуру
01.09.22
16:49
(53) В чем принципиальное отличие СжатиеДанных от КвалификаторыЧисла, которое не размножается?
55 Ботаник Гарден Меран
 
01.09.22
16:59
(54)
Ну я же не гуру.
Вообще, половина пунктов зависит от того, с какой ноги платформописатели встали утром.
Мне тоже странно, что Новый ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML а СжатиеДанных(-1) <> СжатиеДанных(-1)
"Так получилось".
56 Ботаник Гарден Меран
 
01.09.22
17:03
Плюс на партнерке добавил, но бесполезное это дело.
Оно и практически не особо нужно, а по давней традиции тем более делать не будут.
57 TormozIT
 
гуру
08.09.22
09:00
Экспериментально полученный список кэшируемых (для которых сравнение даст Истина) объектов:

ВыражениеКомпоновкиДанных
ВыражениеСхемыЗапроса
Граница
Действие
ИдентификаторВыгрузкиДанныхСистемыВзаимодействия
ИдентификаторОбсужденияСистемыВзаимодействия
ИдентификаторПользователяСистемыВзаимодействия
ИдентификаторПриложенияСистемыВзаимодействия
ИдентификаторСообщенияСистемыВзаимодействия
ИспользованиеСобытияЖурналаРегистрации
Картинка
КвалификаторыДаты
КвалификаторыДвоичныхДанных
КвалификаторыСтроки
КвалификаторыЧисла
КонтекстОбсужденияСистемыВзаимодействия
МоментВремени
МоментВремениСУточнениемПериода
НастройкиСериализацииJSON
ОписаниеИспользованияСобытияДоступЖурналаРегистрации
ОписаниеИспользованияСобытияОтказВДоступеЖурналаРегистрации
ОписаниеТипов
ПараметрКомпоновкиДанных
ПараметрыЗаписиJSON
ПараметрыЗаписиXML
ПараметрыЧтенияXML
ПолеКомпоновкиДанных
СвязьПоТипу
СвязьПоТипуКомпоновкиДанных
СтандартнаяДатаНачала
СтандартныйПериод
Стиль
УникальныйИдентификатор
ФорматированнаяСтрока
Цвет
Шрифт
58 DTX 4th
 
08.09.22
09:44
Бесполезная хрень. Абсолютно не применимо на практике. Достаточно знать чем передача по ссылке отличается от передачи по значению.
59 TormozIT
 
гуру
08.09.22
20:01
Продолжаем разговор. Нужно снова предсказать результаты

Ф1 = Метаданные = Метаданные;
Ф2 = Метаданные.Справочники = Метаданные.Справочники;
Ф3 = Метаданные.Справочники.Валюты = Метаданные.Справочники.Валюты;
Ф4 = Метаданные.Справочники.Валюты = Метаданные.Справочники.Валюты.Реквизиты.НаименованиеПолное.Родитель();

Ну тут я уже сталкивался, т.к. метаданные часто использую. Поэтому я угадал все.
60 xkanix
 
09.09.22
08:02
(57)
+ ключ записи регистров
+ строка  группировки и ключ строки дин. списка
+ всякие данные формы
+ "очевидные" ссылки
+ совсем очевидные числа, строки и пр.
ну и наверное ещё куча их

P.S. "кеширование" тут ну прямо вот вообще не при чём, хотя местами и правда в некотором виде присутствует.
61 TormozIT
 
гуру
09.10.22
11:59
(60) Согласен. "Кэширование" применяет лишь в некоторых случаях. А в большинстве случаев все таки сравнение через сериализацию.

Еще нашел интересную реализацию оператора сравнения для объекта ОбластьЯчеекТабличногоДокумента. Эти объекты размножаются и не равны всегд, кроме копирования ссылки.
Например выражение
Элемент.Область(Y, X) = Элемент.Область(Y, X)
дает Ложь для любых разрешенных параметров.