Оператор RETURN

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
ShilakAV
Бывалый
Сообщения: 55
Зарегистрирован: 25 Декабрь 2005, 9:55
Откуда: Амурская область
Благодарил (а): 1 раз

Оператор RETURN

Сообщение ShilakAV »

Может кто объяснить чем отличается RETURN var от RETURN(var)?
Читаю хелп, ничего не понимаю ((
Dias2004
Посетитель
Сообщения: 29
Зарегистрирован: 31 Январь 2006, 15:02
Откуда: Россия, Москва

Сообщение Dias2004 »

А есть примеры кода, когда эти отличия проявляются?

Я попробовал - компилятор проглатывает оба варианта, и поведение функции не изменяется. Функция написана на template Source, возвращает переменную типа real, программа в целом собрана как один exe - модуль.
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Сообщение Admin »

по моему ничем не отличается ...
так же как и
self.var &= new(variable)
и
self.var &= new variable
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3133
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Сообщение Дед Пахом »

RETURN имеет только один вид:
RETURN [expression]
а [expression] может быть как со скобками, так и без ( к ретурну это уже не относится).
А теперь цитата из русского хелпа:
Выражение в круглых скобках – это выражение допустимое с точки зрения синтаксиса. Если в круглые скобки заключена переменная, то выражение разыменовывается значением этой переменной и преобразуется в один из базовых типов. Относительно использования скобок с RETURN, если функция имеет тип возвращаемой переменной, возвращаемая переменная использованныя в операторе RETURN не должна заключаться в круглые скобки.
Всё ясно? :lol:
С уважением, ДП
Аватара пользователя
try-catch
Бывалый
Сообщения: 62
Зарегистрирован: 03 Декабрь 2005, 13:02
Откуда: Russia

Сообщение try-catch »

Суть в том, что возвращаемое значение может быть или byRef или valueType. В первом случае передается только референс на переменную, но не значение самой переменной. Во втором случае - само значение.

Иначе говоря RETURN (Val), говорит компилятору о том что Val необходимо всегда приводить к значению, даже если это референс. Например, если Val это CLASS или INTERFACE, компилятор должен выдать ошибку.

Так ли это на самом деле не проверял...
Regards,
TC
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Сообщение Yufil »

try-catch писал(а):Суть в том, что возвращаемое значение может быть или byRef или valueType. В первом случае передается только референс на переменную, но не значение самой переменной. Во втором случае - само значение.

Иначе говоря RETURN (Val), говорит компилятору о том что Val необходимо всегда приводить к значению, даже если это референс. Например, если Val это CLASS или INTERFACE, компилятор должен выдать ошибку.

Так ли это на самом деле не проверял...
Именно так. Очень часто встречается в классах
S &CString

NewString procedure(String S),&CString
Local &CString
Code
Local &= New Cstring(Len(S)+1)
Local = S
Return Local

После вызова S &= NewString('Строка') в процедуре будет создана строка и ссылка присвоена S. Если написать Return(Local) - ссылка должна быть разыменована.
Аватара пользователя
ShilakAV
Бывалый
Сообщения: 55
Зарегистрирован: 25 Декабрь 2005, 9:55
Откуда: Амурская область
Благодарил (а): 1 раз

Сообщение ShilakAV »

Ну в общем ясно... спасибо всем! Надо бы "цитату из русского хелпа" соответствующим образом подправить, а то читаешь и ум ра разум заходит :idea:
Ответить