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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #15 : Сентябрь 24, 2012, 04:34:30 pm »
INT x, y;
x :=
y := 5;
print ((x, y))
---------- Algol-68 G ----------
         +5         +5
Казалось бы, причём тут "=" vs ":=" о_О
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #16 : Сентябрь 24, 2012, 04:37:52 pm »
 :) не понял? к чему это вы..- в вашем примере обычное цепочное присваивание...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #17 : Сентябрь 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

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #18 : Сентябрь 24, 2012, 06:00:49 pm »
INT x, y;
x :=
y := 5;
print ((x, y))
---------- Algol-68 G ----------
         +5         +5
Казалось бы, причём тут "=" vs ":=" о_О

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

Вот PABC матерится.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #19 : Сентябрь 24, 2012, 06:04:58 pm »
c = a = b;
нда.  говнецо ,ilovb - учитывая ваши слова о родственности этого языка шарпею...

Не не не. Я говорил про родственность VB  :D

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #20 : Сентябрь 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

DIzer

  • Гость
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #21 : Сентябрь 25, 2012, 06:57:15 am »

Вот PABC матерится.
и правильно делает - вот если бы он назывался шРАBСом..

DIzer

  • Гость
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #22 : Сентябрь 25, 2012, 07:09:36 am »

"c=" - присваивание
"b=a=d" - выражение
Слева направо: ((b=a) = d)---> результат типа булево
......
Понятно - цепочные присваивания запрещены, цепочные сравнения разрешены(при совпадении обозначений операторов равенства и присваивания)- говно, короче... бедные 1С ники... и чего там AlexUs возмущался... --какое нахрен  изучение MSsql  - и без этого проблем хватает  :) А может это специально создатели 1С ввели , ну чтобы внимание у программистов 1С не рассредотачивалось на всякие побочные технологии?  ;D

DIzer

  • Гость
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #23 : Сентябрь 25, 2012, 07:16:37 am »
надо , это... предложить использовать 1с никам PABC вместо их чуда -языка  :)

DIzer

  • Гость
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #24 : Сентябрь 25, 2012, 07:19:51 am »
хотя не.. не пойдет вследствие отсутствия  русских идентификаторов и служебных слов ...PABC будет слишком сложен для основной массы 1С -программистов  коих уже состав и пригоршня вагонов расплодилось  :D

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #25 : Сентябрь 25, 2012, 11:52:41 am »
Это ещё не все сюрпризы этого недо-языка. Например, если где-то объявлена глобальная переменная Х, в в подпрограмме - локальная Х, то все обращения к Х касаются именно глобальной переменной.

DIzer

  • Гость
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #26 : Сентябрь 25, 2012, 12:36:43 pm »
Это ещё не все сюрпризы этого недо-языка. Например, если где-то объявлена глобальная переменная Х, в в подпрограмме - локальная Х, то все обращения к Х касаются именно глобальной переменной.
Ой ля -ля а вот это уже  очень херово - по сути дела  речь идет о том, что нельзя нормально провести декомпозицию сложной задачи в несколько  простых.... вообще говоря, я встречал подобные казусы в "подельных" скриптовых языках - не предназначенных для написания чего -то законченного (играющих роль клея для связывания готовых самостоятельных блоков)...

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: Я попался на синтаксисе "=" vs ":="
« Ответ #27 : Сентябрь 25, 2012, 03:39:37 pm »
IDE там интеллектуальная. Я сперва недоумевал, как в динамическом языке по нажатию "." отображаются методы и свойства объекта в текущем контексте. Оказалось всё банально.

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

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

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