Вход | Регистрация
 

Фичи платформы - век живи, век учись - дураком помрешь

Фичи платформы - век живи, век учись - дураком помрешь
Я
   vvp91
 
23.05.19 - 16:20
Прямо сейчас мой прог показал мне фичу платформы (8.3.13), которая очень понравилась - создание нового элемента соответствия инициализацией:
Карта = Новый Соответствие;
Карта["0001"] = Истина;
Карта["0002"] = Ложь;
Карта["Круть"] = 100500;
Карта[Справочники.Номенклатура.ПустаяСсылка()] = '20190522';


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

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

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

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

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

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

(11) Он к этому еще новых фич хочет, чтобы наипнулось гораздо основательнее.
   lodger
 
13 - 23.05.19 - 17:02
(0) использование фич не описанных в доке ведет к глубокой печали, когда в следующем релизе платформы эти фичи выпилят и ничего не скажут.
   PR
 
14 - 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) на каком скуле, ты про что вообще?
   mikecool
 
18 - 23.05.19 - 17:12
(15) ну вот зачем ты... )))
   Вафель
 
19 - 23.05.19 - 17:13
(0) на 1с не очень выглядит ибо не разницы между сравнением и присваиванием.
и с 1 взгляда тут не понятно
   гангста парадайз
 
20 - 23.05.19 - 17:14
(14) >1С — язык высокого уровня, каждая неверная строчка может привести к реальным финансовым проблемам

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

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

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

Не понял возмущения противников такого синтаксиса. Чем Вставить() более читабельно? Я бы даже сказал менее, т.к. не совсем очевидно, каким параметром идет ключ, а каким значение. Если с массивом так можно, почему нельзя с соответствием? В других языках ассоциативные массивы так и работают.
   vvp91
 
27 - 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) а зачем для соотвествия проверять?
вставить работает всегда
 
 
   vvp91
 
31 - 23.05.19 - 19:06
(30) Например, собственный индекс над таблицей значений, отклонение дублей по ключу индекса или специфическая обработка дублей. Или массовая пакетная обработка объектов с таб.частями, которые дозаполняются разрозненно и нет возможности вначале отсортировать поток данных табчастей по объектам.

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

Карта.Вставить("0001", Истина)// одна строка


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

В конце концов, любые циклы - это минимум условие+переход. т.е. for/while/until тоже можно считать сахаром...
   Mikeware
 
35 - 24.05.19 - 08:26
(33) писать меньше. Если еще разделяется присваивание и проверка равенства - то нагляднее. Хотя - дело вкуса и соглашений о "хорошем коде"
   Cyberhawk
 
36 - 24.05.19 - 08:33
(35) "писать меньше" // Но дольше: квадратная скобка вместо круглой )
   Сияющий в темноте
 
37 - 24.05.19 - 08:33
Вообще,в 1с квадратные скобочки,это аналог оператора получить,но оператор получить lvalue не возвращает,а квадратная скобочка,оказывается,что да.
Для структуры же можно использовать Структура.Ключ просто,ключ в скобочки никто не пишет.
   Cyberhawk
 
38 - 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 обезьян, которых водой вообще не поливали, но которые не позволят никому достать банан....
   Cyberhawk
 
40 - 24.05.19 - 08:45
(39) Да из-за квадратных скобочек весь сыр-бор )
   Сияющий в темноте
 
41 - 24.05.19 - 08:51
Когда,например,из VbScript обращаешься к 1с,то квадратных скобочек простр нет,а VbScript для массивов использует круглые.
Опять же,если у коллекции есть метод ПолучитьЭлементПоИндексу,то в реализации можно написать все,что угодно,как и вернуть.
   djekting
 
42 - 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.
Но мы любим писать километры кода, якобы для читаемости...если человек не понимает код значит ему не хватает квалификации и работу он эту выполнять не должен.
   Mikeware
 
43 - 24.05.19 - 09:04
(42) "Программы пишутся для компьютера, но читаются людьми"© Д.ВанТассел.
не стоит уж сильно жертвовать читаемостью и понимаемостью.
да, возможно ваш код будет читать (сопровождать/перерабатывать) разраб более низкой квалификации. Учитывайте и это.
   dmpl
 
44 - 24.05.19 - 09:40
(13) Все будет еще веселее, когда эти фичи будут глючить :) А разработчика нафиг пошлют, т.к. не документировано.
   Провинциальный 1сник
 
45 - 24.05.19 - 09:45
(40) Именно так, у 1сников к квадратным скобочкам врожденная неприязнь, так как надо переключать раскладку)
   dmpl
 
46 - 24.05.19 - 09:49
(45) Если писать на английском - раскладку можно не переключать :)
   dmpl
 
47 - 24.05.19 - 09:58
(42) Обе конструкции можно записать в одну строку. Примерно одинаковой длины.
   Mikeware
 
48 - 24.05.19 - 09:58
(46) в турбоконфе - с зажатым альтом без переключения языка работает.  "треугольные скобки" ("больше"-"меньше") тоже...
   Hillsnake
 
49 - 24.05.19 - 10:04
   icipher
 
50 - 24.05.19 - 10:13
(42) на котлине
val teams = listOf("Бавария", "Боруссия", "Реал Мадрид", "Манчестер Сити", "ПСЖ", "Барселона").filter { it.capitalize().startsWith('Б') }.sorted()  
:)
   PR
 
51 - 24.05.19 - 10:55
(42) И к чему был этот мозговой высер, я не понял?
К тому, что типа на каких-то языках код короче, чем в 1С или что?

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.