Определение функции func
Функция состоит из двух частей: описание и тело функции. Описание функции начинается с ключевого слова func, затем идут возвращаемый тип, имя функции, атрибуты функции в угловых скобках и описание параметров функции в круглых скобках. Обязательным является только имя функции. Если не указано имя возвращаемого типа, то функция ничего не возвращает.
Тело функции или метода - это все, что заключено в фигурные скобки идущие после описания функции. Тело функции может содержать подфункции, выражения, конструкции и описания локальных переменных.
func uint sum( uint left right )
{
return left + right
}
Атрибуты
entry
Этот атрибут указывается у функций, которые должны быть запущены автоматически до вызова главной функции.
main
Этот атрибут указывается у главной функции с которой начнется выполнение программы. Если функций с таким атрибутом несколько, то вызовется последняя функция с атрибутом main. Главная функция запускается после вызова всех entry функций. Функции имеющие атрибут main или entry не должны иметь параметров.
func uint myprog<main>
{
print("Hello, World!")
getch()
}
result
Gentee не позволяет возвращать структурный тип из функции, если он принадлежит (описан внутри ) этой функции. Этот атрибут позволяет обойти это ограничение. Подробнее о его использовании написано на странице Возвращение переменных.
alias
Если вам необходимо где-то получить и передать идентификатор функции, метода или оператора, то вы можете воспользоваться этим атрибутом. Так как функции и методы могут иметь одни и те же имена, но разные параметры, то нахождение необходимой функции может привести к некоторым трудностям. Вы можете присвоить атрибуту alias имя и использовать этой имя в качестве переменной-идентификатора функции.
func uint myfunc_verylongname<alias = myfunc>( uint param )
{
return param * 10
}
func str mystring<result>
{
result = "Result string"
}
func main<main>
{
print( "Val= \( myfunc->func( 10 ))")
print( mystring() )
getch()
}
Параметры
Параметры функции описываются такой последовательностью: имя типа, имена параметров с данным типом, далее запятая или пробел и опять имя типа и параметры. Если функция не имеет параметров, то в описании указываются пустые скобки или скобки вообще не ставятся. Можно определять функции с одним и тем же именем, но с разными параметрами. В этом случае при вызове функции компилятор по типам указанных параметров определит подходящую функцию.
При описании параметров можно использовать квадратные скобки для указания размерности и оператор of. При описании таких параметров не нужно указывать в квадратных скобках конкретное количество элементов.
func uint myfunc( uint a b c, byte d, str st1 st2, arr marr[,] of uint )
{
...
}
Обращение к параметрам ничем не отличается от обращения к локальным переменным. Все числовые типы передаются в функцию или метод по значению. То есть вы можете без всяких последствий изменять значение параметра. Все структурные типы передаются по ссылке. В этом случае, все сделанные вами изменения будут происходить с оригинальной переменной, которую вы передали в качестве параметра.
func str myadd( str left )
{
left += " OK!"
return left
}
func main<main>
{
str val
myadd( val = "Process" )
print( val )
}