Что нового

Что из себя представляет Func

lexaSF

Новичок
Сообщения
182
Репутация
3
Расскжате пожалуйста, что из себя представляет Func, насколько я понял с помошью нее можно создавать несколько команд которые как бы скрыты в названии функции например:
Код:
Func _MyFunc()
Msgbox(0,'hello','hello world')
Msgbox(0,'hello','hello world 2')
Msgbox(0,'hello','hello world 3')
Msgbox(0,'hello','hello world 4')
EndFunc

Получается у меня _MyFunc будет равно 5 командам?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
965
Для того, что бы ни писать в программе каждый раз одно и тоже (однотипные задачи), можно определить функцию.
К примеру, у вас есть задача, в процессе которой, вы, периодически (на разных стадиях её выполнения), считываете ссылки на страницы сайта. Для этих целей можно написать функцию, которая на входе, будет получать адрес страницы, а на выходе давать вам массив ссылок.
Теперь вам ненужно будет писать каждый раз одинаковые куски кода, а достаточно будет в нужных местах программы обращаться к вашей функции.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Функция - это список действий, которые будут выполняться в тот момент, когда эта функция будет вызвана.

Если в программе некоторые операции повторяются, то имеет смысл оформлять их в функцию. Например, вместо того чтобы писать:

Код:
Msgbox(0,'hello','hello world 1')
Msgbox(0,'hello','hello world 2')
Msgbox(0,'hello','hello world 3')
Msgbox(0,'hello','hello world 4')
Msgbox(0,'hello','hello world 5')
Msgbox(0,'hello','hello world 6')
Msgbox(0,'hello','hello world 7')
Msgbox(0,'hello','hello world 8')
Msgbox(0,'hello','hello world 9')
Msgbox(0,'hello','hello world 10')



достаточно написать:

Код:
For $x = 1 to 10
	Hello($x)
Next

Func Hello($x)
	Msgbox(0,'hello','hello world ' & $x)
EndFunc


Числа от 1 до 10 подаются в функцию Hello, которая поставляет их в сообщения.
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
После постов Garrett'а и Suppir добавить нечего. Могу лишь провести образную аналогию. Когда Вы идете в магазин и покупаете продукты, то Вы также покупаете и пакет (или приносите с собой) - в который эти продукты и складываете. Зачем? Элементарно, не удобно нести два килограмма картошки в руках. Таким образом Func EndFunc - наш "пакет". А код, находящийся в нем - "картошка". Что бы быстро переместить всю "картошку" с одного места на другое нужен "пакет", ведь согласитесь, неудобно тоскать два килограмма картошки по-штучно. А уж как картошка доставленна, извлечь картошку из пакета сущий пустяк - нужно просто назвать пакет по имени. :smile:
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
Ну например мне надо сделать
Код:
Iniread(@scriptDir,'','','')
Iniread(@scriptDir,'','','')
Iniread(@scriptDir,'','','')
MSgbox(0,'11','text')
Inputbox()

Это будет выглядеть так
Код:
Func _MyTest
Iniread(@scriptDir,'','','')
Iniread(@scriptDir,'','','')
Iniread(@scriptDir,'','','')
MSgbox(0,'11','text')
Inputbox()
EndFunc

После чегодля выполнения этих команд надо вызвать просто _MyTest ?
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
lexaSF [?]
После чегодля выполнения этих команд надо вызвать просто _MyTest ?

Имя Вашей функции должно обязательно в конце содержать скобки (даже если в них ни чего нет). И при вызове _MyTest() скобки обязательны!
Код:
Func _MyTest()
Iniread(@scriptDir,'','','')
Iniread(@scriptDir,'','','')
Iniread(@scriptDir,'','','')
MSgbox(0,'11','text')
Inputbox()
EndFunc
 

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Рас уж такой разговор... AutoIt поддерживает полиморфизм функций? Или всё в одной писать придется.
И что значит ByRef при создании функции?
 

SyDr

Сидра
Сообщения
651
Репутация
158
Извиняюсь, но... как можно представить полиморфизм в AutoIt?

Ключевое слово Const опционально и указывает, что значение этого параметра не изменяется во время выполнения функции. Константа может быть передана в функцию только при использовании параметра Const.

Ключевое слово ByRef опционально и указывает, что параметр должен быть интерпретирован, как ссылка на оригинальный обьект. По умолчанию, значение параметра копируется в новую переменную. ByRef обычно используется, когда функция работает с большими объёмами данных, поскольку копирование большого числа данных может занять много времени. Обратите внимание, что только объявленные переменные могут быть переданы в качестве параметра ByRef; безымянные временные переменные, такие, как значения, возвращённые функциями, также могут быть переданы в качестве параметра ByRef. Заданную явно константу ("Тест", 15, True и т.д.) нельзя передать в качестве параметра ByRef.

При одновременном использовании ByRef и Const нет разницы, в каком порядке их записывать.

Массивы также могут быть переданы в функции. Для этого в качестве передаваемого параметра следует указать имя массива (без всяких скобок). Для передачи массива в пользовательские функции рекомендуется использовать ключевое слово ByRef, чтобы избежать лишнего копирования всего массива.

Опциональные параметры обьявляются присваиванием им значения. Значение может быть глобальной переменной, макросом или явно заданной константой. В описании функции опциональные параметры всегда следуют после всех остальных параметров. Все параметры, следующие после первого опционального параметра также должны быть опциональны. Внутри функции, узнать число переданных параметров можно узнать, используя макрос @NUMPARAMS (см. пример 2).

Ключевое слово Return может быть использовано для выхода из функции. В отличие от встроенных функций, пользовательские функции возвращают 0, если другое возвращаемое значение не задано.

Обратите внимание, что внутри функции нельзя объявить другую функцию.
 

Yashied

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

lexaSF

Новичок
Сообщения
182
Репутация
3
Фозник еще 1 вопрос как вызвать функцию? просто написать _MyFunc()?
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
lexaSF [?]
Фозник еще 1 вопрос как вызвать функцию? просто написать _MyFunc()?

Да. Если Ваша функция имеет такое имя. В противном случае пишем то что после Func (а то что после Func придумайте сами).
Код:
Func _NeFunc()
     ;Код.
EndFunc
 

serzzz

Новичок
Сообщения
18
Репутация
0
А что пишут в скобкаx?

Код:
Func _aaa()
;Koд
EndFunc
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,605
Репутация
941
Различные параметры который ты хочешь присвоить своей функции.
если обратишься в функцию так:
Код:
test1(1,2)
то увидишь месседж бокс в котором тайтл будет 1 а текст 2.

если обратишься просто
Код:
test1()
то увидишь месседж бокс в котором тайтл будет "default title", а текст "default text"


Код:
Func Test1($title = "default title", $text="default text")
	MsgBox(0,$title, $text)
EndFunc
 

sss

Продвинутый
Сообщения
332
Репутация
96
В скобках пишут параметры, которые затем можно использовать в теле функции. Параметры записываются как переменные, в которые пишутся значения при вызове этой функции. Gри вызове функции параметра надо указывать, иначе - ошибка. Параметр можно сделать опциональным (необязательным), если в объявлении функции указать после параметра через равно значение по умолчанию. В примере первый параметр - обязательный, остальные - опциональные, при этом второй меняется на свой при вызове, а третий - остается по умолчанию, так как я его не указал.

Пример:
Код:
Func aaa($param1,$param2='default',$param3=1)
	MsgBox(0,'','Первый параметр - ' & $param1)
	MsgBox(0,'','Второй параметр - ' & $param2)
	MsgBox(0,'','Третий параметр - ' & $param3)
EndFunc
aaa(15,'my')


Второй пример (чтобы показать, как можно их использовать, сам код не рационален :smile:):
Код:
Func aaa($source,$destination)
	FileCopy($source,$destination)
	if @error=1 then 
		Return -1
	Else
		Return 1
	EndIf	
EndFunc
$var=aaa('C:\WINDOWS\system32\calc.exe','C:\calc.exe')
MsgBox(0,'','Функция ааа вернула значение, равное ' & $var)

Здесь я использовал в теле функции команду Return - она указывает, какое значение вернет функция. здесь происходит копирование из $source в $dest, и если нет ошибки, функция возвращает 1. Если ошибка есть - функция возвращает -1.
OffTopic:
P.S: Чуть подробнее, чем у Belfigor, да и набирал в одно время, не стал стирать
 
Верх