Имя: Пароль:
1C
 
Что за ? в коде, или Секретный оператор в 1С
0 SeiOkami
 
22.10.21
08:06
Что думаете по этому поводу?

https://infostart.ru/public/1537889/?ref=1159

Может старожилы уже как-то поднимали тему и выясняли что-то интересное

МояПеременная = 0;

МояПеременная = ? + 1; //1
МояПеременная = ? + 1; //2
МояПеременная = ? * 5; //10
МояПеременная = ? / 2; //5
МояПеременная = ? - 6; //-1
1 ДенисЧ
 
22.10.21
08:15
Это то, за что 1сников, применяющих это, нужно выгонять без выходного пособия и с волчьим билетом.
2 Адинэснег
 
22.10.21
08:26
фу, начал мыть руки после конфигуратора
3 Масянька
 
22.10.21
08:29
(1) Все, что не запрещено, разрешено (С)
4 Адинэснег
 
22.10.21
08:31
и на этом языке учетные системы пишут, ерп всякие 🤦‍♂️
5 ДенисЧ
 
22.10.21
08:31
(3) не всё, что не запрещено, нужно делать.
6 ДенисЧ
 
22.10.21
08:32
(4) Ага... питоны там всякие (там тоже такое есть) или ц-с-плюсами (там вообще можно тааааакое навертеть...)
7 mistеr
 
22.10.21
08:32
Кто говорил, что в 1С нет макросов? Есть!
8 Адинэснег
 
22.10.21
08:33
(6) ну там хоть описано поведение операторов :)
9 mistеr
 
22.10.21
08:34
Но все же интересно, для чего это было сделано и по чему до сих пор не убрали.

Раз тащат с 8.0 и никак не решатся выкинуть, значит кто-то использует. Если не типовые, то внутренние конфы 1С.
10 ДенисЧ
 
22.10.21
08:38
(9) Тащят... Думаешь, с 8.0 там остался хоть один исходный разработчик? А что не убрали - так кому хочется копаться в куче легаси?
11 acht
 
22.10.21
08:41
(9) > не решатся выкинуть, значит кто-то использует.

О, новая теория заговора подъехала.
1С не исправляет ошибку xxxxxxxx потому что она использется во внутренних конфах 1С!
12 mistеr
 
22.10.21
08:43
(11) При чем тут ошибки?
13 acht
 
22.10.21
08:47
(12) Действительно, причем? o_O
14 END
 
22.10.21
08:47
(10) Конечно. Основной костяк во главе с братьями о сих пор трудится. Ты презентации посмотри по механизмам платформы. Там много докладов от возрастных разработчиков. Это вот эти, которые у истоков стояли.
15 acht
 
22.10.21
08:49
(14) > Основной костяк
Что еще за Константин? =)
16 acht
 
22.10.21
08:50
А так да - тот же Одей, он, похоже всех еще нв 9.0 переведет =)
17 vladmenleo
 
22.10.21
08:53
(0) А попробуй такой код
СтрТелефон = "9052763010";
ПлохаяСтрока = "+7(" + Сред(СтрТелефон, 1, 3) + ")" + Сред(СтрТелефон, 4, 3) + "-" + + Сред(СтрТелефон, 7, 2) + "-" + + Сред(СтрТелефон, 9, 2);
и подивись результату - все нули как корова языком :)
Клюшки-же на такой код сразу о ошибке говорят
18 SeiOkami
 
22.10.21
09:01
(17), что-то я не понял, чему тут дивиться)
19 Ёпрст
 
22.10.21
09:01
(17)
Кто кого лизал ?
http://pics.rsh.ru/img/11_dkozpo4k.png
20 Ёпрст
 
22.10.21
09:11
Единственная полезная фича платформы, которая кочует еще с 7.7,
это конструкция
"" ""
что равносильно Символы.ПС

Даже в табло, возвращает верно
Символы.ПС = "" ""    Да

Втыкаю в код, по привычке, лень мне писать явно Символы.четотам
21 dmt
 
22.10.21
09:13
(20) прикольно. Еще вопрос для викторины (0)
22 mistеr
 
22.10.21
09:15
(20) Фигасе, полезная. Полезно все, что потакает твоей лени?
23 fisher
 
22.10.21
09:15
Спорить о полезности недокументированных фич... Эх, где мои 17 лет :)
24 Ёпрст
 
22.10.21
09:16
(22) Да, ибо в клюшках конструкция переноса строки была еще длиннее, чем символы.пс
25 fisher
 
22.10.21
09:22
(17) Попробовал. Результат "+7(905)276-30-10". На клюшках пробовать уже лень. Обычный код. Где там ошибку выдавать?
26 fisher
 
22.10.21
09:23
А. Дошло. Двойные плюсы. Ну, такое...
27 fisher
 
22.10.21
09:28
Да, лучше бы ошибку компиляции прикрутили, чем фиксили необычное поведение.
28 SeiOkami
 
22.10.21
09:28
(12), я по этому поводу и видео снимал)
https://youtu.be/-iVga4W9O8U
29 SeiOkami
 
22.10.21
09:28
(28), ой, это к (21)
30 SeiOkami
 
22.10.21
09:29
(26), это приведение к числу.
Один плюс - сложение. А второй - приведение строки к числу.
31 fisher
 
22.10.21
09:33
(30) Я догадался. Но возможность такого синтаксиса недокументирована. И на 12 релизе к числу не приводит. К вопросу об использовании недокументированных фич. Поэтому и говорю, что зря не выдают ошибку на таком выражении.
32 fisher
 
22.10.21
09:35
(31) + А нет, приводит. Просто в (17) тестовая строка неправильная. Надо "9052760301"
33 SeiOkami
 
22.10.21
09:36
(31), а разве недокументирована?
Это ж как просто минус перед числом

А = 1;
А = -А;

Обычный код вроде
34 vladmenleo
 
22.10.21
09:38
(19) Это я неудачный пример привел. А на таком номере 9825400610 ?
35 vladmenleo
 
22.10.21
09:39
(32) да неверный пример привел
36 fisher
 
22.10.21
09:41
(33) Я нигде в доке не встречал, что можно неявно преобразовывать строку к числу таким способом. Это можно считать фичей, но лично я бы ограничил буйство неявных преобразований типов. На примере js хорошо видно, к чему это приводит. Сначала казачью вольницу запустили и хвастались этим а потом спохватились и начали ограничения прикручивать.
37 mistеr
 
22.10.21
09:43
(36) А преобразование к строке "" + XXX встречал?
38 ДенисЧ
 
22.10.21
09:43
(36) "я бы ограничил буйство неявных преобразований типов"
Диссидент! Переходи на java, там такого нет!
39 mistеr
 
22.10.21
09:44
(38) Иностранный агент!
40 SeiOkami
 
22.10.21
09:44
(34), а, действительно прикольно, спасибо.
Скушал минус потому что +"06" приводится к числу 6
41 SeiOkami
 
22.10.21
09:45
(4), скушал 0
42 Garykom
 
гуру
22.10.21
09:46
(0) Как обычно добавляя новые фичи (Новый Структура без "()") заодно добавили новых багов.
43 fisher
 
22.10.21
09:50
Кстати. Вообще не могу найти в текущем описании встроенного языка правила преобразования типов. Раньше вроде где-то находилось. А сейчас только отсылки нахожу "в соответствии с правилами преобразования типов". Так а где они, блин? :) Подскажите, где они там в доке.
44 fisher
 
22.10.21
09:55
(37) Да. Это частый паттерн во многих языках и в доке хотя бы описано что если после строки будет плюс, то это конкатенация строк и несовпадающий второй тип данных будет неявно преобразован. А про унарные операции со строкой ничего такого нет.
45 ДенисЧ
 
22.10.21
09:56
(44) А в каких языках есть прямое преобразование строки в число?
46 Ненавижу 1С
 
гуру
22.10.21
09:56
Сообщить = 15;
?(42);

Ошибка:
Встроенная функция может быть использована только в выражении. (Сообщить)
?<<?>>(42);
47 pechkin
 
22.10.21
09:58
(46) функция ? уже есть.
48 acht
 
22.10.21
09:58
(45) js, ити его
49 mistеr
 
22.10.21
09:59
(43) Глобальный контекст / Функции преобразования значений
50 Ненавижу 1С
 
гуру
22.10.21
09:59
(47) а разве ?(Условие,А,Б) - функция? всегда считал, что оператор
51 ДенисЧ
 
22.10.21
10:00
(48) Я просил языки, а не... )))
52 aka MIK
 
22.10.21
10:04
(0) Нормалек, синтаксический сахар

Инкремент, присваивание несколько раз, модуль
53 Ненавижу 1С
 
гуру
22.10.21
10:06
(51) какой ты перфекционист!
54 fisher
 
22.10.21
10:06
(45) В смысле - явное? Не понял вопроса. Везде есть в том или ином виде.
(49) А - типа по правилам явных преобразований? Ну, действительно, может это и имелось в виду... Тогда просто про унарные операции этот момент забыли описать. Но раз документировано 5 + "5", то и -"5" вполне логично. Но я повбывав бы. Потому как пользы никакой, а неявную ошибку схлопотать - раз плюнуть.
55 ДенисЧ
 
22.10.21
10:07
(54) Например, в С есть?
char* a = "123";
int b;
b = a;

Есть такое?
56 fisher
 
22.10.21
10:10
(55) Не помню. Вполне может быть. Си - он такой. Весь на доверии :) Но я до сих пор не понимаю, что ты хочешь сказать.
57 pechkin
 
22.10.21
10:10
(50) де факто это функция ибо синтаксис функции.
вот в js
условие ? истина : ложь
это оператор
58 acht
 
22.10.21
10:12
(55) > в С есть?
в С таки есть. В духе:

struct test{
    int a;
    union {
        int b;
        double c;
    };
} d;

d.b = 123;
double e = d.c;

Не проверял =)
59 ДенисЧ
 
22.10.21
10:13
(58) Это не то.
60 acht
 
22.10.21
10:14
(59) Ну там еще в цпп перегрузку опреторов подвезли. Так что никаких ограничений для отстрела своих ног нет.
61 ДенисЧ
 
22.10.21
10:15
(60) Вот и считай, что в 1с тебе уже перегрузили унарный + для строк.
62 oslokot
 
22.10.21
10:21
вот в фузине такого б**дства нет.. или есть?
63 fisher
 
22.10.21
10:21
Я к Си отношусь намного теплее, чем к С++. Си прекрасен и строен. Это просто надстройка над ассемблером. А плюсы - это уже кровь/кишки/распидарасило.
64 Garykom
 
гуру
22.10.21
10:24
(63) аналогично
Pure C прелесть
65 ДенисЧ
 
22.10.21
10:24
(62) Там есть геня, этого достаточно ))
66 NorthWind
 
22.10.21
10:28
(63) Ага, ага.

#include <stdio.h>
#include <stdlib.h>
int P(char* s) { return 1; };
void main()
{
int e,C=0,R;char *u;
for (;P("\n"),e++;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("|"+(*u/4)%2);
};
67 Garykom
 
гуру
22.10.21
10:32
(66) Тут просто в одну строчку записали и что?
68 Garykom
 
гуру
22.10.21
10:33
(67)+ И имена переменных нормальные дать а то явно обфускация
69 mistеr
 
22.10.21
10:34
(61) Прикол в том, что унарного плюса и для чисел нет. Только минус.
70 fisher
 
22.10.21
10:36
(67) Эх ты, фольклора не знаешь :)
71 fisher
 
22.10.21
10:41
А, нет. Показалось.
72 Garykom
 
гуру
22.10.21
10:42
(70) Знаю и да это из фольклера, причем уже исправлено чтобы реально работало
73 SeiOkami
 
22.10.21
10:42
(69), почему же, есть http://pics.rsh.ru/img/000_kj3xzee5.png
74 Garykom
 
гуру
22.10.21
10:43
75 mistеr
 
22.10.21
11:04
(73) О, это я старую версию справки смотрел. Значит, исправили.
76 Ненавижу 1С
 
гуру
22.10.21
11:10
(57) нет, внешний вид ни о чем не говорит
у функции все аргументы вычисляются перед передачей параметров
а здесь оператор - вычисляется только ветвь, соответствующая условию
77 pechkin
 
22.10.21
12:24
(76) специальная оптимизировання функция
78 Ненавижу 1С
 
гуру
22.10.21
13:29
(77) ну давай еще какую-нибудь сущность придумаем, только чтобы не признавать очевидные вещи
79 SeiOkami
 
22.10.21
16:19
Ссылка по теме на партнерском форуме:

https://partners.v8.1c.ru/forum/topic/2024936
80 Ненавижу 1С
 
гуру
22.10.21
17:59
(79) не у всех ссылка откроется
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой