Автор Тема: Я попался на синтаксисе "=" vs ":="  (Прочитано 10102 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Я попался на синтаксисе "=" vs ":="
« : Сентябрь 24, 2012, 12:31:11 pm »
Вот прям сейчас напоролся на свою ошибку. Не то чтобы критично, но минуты 3 искал в другом месте.  :)

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

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

Естественно синтаксический контроль сие скушал. А так как типизация динамическая, то и в рантайме ошибки нет...  :)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #1 : Сентябрь 24, 2012, 02:08:15 pm »
Вот прям сейчас напоролся на свою ошибку. Не то чтобы критично, но минуты 3 искал в другом месте.  :)

Сабж тут не причем. Если в языке присваивание является выражением (expression vs statement) - будет такая фигня. Еще можно припомнить значащее форматирование - вот в динамическом питоне такое не пройдет ;)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #2 : Сентябрь 24, 2012, 02:11:59 pm »
Ну почему же?

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

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #3 : Сентябрь 24, 2012, 02:20:17 pm »
Ну почему же?

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

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

Не обругал бы. Положил бы значение "ТекВидУслуги.Номенклатура" и в "Начисление.Номенклатура" и в "Начисление.ОбъектСети". В паскале/обероне как раз различается expression и statement. assignment - это statement и не может использоваться как часть expression. Но expression это часть assignment (которая справа после ':=').

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #4 : Сентябрь 24, 2012, 02:22:39 pm »
Ну почему же?

Или в 1C вообще не разлчаются значки присваивания и сравнения? Тогда все вообще запущенно :)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #5 : Сентябрь 24, 2012, 02:28:27 pm »
Ага. Один и тот же знак "="  :)

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

В "c" будет false

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #6 : Сентябрь 24, 2012, 02:35:11 pm »
Не обругал бы. Положил бы значение "ТекВидУслуги.Номенклатура" и в "Начисление.Номенклатура" и в "Начисление.ОбъектСети". В паскале/обероне как раз различается expression и statement. assignment - это statement и не может использоваться как часть expression. Но expression это часть assignment (которая справа после ':=').

Туго соображаю... Если различаются, то почему не обругал бы? В expression допустим знак ":="?
Блин, надо BNF смотреть.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #7 : Сентябрь 24, 2012, 02:54:30 pm »
Ага. Один и тот же знак "="  :)

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

В "c" будет false

рукалицо!

По моему, 1C, как язык, проектировали руководствуясь worst practices.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #8 : Сентябрь 24, 2012, 03:18:20 pm »
Ага. Один и тот же знак "="  :)

Тогда не обращай внимание на то, что я написал ;) Этому языку уже ничто не поможет :)

DIzer

  • Гость
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #9 : Сентябрь 24, 2012, 03:45:53 pm »
c = a = b;
нда.  говнецо ,ilovb - учитывая ваши слова о родственности этого языка шарпею , я бы подумал что это цепочное присваивание . Забавно, что на такое говнецо  подсаживают людей которые не имеют практики программирования (будто  у них других проблем нет)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #10 : Сентябрь 24, 2012, 04:06:35 pm »
c = a = b;
нда.  говнецо ,ilovb - учитывая ваши слова о родственности этого языка шарпею , я бы подумал что это цепочное присваивание . Забавно, что на такое говнецо  подсаживают людей которые не имеют практики программирования (будто  у них других проблем нет)
А оно еще и динамически типизированное! То есть если бы была статическая типизация, львиная дола ошибок была бы отловлена на этапе компиляции даже при таком синтаксисе.
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #11 : Сентябрь 24, 2012, 04:10:19 pm »
c = a = b;
нда.  говнецо ,ilovb - учитывая ваши слова о родственности этого языка шарпею , я бы подумал что это цепочное присваивание . Забавно, что на такое говнецо  подсаживают людей которые не имеют практики программирования (будто  у них других проблем нет)
А оно еще и динамически типизированное! То есть если бы была статическая типизация, львиная дола ошибок была бы отловлена на этапе компиляции даже при таком синтаксисе.
это то ладно, вы мне скажите как должно интерпретироваться:
с=b=a=d
или это ошибка?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #12 : Сентябрь 24, 2012, 04:15:28 pm »
c = a = b;
нда.  говнецо ,ilovb - учитывая ваши слова о родственности этого языка шарпею , я бы подумал что это цепочное присваивание . Забавно, что на такое говнецо  подсаживают людей которые не имеют практики программирования (будто  у них других проблем нет)
А оно еще и динамически типизированное! То есть если бы была статическая типизация, львиная дола ошибок была бы отловлена на этапе компиляции даже при таком синтаксисе.
это то ладно, вы мне скажите как должно интерпретироваться:
с=b=a=d
или это ошибка?
Зависит от конкретной грамматики. И семантики. Нужно смотреть на ассоциативность присваивания, на то возвращает оно lvalue или rvalue и так далее. Дьявол в деталях.
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #13 : Сентябрь 24, 2012, 04:28:47 pm »

Зависит от конкретной грамматики. И семантики. Нужно смотреть на ассоциативность присваивания, на то возвращает оно lvalue или rvalue и так далее. Дьявол в деталях.
  ;) подождем разъяснений эксперта -"одынэссника" - лично я считаю что в этом случае должна генерироваться ошибка... (выражение может содержать только один оператор присваивания)

DIzer

  • Гость
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #14 : Сентябрь 24, 2012, 04:32:25 pm »
хотя нет, даже в этом случае:
b=a=d
может трактоваться как  цепочное сравнение...
короче.. говнецо  с какой стороны не подходи..