Имя: Пароль:
1C
 
Что такое мутабельное значение?
0 Tonik992
 
01.11.18
14:33
До сих пор не могут понять, что такое мутабельное значение.
Объясните мне популярным языком, что есть мутабльное значение, какие есть в 1С, и почему именно они - мутабельные?
1 Cool_Profi
 
01.11.18
14:34
Например, объект. Его можно менять. А ссылку менять нельзя, поэтому она не мутабельная
2 Tonik992
 
01.11.18
14:36
(1) Таблицу значений можно менять, структуру.. Список значений, массив, переменную примитивного типа.. Но они не мутабельные
3 PR
 
01.11.18
14:44
4 Tonik992
 
01.11.18
14:49
(3) >>> Мутабельный тип (от англ. Mutable - изменчевый) - сложный тип данных (как правило - объекты), которые после своего создания допускают изменение своих свойств.

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

Однако, ЗначениеЗаполнено(Массив) - сработает, и не выдаст ошибку мутабельности. Хотя для массива действует тоже самое предположение автора: (то ли все значения массива равны нулю, то ли нет ни одного значения массива, или что-то иное). Поэтому с такими выводами я не согласен.

Если СписокЗначений Мутабельный, как сопоставить этот тип данных с правилом "которые после своего создания допускают изменение своих свойств"? У структуры есть свойства, но она не мутабельная.
5 Tonik992
 
01.11.18
14:51
(3) Мне больше важны академически знания, а не эмпирические -)
6 Tonik992
 
01.11.18
14:54
Наверное это как-то связано с хранением объекта в памяти?
7 dezss
 
01.11.18
14:57
И буква "Я" не помогает?
8 Tonik992
 
01.11.18
15:02
(7) Больше помогает What is mutable type на английском. Там больше описаний:

Some objects are mutable, meaning they can be altered.  Others are immutable; they cannot be changed but rather return new objects when attempting to update.

То есть при изменении значения не мутабельного объекта создается новый, а не изменяется старый.

string_build = ""
for data in container:
    string_build += str(data)
In reality, this is very inefficient. Because strings are immutable, concatenating two strings together actually creates a third string which is the combination of the previous two.

(7) Я не смог найти -(
9 palsergeich
 
01.11.18
15:05
(8) 1С вкладывает в это чуть чуть другой смысл. Смирись
10 Cyberhawk
 
01.11.18
15:06
Мутабельный в 1С - это для которого в клиент-серверной реализации платформы не реализована сериализация-десериализация при обмене с сервером приложений.

В режиме ОП и УП одни и те же объекты встроенного языка различаются мутабельностью. Например, табдок и СЗ в ОП мутабельные, а в УП уже нет.
11 Tonik992
 
01.11.18
15:17
(10) (9) Получается, что именно так..
Спасибо
12 Вафель
 
01.11.18
15:18
(10) при передаче тз вроде не про мутабельность ошибка выходит.
13 Злопчинский
 
01.11.18
15:24
тупой вопрос: почему ТЗ нельзя сериализовать/десериализовать и передать между клиентом и сервером?
14 Вафель
 
01.11.18
15:25
(13) говорят можно (через ВК), просто 1с не открыло доступ
15 Вафель
 
01.11.18
15:25
(14) Можно на клиенте ТЗ поиметь
16 Cyberhawk
 
01.11.18
15:26
(12) Дак в УФ везде не про мутабельность выходит ошибка
"Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа"
17 Злопчинский
 
01.11.18
15:42
не, вот почему нельзя? какая принципиальная трудность разложить ТЗ в XML..? или я вообще ничего не понимаю?
18 Cool_Profi
 
01.11.18
15:52
(15) Можно. Только перед этим она тебе поимеет.
(17) Так принято решение Гениальным архитектором. Кто ты такой, чтобы оспаривать его решение?
19 VS-1976
 
01.11.18
15:53
(17) Скорее 1С разработала ограниченную сериализацию только для того, что бы программисты новички не увлекались перетаскиванием всей базы с сервера на клиента и обратно...
20 Злопчинский
 
01.11.18
15:55
(18) каюсь и лобызаю стопы Гениального архитектора
21 Вафель
 
01.11.18
15:57
(19) сериализация тз в хмл вполне себе есть
22 VS-1976
 
01.11.18
16:09
(21) Я в общем, а не про тз.
23 ptiz
 
01.11.18
16:12
(13) Как это нельзя? С каких пор?
ТаблицаЗначений (ValueTable)
Доступность:
Сервер, толстый клиент, внешнее соединение.
Возможен обмен с сервером. Сериализуется.
24 Tonik992
 
01.11.18
16:36
(23) Да, однако в тонком клиенте ТЗ нельзя использовать.

(17) Может, потому что это особенности связанные с вебклиентом? Типа в ТЗ есть индексы.. Х3, а 1С не объясняла это, может кто-то из разработчиков платформы повеял это?
25 Tonik992
 
01.11.18
16:38
(16) Да, в УФ мутабельности нет. И кстате в УФ уже можно сделать
ЗначениеЗаполнено(СписокЗначений)
И
ЗначениеЗаполнено(ТаблицаЗначений)
26 Вафель
 
01.11.18
16:56
(24) индексы можно и на клиенте и на веб клиенте вполне создавать
27 Cyberhawk
 
01.11.18
16:59
(25) "кстате в УФ уже можно сделать" // Ну, про это вроде во второй части (10) написано
28 Провинциальный 1сник
 
01.11.18
17:00
Мутабельный объект - это который существует только в памяти клиента или конкретного рабочего процесса сервера и не может быть передан с клиента на сервер или между рабочими процессами, и не может быть сохранен в базе или сериализирован.
29 Tonik992
 
01.11.18
17:10
(28) Насчет сериализации некорректно.

Я, например, в режиме толстого клиента ОП могу на клиенте создать объект ПостроительОтчета, получить настройки (НастройкиПостроителяОтчета), а передать на сервер (через процедуру модуля с флагом ВызовСервера) не могу, т.к. выйдет ошибка "Попытка передачи с клиента на сервер мутабельного значения"

Однако, я могу поместить в ХранилищеЗначения (т.к. данный объект Сериализуется), и передать через ХЗ. А на стороне сервера распокавать.
30 Cyberhawk
 
01.11.18
17:12
(28) "или между рабочими процессами" // А как такую передачу можно вызвать?
31 Вафель
 
01.11.18
17:14
(30) фоновое с параметрами
32 youalex
 
01.11.18
17:15
(29) А если ты получишь настройки через ПолучитьНастройки() - то сможешь передать, сами настройки построителя - не мутабельны в данном смысле
33 Tonik992
 
01.11.18
17:17
Да не, СправочникОбъект даже сериализуется спокойно в XML.

(32) Я только что проверил. Настройки получаю через ПолучитьНастройки(). И объект НастройкиПостроителяОтчета  не передается на сервер, т.к. выдается ошибка мутабельности.
34 Cyberhawk
 
01.11.18
17:17
35 Cyberhawk
 
01.11.18
17:24
(31) Точняк, спс.
Забыл уже, что совсем недавно эту ошибку ловил (передавая в параметр ФЗ несериализуемое значение): "Параметр фонового задания не поддерживает сериализацию".
36 Cyberhawk
 
01.11.18
17:28
(33) "СправочникОбъект даже сериализуется спокойно в XML" // А толку. Короче можешь считать, что в 1С "мутабельный" это у которого в СП нет фразы "Возможен обмен с сервером" или "Сериализуется" (без приписки ХДТО).
37 youalex
 
01.11.18
17:30
(33) да, согласен
38 dezss
 
01.11.18
17:36
(8) ага...а теперь питон)))
a = [1,2,3]
a += [4]
id(a)
a = a + [5]
id(a)

И какой это объект, мутабельный или нет?

так что все зависит от языка)
39 Гад
 
01.11.18
17:41
(0) неприличными словами прошу не выражаться (с) шариков
40 Tonik992
 
01.11.18
17:51
(38) Мутабельный.
Я угадал?
41 ДНН
 
01.11.18
18:03
(28) "...и не может быть сохранен в базе или сериализирован."
ДокументОбъект - это ведь мутабельный объект. Разве он не может быть сохранен в базе?
42 Сияющий в темноте
 
01.11.18
19:12
Ну,в Visual basic и вообще а Ole,массив это не обьект,а значение.
43 Провинциальный 1сник
 
01.11.18
21:52
(41) Тут мы имеем некий дуализм. Документ как представление объекта в программном интерфейсе и собственно объект, записанный в информационную базу. Мы не можем, например, записать в реквизит этот объект - можем только ссылку.
44 VS-1976
 
01.11.18
22:03
(25) к твоему сведению не только в УФ. И это просто проверка на колличество()...
45 Сияющий в темноте
 
01.11.18
22:26
Просто,мутабельный подразумевает наличие скрытых свойств,которые при сохранении недоступны.

структура и соответствие обьекты,но с прозрачным поведением,и к базе данных не привязаны.
почему массив в 1с обьект,вопрос к создателям,но,если бы он не был обьектом,то пришлось бы вводить ссылки на переменные,так как иначе происходило бы копирование массива при передаче в другую переменную.
46 dezss
 
02.11.18
08:39
(40) а ты выполни этот код и посмотри...
если исходить из твоего определения в (8):
"То есть при изменении значения не мутабельного объекта создается новый, а не изменяется старый."
То он оказывается и мутабельным и немутабельным одновременно)))
a += [4] - добавляет элемент, но не создает новый
a = a + [5] - добавляет элемент, но при этом создается новый объект
Независимо от того, куда вы едете — это в гору и против ветра!