Что нового

Объявление глобальных переменных в отдельной функции

Vlasssov

Осваивающий
Сообщения
430
Репутация
25
Глупый, конечно, вопрос но все же...
Вроде в помощи смотрел примет и пробовал глобальные переменные объявлять внутри функции можно. Что тогда компилятор предупреждения выдает? Можно это где-то отключить?
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
430
Репутация
25
Зачем???

Код:
ppp()
ppp1()


func ppp()
Global $a="Dfcz"

EndFunc

func ppp1()
MsgBox(0,"sss",$a)
EndFunc



Код:
>Running AU3Check (1.54.19.0)  from:C:\Program Files\AutoIt3
C:\proekt\Вконтакте\ПроверкаГлобальной переменной.au3(11,18) : WARNING: $a: possibly used before declaration.
MsgBox(0,"sss",$a)
~~~~~~~~~~~~~~~~~^
C:\proekt\Вконтакте\ПроверкаГлобальной переменной.au3(6,17) : WARNING: $a: declared global in function only. Prefer top of file.
Global $a="Dfcz"
~~~~~~~~~~~~~~~~^
C:\proekt\Вконтакте\ПроверкаГлобальной переменной.au3 - 0 error(s), 2 warning(s)
->20:31:25 AU3Check ended.rc:1
>Running:(3.3.6.1):C:\Program Files\AutoIt3\autoit3.exe "C:\proekt\Вконтакте\ПроверкаГлобальной переменной.au3"    
+>20:31:28 AutoIT3.exe ended.rc:0
>Exit code: 0    Time: 4.775
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,659
Репутация
2,457
Vlasssov [?]
А зачем глобально объявлять переменные внутри функций если это можно сделать в начале скрипта?

Обычно это делается так:

Код:
_MyFunc()
MsgBox(64, 'Title', Eval("MyVar"))

Func _MyFunc()
	Assign("MyVar", "Data", 2)
EndFunc
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
430
Репутация
25
CreatoR сказал(а):
А зачем глобально объявлять переменные внутри функций если это можно сделать в начале скрипта?

Обычно это делается так:

Код:
_MyFunc()
MsgBox(64, 'Title', Eval("MyVar"))

Func _MyFunc()
	Assign("MyVar", "Data", 2)
EndFunc

Зачем? Переменных ОЧЕНЬ много. Глаза мозолят.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
По моим наблюдениям так работает:
Код:
ppp()
ppp1()
func ppp()
Global $a="Dfcz"
EndFunc

func ppp1()
MsgBox(0,"sss",$a)
EndFunc


а так - нет :
Код:
ppp1()
ppp()

func ppp()
Global $a="Dfcz"

EndFunc

func ppp1()
MsgBox(0,"sss",$a)
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,659
Репутация
2,457

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Vlasssov сказал(а):

Код:
#Region Мои переменные 1

Global $Var1 = 1
Global $Var2 = 2
Global $Var3 = 3

#EndRegion

#Region Мои переменные 2

Global $Var4 = 4
Global $Var5 = 5
Global $Var6 = 6

#EndRegion


Vlasssov, вот примерная структура AutoIt скрипта, старайся придерживаться ее.

Vlasssov сказал(а):
Переменных ОЧЕНЬ много. Глаза мозолят.

Если глобальных переменных ОЧЕНЬ много, то значит твой код неправильно организован.
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
430
Репутация
25
Yashied сказал(а):
Если глобальных переменных ОЧЕНЬ много, то значит твой код неправильно организован.
То есть если у меня есть
Три пути к директориям
Пять стандартных тестовых фрагмента адресов
Я их все в качестве параметров передавать должен?
И каждая новая функция, должна содержать пятнадцать параметров.
Это если только цель - создать оптимизированный код и куча времени...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Vlasssov
Если у меня в скрипте много разных переменных, массивов, констант, и т.д. и т.п., я их выношу в отдельный файл, который подключаю к скрипту через #Include. Как пример, посмотрите как у Yashied`a в последней WinAPIEx_3.1 сделано.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
WinAPIEx - это UDF библиотека. Естественно, в нормальной программе столько переменных и констант быть не должно.

;D
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Yashied [?]
Естественно, в нормальной программе столько переменных и констант быть не должно.
Если у меня в скрипте больше 200-250 строк, то у меня рука начинает болеть от постоянного двигания колесика мыши и я убираю переменные, функции и еще все, что можно во вспомогательный файл. Потом можно их объединить, или не объединять...:smile:
:IL_AutoIt_1:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
madmasles сказал(а):
Если у меня в скрипте больше 200-250 строк, то у меня рука начинает болеть от постоянного двигания колесика мыши и я убираю переменные, функции и еще все, что можно во вспомогательный файл.

Да, можно и так. Но я предпочитаю регионы:

Код:
#Region Переменные

...

#EndRegion Переменные
 
Автор
Vlasssov

Vlasssov

Осваивающий
Сообщения
430
Репутация
25
madmasles сказал(а):
Vlasssov
Если у меня в скрипте много разных переменных, массивов, констант, и т.д. и т.п., я их выношу в отдельный файл, который подключаю к скрипту через #Include. Как пример, посмотрите как у Yashied`a в последней WinAPIEx_3.1 сделано.
Да это понятно, но неудобно... Мне не удобно...


Добавлено:
Сообщение автоматически объединено:

Yashied сказал(а):
WinAPIEx - это UDF библиотека. Естественно, в нормальной программе столько переменных и констант быть не должно.

;D
Это почему? Смортря что программа делает. При парсинге много переменных.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Верх