Страница 1 из 1
					
				Оператор RETURN
				Добавлено: 15 Сентябрь 2006, 6:17
				 ShilakAV
				Может кто объяснить чем отличается RETURN var от RETURN(var)?
Читаю хелп, ничего не понимаю ((
			 
			
					
				
				Добавлено: 15 Сентябрь 2006, 9:02
				 Dias2004
				А есть примеры кода, когда эти отличия проявляются?
Я попробовал - компилятор проглатывает оба варианта, и поведение функции не изменяется. Функция написана на template Source, возвращает переменную типа real, программа в целом собрана как один exe - модуль.
			 
			
					
				
				Добавлено: 15 Сентябрь 2006, 9:03
				 Admin
				по моему ничем не отличается ...
так же как и 
self.var &= new(variable)
и
self.var &= new variable
			 
			
					
				
				Добавлено: 15 Сентябрь 2006, 9:17
				 Дед Пахом
				RETURN имеет только один вид:
RETURN [expression] 
а  [expression] может быть как со скобками, так и без ( к ретурну это уже не относится).
А теперь цитата из русского хелпа:
Выражение в круглых скобках – это выражение допустимое с точки зрения синтаксиса. Если в круглые скобки заключена переменная, то выражение разыменовывается значением этой переменной  и преобразуется в один из базовых типов. Относительно использования скобок с RETURN, если функция имеет тип возвращаемой переменной, возвращаемая переменная использованныя в операторе RETURN не должна заключаться  в круглые скобки.
Всё ясно? 

 
			 
			
					
				
				Добавлено: 15 Сентябрь 2006, 10:38
				 try-catch
				Суть в том, что возвращаемое значение может быть или byRef или valueType. В первом случае передается только референс на переменную, но не значение самой переменной. Во втором случае - само значение.
Иначе говоря  RETURN (Val), говорит компилятору о том что Val необходимо всегда приводить к значению, даже если это референс. Например, если Val это CLASS или INTERFACE, компилятор должен выдать ошибку.
Так ли это на самом деле не проверял...
			 
			
					
				
				Добавлено: 15 Сентябрь 2006, 11:09
				 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) - ссылка должна быть разыменована.
 
			 
			
					
				
				Добавлено: 16 Сентябрь 2006, 7:42
				 ShilakAV
				Ну в общем ясно... спасибо всем! Надо бы "цитату из русского хелпа" соответствующим образом подправить, а то читаешь и ум ра разум заходит  
