Имя: Пароль:
1C
 
Фичи платформы - век живи, век учись - дураком помрешь
0 vvp91
 
23.05.19
16:20
Прямо сейчас мой прог показал мне фичу платформы (8.3.13), которая очень понравилась - создание нового элемента соответствия инициализацией:

Карта = Новый Соответствие;
Карта["0001"] = Истина;
Карта["0002"] = Ложь;
Карта["Круть"] = 100500;
Карта[Справочники.Номенклатура.ПустаяСсылка()] = '20190522';


Причем в справке этого не описано. Ни запрещено, но и не описано.
Естественно весь код, до этого писался через "Карта[Ключ] <> Неопределено" и через "Карта.Вставить(Ключ, Значение)". Причем в типовых нигде такого нет.

На партнерке была дискуссия о синтаксическом сахаре в платформе - https://partners.v8.1c.ru/forum/topic/1754180

Хотелось бы разных простых инициализаций простых коллекций. Но, блин, от них ничерта не дождешься.
1 H A D G E H O G s
 
23.05.19
16:21
Зачем?
2 Garykom
 
гуру
23.05.19
16:22
(0) PHP-щиной и JS-щиной повеяло...
3 Cyberhawk
 
23.05.19
16:22
А зачем "Карта[Ключ] <> Неопределено"?
4 H A D G E H O G s
 
23.05.19
16:22
Хорошо, что вот таких энтузиастов нахрен послали.
6 Garykom
 
гуру
23.05.19
16:27
(5) Не использую в принципе, ибо потом когда обычно требуется добавить ИначеЕсли лишние действия
7 H A D G E H O G s
 
23.05.19
16:28
Синтаксис языка хорош, когда он читаем

Если Тогда Иначе КонецЕсли;
гораздо читаемый, чем
?()

Аналогично
МойМассив = Новый Массив();
МойМассив.Добавить("раз");
МойМассив.Добавить("два");
МойМассив.Добавить("три");

гораздо читаемей, чем это ушлепство из других ЯП
МойМассив = ["раз", "два", "три"];
8 H A D G E H O G s
 
23.05.19
16:29
(6) Да теже точки останова.
9 Кир Пластелинин
 
23.05.19
16:29
(0) в 8.3?) лол. еще в 8.2 так можно было
10 GANR
 
23.05.19
16:42
(0) Классическая перегрузка операторов в ООП. При желании можно создать класс Матрица, а потом с матрицами A, B, C проделывать (A + B) * C или A * A + B * B. Ну а то, что Вы этого не знали - невелика потеря, если Вам знаком метод соответствия Вставить.
11 PR
 
23.05.19
16:53
(0) Чувак нашел недокументированную никому нахрен не нужную фичу и срочно переписал весь свой код на код с ее использованием, чтобы после отрубания этой фичи все весело наипнулось
И этим хвастается
Я ничего не пропустил? :))
12 Джинн
 
23.05.19
16:57
(7) Плюсану.

(11) Он к этому еще новых фич хочет, чтобы наипнулось гораздо основательнее.
13 lodger
 
23.05.19
17:02
(0) использование фич не описанных в доке ведет к глубокой печали, когда в следующем релизе платформы эти фичи выпилят и ничего не скажут.
14 PR
 
23.05.19
17:06
(7) Соглашусь насчет ?(), почти всегда можно обойтись Если...
Про массив вообще не понимаю, что тут обсуждать

В 1С читабельность кода на два — три порядка важнее его размера
Быстрее понимать
Быстрее править
Меньше ошибок
Проще отлаживать
Быстрее и надежнее лепить горящие заплатки, когда бизнес встал
1С — язык высокого уровня, каждая неверная строчка может привести к реальным финансовым проблемам

Я даже не знаю, что на другой чаше весов?
Место на диске?
Возможность работать на мониторе не 36", а 18"?
Повышение уровня эндорфинов в стране из-за множественных оргазмов гиков?
15 Вафель
 
23.05.19
17:09
(14) и поэтому все делают на запросах километровых.
конечно чтоб читабельнее было
16 гангста парадайз
 
23.05.19
17:11
(15) ну запросы и синтаксис языка не путай, на скуле такого же размера запросы
17 Вафель
 
23.05.19
17:12
(16) на каком скуле, ты про что вообще?
18 mikecool
 
23.05.19
17:12
(15) ну вот зачем ты... )))
19 Вафель
 
23.05.19
17:13
(0) на 1с не очень выглядит ибо не разницы между сравнением и присваиванием.
и с 1 взгляда тут не понятно
20 гангста парадайз
 
23.05.19
17:14
(14) >1С — язык высокого уровня, каждая неверная строчка может привести к реальным финансовым проблемам

Обнял, братиш
21 pavig
 
23.05.19
17:18
(5)
А мне ?() нравится в случае простых операций. Очень удобно в одну строчку присвоить значение переменной, чем писать пять строчек Если Зачем Почему Иначе МожетЗакончим НетЕщеОдноУсловие Ок Кончай. Как раз гораздо понятнее и проще.
22 Nyoko
 
23.05.19
17:18
(0) 1с не права в этих, если так можно документировать, нельзя выдавать исключение. чё сопли то размазывать .
23 Garykom
 
гуру
23.05.19
17:20
(20) Вы еще заплачьте и дружно удалитесь в закат...
24 Rovan
 
гуру
23.05.19
17:45
(0) у меня есть старая платформа 8.3.6.1383 - там в справке написано
Соответствие (Map)
Элементы коллекции:
КлючИЗначение
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы соответствия.
Возможно обращение к значению элемента посредством оператора [...]. В качестве аргумента передается значение ключа элемента.

****
В 1С:Предприятие 8.3 (8.3.14.1630) точно так же
25 Garykom
 
гуру
23.05.19
17:59
(24) Ну бывает, возможно кто то даже использовал для получения значения, но для записи нового значения а не замены существующего по ключу не догадался.
26 mistеr
 
23.05.19
18:05
(0) Даже в 8.2.13 работает.

Но я не пользовался. Теперь наверное буду.

Не понял возмущения противников такого синтаксиса. Чем Вставить() более читабельно? Я бы даже сказал менее, т.к. не совсем очевидно, каким параметром идет ключ, а каким значение. Если с массивом так можно, почему нельзя с соответствием? В других языках ассоциативные массивы так и работают.
27 vvp91
 
23.05.19
18:29
(24) Да, в справке написано именно так.
И обращение через [...] для присваивания - это нормально.

Новое для меня и отличное от остальной платформы здесь только то, что для Соответствие, одновременно с присвоение происходит добавление этого элемента в соответствие.

(25) Действительно не догадался - нигде в платформе такого поведения в коллекциях нет.

(19) Ну да - непривычно. Но сокращает некоторый код, типичный для моих сценариев - проверить наличие, если нет или есть, то инициализировать. И еще несколько ускоряет работу кода - на больших данных заметно.
28 Сияющий в темноте
 
23.05.19
18:51
создание массива в 1с при помощи функции СтрРазделить
29 Вафель
 
23.05.19
18:56
(28) только со строками, с числами уже нельзя
30 Вафель
 
23.05.19
18:56
(27) а зачем для соотвествия проверять?
вставить работает всегда
31 vvp91
 
23.05.19
19:06
(30) Например, собственный индекс над таблицей значений, отклонение дублей по ключу индекса или специфическая обработка дублей. Или массовая пакетная обработка объектов с таб.частями, которые дозаполняются разрозненно и нет возможности вначале отсортировать поток данных табчастей по объектам.

Плюс примеры можно увидеть в партионном учете ЕРП, когда строятся цепочки обработки товаропотока.
32 PR
 
23.05.19
19:45
(18) Он в споре ищет истину
33 Cyberhawk
 
24.05.19
07:49
(27) "сокращает ... код"
Карта["0001"] = Истина // одна строка
Карта.Вставить("0001", Истина) // одна строка

В чем сокращение?
34 Mikeware
 
24.05.19
08:24
а чем плох синтаксический сахар?

чем плох ?()

В конце концов, любые циклы - это минимум условие+переход. т.е. for/while/until тоже можно считать сахаром...
35 Mikeware
 
24.05.19
08:26
(33) писать меньше. Если еще разделяется присваивание и проверка равенства - то нагляднее. Хотя - дело вкуса и соглашений о "хорошем коде"
36 Cyberhawk
 
24.05.19
08:33
(35) "писать меньше" // Но дольше: квадратная скобка вместо круглой )
37 Сияющий в темноте
 
24.05.19
08:33
Вообще,в 1с квадратные скобочки,это аналог оператора получить,но оператор получить lvalue не возвращает,а квадратная скобочка,оказывается,что да.
Для структуры же можно использовать Структура.Ключ просто,ключ в скобочки никто не пишет.
38 Cyberhawk
 
24.05.19
08:42
(37) "ключ в скобочки никто не пишет" // https://a.d-cd.net/e8AAAgDQBOA-960.jpg
39 ЗашелОставить Ответ
 
24.05.19
08:43
(7), (12) - кажется это наглядная демонстрация
https://www.factroom.ru/facts/4763

...И так, постепенно заменяя всех обезьян, вы придете к ситуации, когда в клетке окажутся 5 обезьян, которых водой вообще не поливали, но которые не позволят никому достать банан....
40 Cyberhawk
 
24.05.19
08:45
(39) Да из-за квадратных скобочек весь сыр-бор )
41 Сияющий в темноте
 
24.05.19
08:51
Когда,например,из VbScript обращаешься к 1с,то квадратных скобочек простр нет,а VbScript для массивов использует круглые.
Опять же,если у коллекции есть метод ПолучитьЭлементПоИндексу,то в реализации можно написать все,что угодно,как и вернуть.
42 djekting
 
24.05.19
08:51
(14)ага кроме 1с больше не начем учетных систем нету.....знаешь на биржах деньги посерьезнее крутятся и на 1с там ничего не пишут...

тут все понятно как и в 1с

string[] teams = {"Бавария", "Боруссия", "Реал Мадрид", "Манчестер Сити", "ПСЖ", "Барселона"};

var selectedTeams = new List<string>();
foreach(string s in teams)
{
    if (s.ToUpper().StartsWith("Б"))
        selectedTeams.Add(s);
}
selectedTeams.Sort();

foreach (string s in selectedTeams)
    Console.WriteLine(s);


а тут с помощью LINQ:

string[] teams = {"Бавария", "Боруссия", "Реал Мадрид", "Манчестер Сити", "ПСЖ", "Барселона"};

var selectedTeams = from t in teams // определяем каждый объект из teams как t
                    where t.ToUpper().StartsWith("Б") //фильтрация по критерию
                    orderby t  // упорядочиваем по возрастанию
                    select t; // выбираем объект

foreach (string s in selectedTeams)
    Console.WriteLine(s);


Итак, код стал меньше и проще. В принципе все выражение можно было бы записать в одну строку: var selectedTeams = from t in teams where t.ToUpper().StartsWith("Б") orderby t select t.
Но мы любим писать километры кода, якобы для читаемости...если человек не понимает код значит ему не хватает квалификации и работу он эту выполнять не должен.
43 Mikeware
 
24.05.19
09:04
(42) "Программы пишутся для компьютера, но читаются людьми"© Д.ВанТассел.
не стоит уж сильно жертвовать читаемостью и понимаемостью.
да, возможно ваш код будет читать (сопровождать/перерабатывать) разраб более низкой квалификации. Учитывайте и это.
44 dmpl
 
24.05.19
09:40
(13) Все будет еще веселее, когда эти фичи будут глючить :) А разработчика нафиг пошлют, т.к. не документировано.
45 Провинциальный 1сник
 
24.05.19
09:45
(40) Именно так, у 1сников к квадратным скобочкам врожденная неприязнь, так как надо переключать раскладку)
46 dmpl
 
24.05.19
09:49
(45) Если писать на английском - раскладку можно не переключать :)
47 dmpl
 
24.05.19
09:58
(42) Обе конструкции можно записать в одну строку. Примерно одинаковой длины.
48 Mikeware
 
24.05.19
09:58
(46) в турбоконфе - с зажатым альтом без переключения языка работает.  "треугольные скобки" ("больше"-"меньше") тоже...
49 Hillsnake
 
24.05.19
10:04
50 icipher
 
24.05.19
10:13
(42) на котлине
val teams = listOf("Бавария", "Боруссия", "Реал Мадрид", "Манчестер Сити", "ПСЖ", "Барселона").filter { it.capitalize().startsWith('Б') }.sorted()  
:)
51 PR
 
24.05.19
10:55
(42) И к чему был этот мозговой высер, я не понял?
К тому, что типа на каких-то языках код короче, чем в 1С или что?

И про что?
Про примитивнейший пример с формированием списка значений по условию и его последующей сортировкой?
Приведи такой же пример хотя бы что ли про создание документа Реализация товаров и услуг с заполнением табличной части Товары остатками на складе
Тогда и поговорим про сравнение читабельности и объема кода на 1С и на прочих языках
52 playmaker
 
24.05.19
12:02
(50) На Swift та же фигня))
let teams = ["Бавария", "Боруссия", "Реал Мадрид", "Манчестер Сити", "ПСЖ", "Барселона"].filter {$0.hasPrefix("Б")} .sorted()

В 1С давно мечтаю о таком написании:

"НовыйДокумент.ВидОперации = .ПродажаКомиссия;"
вместо
"НовыйДокумент.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;"

Т.к. что это за тип перечисления и так ясно исходя из типа значения реквизита "ВидОперации" данного документа.

Ну и "н += 1" вместо "н = н + 1" тоже лишь упростит код, особенно когда названия переменной длинное.
53 Вафель
 
24.05.19
12:14
(42) и вместо того чтобы запрос правильный написать, сначала все выберем в коллекцию, а потом ее уже будем фиьтровать
54 MM
 
24.05.19
12:17
(53) Так похоже придётся объяснять, что такое ленивое выполнение в LINQ, и то, что LINQ запрос сам преобразуется в SQL с нужными отборами, когда обращается к БД.