Имя: Пароль:
1C
1С v8
Операция ++
0 andreymongol82
 
21.11.13
09:19
Пишем

Сообщить("010"++"010");

Выдает: 01010

Что за новая операция "++"? Почему не выдало ошибки? Или меня уже глючит?
1 Maxus43
 
21.11.13
09:20
читай как "010"+нихрена+"010"
2 Cube
 
21.11.13
09:21
(0) Что тебе не нравится? Платформа это понимает как: "010"+""+"010". Так понятнее?))
3 1dvd
 
21.11.13
09:21
(2) куда тогда нолик девался?
4 МойКодУныл
 
21.11.13
09:21
(1)(2) Нолика не хватает тогда.
5 andreymongol82
 
21.11.13
09:22
(1)А куда нолик делся?
6 Maxus43
 
21.11.13
09:22
(3)(4) я щетаю это очепятка автора
7 1dvd
 
21.11.13
09:22
(0) прикольно, да
8 1dvd
 
21.11.13
09:22
(6) а я проверил - не опечатка. 1С действительно так считает
9 andreymongol82
 
21.11.13
09:23
(6) неа, не очепятка
10 Godofsin
 
21.11.13
09:23
(6) Неа
11 Cube
 
21.11.13
09:23
(6) Нет, я проверил)))
Прикольно, а "010"+++"010" вообще ошибку выдает)
12 singlych
 
21.11.13
09:24
читай как "010" + Число("010")
13 1dvd
 
21.11.13
09:24
14 singlych
 
21.11.13
09:24
типа второй "+" это унарный +
15 Maxus43
 
21.11.13
09:25
ну значит да, новая операция. Ура, слава 1с!
16 Godofsin
 
21.11.13
09:25
Еще прикол:
"010"--"010" = 20 =))))
17 Лефмихалыч
 
21.11.13
09:25
второй плюс расценивается видать, как унарный и преобразовывает "010" к числу. Тут-то нолик и теряется
18 Maxus43
 
21.11.13
09:25
пользоваться всё равно этим не надо никогда
19 Лефмихалыч
 
21.11.13
09:26
это магия риальне
20 1dvd
 
21.11.13
09:26
(16) вот это вообще за гранью бобра и зла
21 1dvd
 
21.11.13
09:27
"010"+-"010"    = 010-10
22 andreymongol82
 
21.11.13
09:28
(12) (15) (16) Ага, спасибо. Вроде бы понятно.
(18) Естессно
23 catena
 
21.11.13
09:28
Дааа, ++ прикольная штука. Экспериментальным методом в свое время сошлись на том, что ++ преобразует следующий аргумент в число.
24 andreymongol82
 
21.11.13
09:29
(22) Поход в психушку откладывается :)
25 Maxus43
 
21.11.13
09:29
(23) см (16), там магия
26 Лефмихалыч
 
21.11.13
09:29
(20) шаблоны рвет, но на самом деле объяснимо. Оператор бинарный минус не определен для строк, по этому платформа принудительно приводить левое значение к числу.
Хотя по уму должна бы прерывать исполнение в воплями
27 singlych
 
21.11.13
09:29
(16) Ну правильно. Когда хочешь вычесть из строки, платформа пытается привести ее к числу.
28 Эмбеддер
 
21.11.13
09:30
(16) логично, 10-(-10)=20
29 Как страшно жить
 
21.11.13
09:30
требую в 1С опраторов
+=
++
и прочей си-магии
30 andreymongol82
 
21.11.13
09:30
(21) Вот вот это жесть
31 andreymongol82
 
21.11.13
09:31
(29) Ага, тогда бы классический прикол-головоломка был бы там
i = 5; i = ++i + ++i;
32 catena
 
21.11.13
09:32
(25)-- делает Число() из предыдущего аргумента
33 Эмбеддер
 
21.11.13
09:32
а всего-то надо было просто ошибку выдать
34 catena
 
21.11.13
09:32
а++б = а + Число(б)
а--б = Число(а)+б
35 Godofsin
 
21.11.13
09:34
(26) (27) (28) Ну да, объясняет.
Следующая задачка:
"010"//"010" = 010 )))))
36 Maxus43
 
21.11.13
09:34
(33) вот тут надо ошибку выдать, а (0) не смертельно
ВЫБРАТЬ
    ТИПЗНАЧЕНИЯ(ПРЕДСТАВЛЕНИЕССЫЛКИ(Валюты.Ссылка)) КАК Поле2,
    Валюты.Ссылка
ИЗ
    Справочник.Валюты КАК Валюты
37 1dvd
 
21.11.13
09:34
(35) У, ШАЙТАН! Не ломай мне моск
38 catena
 
21.11.13
09:35
(35) Ожидается символ ';'
39 1dvd
 
21.11.13
09:35
(35) а, это ж камент просто
40 1dvd
 
21.11.13
09:36
(38) открой табло
41 catena
 
21.11.13
09:37
(40)В табле... А в тексте так и будет.
42 andreymongol82
 
21.11.13
09:37
(36) В дамп упало...
43 Godofsin
 
21.11.13
09:38
(39) Молоток! =))
44 Maxus43
 
21.11.13
09:38
(42) я в курсе) Обещали исправить год назад - так и не исправили. Так что пользуйся оружием против 1с
45 1dvd
 
21.11.13
09:39
(36) +1 отличный способ завалить 1С
46 andreymongol82
 
21.11.13
09:41
(44) Сделаю закладку, буду на врагов так порчу насылать :))))
47 Lama12
 
21.11.13
09:47
(0)Прикольно конечно.
Получается, что не объявленное значение, в данном случае значение между + и +, по умолчанию считается числом.
Вопрос - почему платформа не последовательно выполняет операнды?
Получается что она сначала привела пустоту к числу, потом число сложила со значением справа, приведя его тоже к числу, а после этого попыталась сложить результат с тем, что слева.
48 singlych
 
21.11.13
09:49
(47) Все правильно она считает. Второй плюс - это унарный, а у него приоритет выше.
49 andreymongol82
 
21.11.13
09:52
(48) Как бе официально нет в 1С унарных операций, но по факту оказывается, что есть.
50 Asmody
 
21.11.13
10:06
(49) унарный минус есть вполне официально. а если есть унарный минус, то почему бы не быть унарному плюсу?
51 Рэйв
 
21.11.13
10:11
(0)Наверное зарезервировали на будущее ++, поставили заглушку как отработка унарного +, а для ++ определение еще не написали :-)
52 Эмбеддер
 
21.11.13
10:16
(51) может они и +- тоже зарезервировали в таком случае?
53 Рэйв
 
21.11.13
10:19
(52)У них все возможно.
54 Эмбеддер
 
21.11.13
11:38
(53) в отличие от винды, в 1с нет "пасхальных яиц"(((
55 Torquader
 
22.11.13
00:59
Всё бы было не так смешно, если бы
Строка(п1)+ +Строка(п2) выдало сообщение, что значение не может быт преобразовано к типу число.
Целый час на это убил, пока в коде (из 30 строк) нашёл два плюса подряд.
56 GROOVY
 
22.11.13
01:09
(54) Есть. Но все считают их багами.
57 Torquader
 
22.11.13
01:15
(50) Как бы логично минус или плюс относить только к числовым литералам.
То есть 1+-2 или 1++2 вполне понятно, а Один++Два - сразу выдавать ошибку или требовать расстановку скобок Один+(+Два).