Что нового

Как изменить значение переменной в функции?

magaz41

Новичок
Сообщения
2
Репутация
0
Всем здравствуйте. Пытаюсь разобраться с азами программирования. Загвоздка с переменными в функциях. Как мне выполнить функцию и вернуть из нее измененную переменную?

Код:
Global $vhod = 0 ; Объявил переменную
MsgBox(0, "Объявил переменную", $vhod) ; Окно проверки переменной

ochered($vhod) ; Вызываю функцию, которая должна вернуть измененную переменную

MsgBox(0, "Вызвал после действия функции", $vhod) ; Здесь должна быть измененная функция!

Func ochered($vhod) ; Функция, которая должна изменить переменную
     MsgBox(0, "Вызвал внутри функции до присвоения", $vhod) ; Окно проверки переменной в функции	 
	 
	 $vhod = 5 ; Мееняем значение переменной
	 MsgBox(0, "Вызвал внутри функции после присвоения", $vhod) ; Окно проверки измененной переменной
	
	Return $vhod ; Пытаюсь вернуть значение за пределы функции

EndFunc


Почему после выполнения функции, в которой переменная $vhod = 5 она за пределами функции снова равняется 0? Как это решается? Заранее спасибо.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Код:
Global $vhod = 0 ; Объявил переменную
MsgBox(0, "Объявил переменную", $vhod) ; Окно проверки переменной

$a = ochered($vhod) ; Вызываю функцию, которая должна вернуть измененную переменную

MsgBox(0, "Вызвал после действия функции", $a) ; Здесь должна быть измененная функция!

Func ochered($vhod) ; Функция, которая должна изменить переменную
     MsgBox(0, "Вызвал внутри функции до присвоения", $vhod) ; Окно проверки переменной в функции

     $vhod = 5 ; Мееняем значение переменной
     MsgBox(0, "Вызвал внутри функции после присвоения", $vhod) ; Окно проверки измененной переменной

    Return $vhod ; Пытаюсь вернуть значение за пределы функции

EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
magaz41,
Например, так можно.
Код:
Global $iNum = 5

For $i = 1 To 10
	_NewNum($iNum)
	ConsoleWrite('Old: ' & @extended & '; New: ' & $iNum & @LF)
Next

Func _NewNum(ByRef $i_Num)
	Local $i_Old = $i_Num
	$i_Num = Random(1, 100, 1)
	Return SetExtended($i_Old)
EndFunc   ;==>_NewNum
Или так.
Код:
Global $iNum = 5, $iOldNum

For $i = 1 To 10
	$iOldNum = _NewNum($iNum)
	ConsoleWrite('Old: ' & $iOldNum & '; New: ' & $iNum & @LF)
Next

Func _NewNum(ByRef $i_Num)
	Local $i_Old = $i_Num
	$i_Num = Random(1, 100, 1)
	Return $i_Old
EndFunc   ;==>_NewNum
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
magaz41
Глобальные переменные на то и глобальные, чтобы они были доступны внутри любой функции. То есть их не надо передавать как параметр и тогда возвращать их не потребуется.
Как только глобальная переменная передаётся как параметр то создаётся локальная копия этой переменной, с тем же именем и значением. Это делается если вы не хотите изменять глобальную переменную по завершении функции. А если всё таки глобальная переменная требует изменения, то ничего придумывать не надо, просто пользоваться ей внутри функции как уже существующей, без передачи её параметром.
 
Верх