|
Что за ? в коде, или Секретный оператор в 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
|
||||
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
|
||||
80
Ненавижу 1С
гуру
22.10.21
✎
17:59
|
(79) не у всех ссылка откроется
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |