Oberon space

General Category => Общий раздел => Тема начата: ilovb от Сентябрь 24, 2012, 12:31:11 pm

Название: Я попался на синтаксисе "=" vs ":="
Отправлено: ilovb от Сентябрь 24, 2012, 12:31:11 pm
Вот прям сейчас напоролся на свою ошибку. Не то чтобы критично, но минуты 3 искал в другом месте.  :)

Цитировать
...
Начисление = Начисления.Добавить();
Начисление.ОбъектСети =
Начисление.Номенклатура = ТекВидУслуги.Номенклатура;
Начисление.Объем = Остаток;
...

В результатах объект сети не был заполнен, но по логике алгоритма такого быть не должно.

Естественно синтаксический контроль сие скушал. А так как типизация динамическая, то и в рантайме ошибки нет...  :)
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: vlad от Сентябрь 24, 2012, 02:08:15 pm
Вот прям сейчас напоролся на свою ошибку. Не то чтобы критично, но минуты 3 искал в другом месте.  :)

Сабж тут не причем. Если в языке присваивание является выражением (expression vs statement) - будет такая фигня. Еще можно припомнить значащее форматирование - вот в динамическом питоне такое не пройдет ;)
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: ilovb от Сентябрь 24, 2012, 02:11:59 pm
Ну почему же?

Если бы присваивание было как в паскалях, то синтаксис контроль меня бы обругал.

Цитировать
...
Начисление := Начисления.Добавить();
Начисление.ОбъектСети :=
Начисление.Номенклатура := ТекВидУслуги.Номенклатура;
Начисление.Объем := Остаток;
...
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: vlad от Сентябрь 24, 2012, 02:20:17 pm
Ну почему же?

Если бы присваивание было как в паскалях, то синтаксис контроль меня бы обругал.

Цитировать
...
Начисление := Начисления.Добавить();
Начисление.ОбъектСети :=
Начисление.Номенклатура := ТекВидУслуги.Номенклатура;
Начисление.Объем := Остаток;
...

Не обругал бы. Положил бы значение "ТекВидУслуги.Номенклатура" и в "Начисление.Номенклатура" и в "Начисление.ОбъектСети". В паскале/обероне как раз различается expression и statement. assignment - это statement и не может использоваться как часть expression. Но expression это часть assignment (которая справа после ':=').
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: vlad от Сентябрь 24, 2012, 02:22:39 pm
Ну почему же?

Или в 1C вообще не разлчаются значки присваивания и сравнения? Тогда все вообще запущенно :)
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: ilovb от Сентябрь 24, 2012, 02:28:27 pm
Ага. Один и тот же знак "="  :)

Например:
a = 1;
b = 2;
c = a = b;

В "c" будет false
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: ilovb от Сентябрь 24, 2012, 02:35:11 pm
Не обругал бы. Положил бы значение "ТекВидУслуги.Номенклатура" и в "Начисление.Номенклатура" и в "Начисление.ОбъектСети". В паскале/обероне как раз различается expression и statement. assignment - это statement и не может использоваться как часть expression. Но expression это часть assignment (которая справа после ':=').

Туго соображаю... Если различаются, то почему не обругал бы? В expression допустим знак ":="?
Блин, надо BNF смотреть.
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: valexey_u от Сентябрь 24, 2012, 02:54:30 pm
Ага. Один и тот же знак "="  :)

Например:
a = 1;
b = 2;
c = a = b;

В "c" будет false

рукалицо!

По моему, 1C, как язык, проектировали руководствуясь worst practices.
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: vlad от Сентябрь 24, 2012, 03:18:20 pm
Ага. Один и тот же знак "="  :)

Тогда не обращай внимание на то, что я написал ;) Этому языку уже ничто не поможет :)
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: DIzer от Сентябрь 24, 2012, 03:45:53 pm
c = a = b;
нда.  говнецо ,ilovb - учитывая ваши слова о родственности этого языка шарпею , я бы подумал что это цепочное присваивание . Забавно, что на такое говнецо  подсаживают людей которые не имеют практики программирования (будто  у них других проблем нет)
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: valexey_u от Сентябрь 24, 2012, 04:06:35 pm
c = a = b;
нда.  говнецо ,ilovb - учитывая ваши слова о родственности этого языка шарпею , я бы подумал что это цепочное присваивание . Забавно, что на такое говнецо  подсаживают людей которые не имеют практики программирования (будто  у них других проблем нет)
А оно еще и динамически типизированное! То есть если бы была статическая типизация, львиная дола ошибок была бы отловлена на этапе компиляции даже при таком синтаксисе.
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: DIzer от Сентябрь 24, 2012, 04:10:19 pm
c = a = b;
нда.  говнецо ,ilovb - учитывая ваши слова о родственности этого языка шарпею , я бы подумал что это цепочное присваивание . Забавно, что на такое говнецо  подсаживают людей которые не имеют практики программирования (будто  у них других проблем нет)
А оно еще и динамически типизированное! То есть если бы была статическая типизация, львиная дола ошибок была бы отловлена на этапе компиляции даже при таком синтаксисе.
это то ладно, вы мне скажите как должно интерпретироваться:
с=b=a=d
или это ошибка?
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: valexey_u от Сентябрь 24, 2012, 04:15:28 pm
c = a = b;
нда.  говнецо ,ilovb - учитывая ваши слова о родственности этого языка шарпею , я бы подумал что это цепочное присваивание . Забавно, что на такое говнецо  подсаживают людей которые не имеют практики программирования (будто  у них других проблем нет)
А оно еще и динамически типизированное! То есть если бы была статическая типизация, львиная дола ошибок была бы отловлена на этапе компиляции даже при таком синтаксисе.
это то ладно, вы мне скажите как должно интерпретироваться:
с=b=a=d
или это ошибка?
Зависит от конкретной грамматики. И семантики. Нужно смотреть на ассоциативность присваивания, на то возвращает оно lvalue или rvalue и так далее. Дьявол в деталях.
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: DIzer от Сентябрь 24, 2012, 04:28:47 pm

Зависит от конкретной грамматики. И семантики. Нужно смотреть на ассоциативность присваивания, на то возвращает оно lvalue или rvalue и так далее. Дьявол в деталях.
  ;) подождем разъяснений эксперта -"одынэссника" - лично я считаю что в этом случае должна генерироваться ошибка... (выражение может содержать только один оператор присваивания)
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: DIzer от Сентябрь 24, 2012, 04:32:25 pm
хотя нет, даже в этом случае:
b=a=d
может трактоваться как  цепочное сравнение...
короче.. говнецо  с какой стороны не подходи..
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: Geniepro от Сентябрь 24, 2012, 04:34:30 pm
INT x, y;
x :=
y := 5;
print ((x, y))
---------- Algol-68 G ----------
         +5         +5
Казалось бы, причём тут "=" vs ":=" о_О
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: DIzer от Сентябрь 24, 2012, 04:37:52 pm
 :) не понял? к чему это вы..- в вашем примере обычное цепочное присваивание...
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: ilovb от Сентябрь 24, 2012, 05:53:39 pm
это то ладно, вы мне скажите как должно интерпретироваться:
с=b=a=d
или это ошибка?

"c=" - присваивание
"b=a=d" - выражение
Слева направо: ((b=a) = d)---> результат типа булево

Например:
a = 1;
b = 1;
d = 2;

1) (b=a) = true
2) (true = 2) = false

т.е.
с=b=a=d
с=1=1=2 --> false

но:
c=1=1=1 --> true

т.к. в 1С принято что:
true = 1
false = 0

т.е. если сравниваем булеву переменную с числовой, то вторая будет интерпретироваться как булево если она равна 1 или 0 (наследие 1С 7.7, там типа булево вообще не было)

имеем:
для c=1=1=1 ---> c=((1=1)=1)
(1=1) = true
(true=1) = (true=true) = true

т.е.
c=2=2=1 ---> true
c=2=2=2 ---> false
c=1=2=0 ---> true
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: ilovb от Сентябрь 24, 2012, 06:00:49 pm
INT x, y;
x :=
y := 5;
print ((x, y))
---------- Algol-68 G ----------
         +5         +5
Казалось бы, причём тут "=" vs ":=" о_О

Ну алгол 68 это да...  :)

Вот PABC матерится.
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: ilovb от Сентябрь 24, 2012, 06:04:58 pm
c = a = b;
нда.  говнецо ,ilovb - учитывая ваши слова о родственности этого языка шарпею...

Не не не. Я говорил про родственность VB  :D
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: ilovb от Сентябрь 24, 2012, 06:23:51 pm
VBS аналогично:
Цитата: test.vbs
a = 2
b = 2
d = -1
c = a = b = d
MsgBox(c) ' --> true

a = 2
b = 1
d = 0
c = a = b = d
MsgBox(c) ' --> true

a = 1
b = 1
d = 1
c = a = b = d
MsgBox(c)  ' --> false

Только в отличие от 1С:
true = -1
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: DIzer от Сентябрь 25, 2012, 06:57:15 am

Вот PABC матерится.
и правильно делает - вот если бы он назывался шРАBСом..
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: DIzer от Сентябрь 25, 2012, 07:09:36 am

"c=" - присваивание
"b=a=d" - выражение
Слева направо: ((b=a) = d)---> результат типа булево
......
Понятно - цепочные присваивания запрещены, цепочные сравнения разрешены(при совпадении обозначений операторов равенства и присваивания)- говно, короче... бедные 1С ники... и чего там AlexUs возмущался... --какое нахрен  изучение MSsql  - и без этого проблем хватает  :) А может это специально создатели 1С ввели , ну чтобы внимание у программистов 1С не рассредотачивалось на всякие побочные технологии?  ;D
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: DIzer от Сентябрь 25, 2012, 07:16:37 am
надо , это... предложить использовать 1с никам PABC вместо их чуда -языка  :)
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: DIzer от Сентябрь 25, 2012, 07:19:51 am
хотя не.. не пойдет вследствие отсутствия  русских идентификаторов и служебных слов ...PABC будет слишком сложен для основной массы 1С -программистов  коих уже состав и пригоршня вагонов расплодилось  :D
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: Berserker от Сентябрь 25, 2012, 11:52:41 am
Это ещё не все сюрпризы этого недо-языка. Например, если где-то объявлена глобальная переменная Х, в в подпрограмме - локальная Х, то все обращения к Х касаются именно глобальной переменной.
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: DIzer от Сентябрь 25, 2012, 12:36:43 pm
Это ещё не все сюрпризы этого недо-языка. Например, если где-то объявлена глобальная переменная Х, в в подпрограмме - локальная Х, то все обращения к Х касаются именно глобальной переменной.
Ой ля -ля а вот это уже  очень херово - по сути дела  речь идет о том, что нельзя нормально провести декомпозицию сложной задачи в несколько  простых.... вообще говоря, я встречал подобные казусы в "подельных" скриптовых языках - не предназначенных для написания чего -то законченного (играющих роль клея для связывания готовых самостоятельных блоков)...
Название: Re: Я попался на синтаксисе "=" vs ":="
Отправлено: Berserker от Сентябрь 25, 2012, 03:39:37 pm
IDE там интеллектуальная. Я сперва недоумевал, как в динамическом языке по нажатию "." отображаются методы и свойства объекта в текущем контексте. Оказалось всё банально.

Во-первых, если объект создан с нуля (структура), то вигвам, запоминайте список полей в голове или пишите в комментариях. Во-вторых, тип переменной берётся из последнего присваивания:

Если Истина Тогда А = Новый Массив();
Иначе А = 7; КонецЕсли
А. // Здесь Конфигуратор не отобразит список методов объекта Массив, т.к А для него - Число

Если Истина Тогда А = 7;
Иначе А = Новый Массив(); КонецЕсли
А. // А здесь отобразит, хотя А - не объект