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

Что за ? в коде, или Секретный оператор в 1С

Что за ? в коде, или Секретный оператор в 1С
Я
   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) Ага... питоны там всякие (там тоже такое есть) или ц-с-плюсами (там вообще можно тааааакое навертеть...)
   mistеr
 
7 - 22.10.21 - 08:32
Кто говорил, что в 1С нет макросов? Есть!
   Адинэснег
 
8 - 22.10.21 - 08:33
(6) ну там хоть описано поведение операторов :)
   mistеr
 
9 - 22.10.21 - 08:34
Но все же интересно, для чего это было сделано и по чему до сих пор не убрали.

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

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

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

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

А = 1;
А = -А;

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

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

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

Есть такое?
   fisher
 
56 - 22.10.21 - 10:10
(55) Не помню. Вполне может быть. Си - он такой. Весь на доверии :) Но я до сих пор не понимаю, что ты хочешь сказать.
   pechkin
 
57 - 22.10.21 - 10:10
(50) де факто это функция ибо синтаксис функции.
вот в js
условие ? истина : ложь
это оператор
   acht
 
58 - 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) Это не то.
   acht
 
60 - 22.10.21 - 10:14
(59) Ну там еще в цпп перегрузку опреторов подвезли. Так что никаких ограничений для отстрела своих ног нет.
 
 
   ДенисЧ
 
61 - 22.10.21 - 10:15
(60) Вот и считай, что в 1с тебе уже перегрузили унарный + для строк.
   oslokot
 
62 - 22.10.21 - 10:21
вот в фузине такого б**дства нет.. или есть?
   fisher
 
63 - 22.10.21 - 10:21
Я к Си отношусь намного теплее, чем к С++. Си прекрасен и строен. Это просто надстройка над ассемблером. А плюсы - это уже кровь/кишки/распидарасило.
   Garykom
 
64 - 22.10.21 - 10:24
(63) аналогично
Pure C прелесть
   ДенисЧ
 
65 - 22.10.21 - 10:24
(62) Там есть геня, этого достаточно ))
   NorthWind
 
66 - 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);
};
   Garykom
 
67 - 22.10.21 - 10:32
(66) Тут просто в одну строчку записали и что?
   Garykom
 
68 - 22.10.21 - 10:33
(67)+ И имена переменных нормальные дать а то явно обфускация
   mistеr
 
69 - 22.10.21 - 10:34
(61) Прикол в том, что унарного плюса и для чисел нет. Только минус.
   fisher
 
70 - 22.10.21 - 10:36
(67) Эх ты, фольклора не знаешь :)
   fisher
 
71 - 22.10.21 - 10:41
А, нет. Показалось.
   Garykom
 
72 - 22.10.21 - 10:42
(70) Знаю и да это из фольклера, причем уже исправлено чтобы реально работало
   SeiOkami
 
73 - 22.10.21 - 10:42
(69), почему же, есть http://pics.rsh.ru/img/000_kj3xzee5.png
   Garykom
 
74 - 22.10.21 - 10:43
   mistеr
 
75 - 22.10.21 - 11:04
(73) О, это я старую версию справки смотрел. Значит, исправили.
   Ненавижу 1С
 
76 - 22.10.21 - 11:10
(57) нет, внешний вид ни о чем не говорит
у функции все аргументы вычисляются перед передачей параметров
а здесь оператор - вычисляется только ветвь, соответствующая условию
   pechkin
 
77 - 22.10.21 - 12:24
(76) специальная оптимизировання функция
   Ненавижу 1С
 
78 - 22.10.21 - 13:29
(77) ну давай еще какую-нибудь сущность придумаем, только чтобы не признавать очевидные вещи
   SeiOkami
 
79 - 22.10.21 - 16:19
Ссылка по теме на партнерском форуме:

https://partners.v8.1c.ru/forum/topic/2024936
   Ненавижу 1С
 
80 - 22.10.21 - 17:59
(79) не у всех ссылка откроется


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