Автокликер Clickermann :: Форум

Основной раздел => Предложения => Topic started by: Сергей on October 19, 2012, 01:32:12 PM

Title: Пользовательские функции с возвращаемыми значениями
Post by: Сергей on October 19, 2012, 01:32:12 PM
Просто мастхев. Сейчас код можно разбить на части лишь подпрограммами, но они значений возвращать не могут. С помощью функций можно будет писать сторонние библиотеки расширяющие функционал, не внося изменения в саму реализацию языка.
Примерный синтаксис:
Code: [Select]
FUNC FACTORIAL($n)
   $i = 1
   $result = 1
   FOR($i, $i < ($n + 1))
      $result = $result * ($i - 1)
   END_CYC
   RETURN $result
END_FUNC

Несколько аргументов:
Code: [Select]
FUNC POW($value, $power)
   $i = 1
   $result = $value
   FOR($i, $i < $power)
      $result = $result * $value
   END_CYC
   RETURN $result
END_FUNC

Использование:
Code: [Select]
$value = FACTORIAL(7)
print($value)//5040

$value = POW(3, 3)
print($value)//27
Title: Re: Пользовательские функции с возвращаемыми значениями
Post by: Сергей on October 22, 2012, 01:42:05 AM
Ап.
Title: Re: Пользовательские функции с возвращаемыми значениями
Post by: Johnny on October 22, 2012, 04:58:41 AM
да хорошая тема хорошая. что апать, не жигули же продаешь.
для ее реализации надо посидеть подумать. в рамках текущего парсера с наскоку такое не прикрутить.
Title: Re: Пользовательские функции с входящими и возвращаемыми значениями
Post by: СлавьЯнИнъ on October 23, 2012, 12:38:11 AM
Такая возможность добавляет гибкости при написании программ.
Примером может служить Lua, в нём пользовательские функции с входящими и возвращаемыми значениями реализованы превосходно.

Здесь же этот метод я реализую через подпрограмму, которая, в итоге, присваивает значение собственной переменной. Перед проходом подпрограммы указываю переменную с "входящими" данными. После прохода обращаюсь к "возвращаемой" переменной, вставляю её в выражения.

Code: [Select]
// объявления
$varArgument1 = 0
$itogF1 = 0

// библиотека
sub ( Function1 )
if ( $varArgument1 = 2 )
 $itogF1 = rnd(1,9)
else
 $itogF1 = 0
end_if
end_sub

// исполнение
$varArgument1 = 2 // входящие данные
gosub ( Function1 ) // присвоение внутри функции
if ( $itogF1 > 0 ) // $itogF1 - возвращаемая переменная
***
Title: Re: Пользовательские функции с возвращаемыми значениями
Post by: Сергей on October 23, 2012, 04:32:35 AM
Вот и приходится использовать такой костыль. C луа сильно не знаком, но язык очень мощный, да.

Кстати идеалом скриптового языка для меня является Pawn, он максимально просто и логичен.
Статическая типизация, функциональная парадигма, однопоточность. Никаких тебе асинхронных вызовов, потоков, внезапных смен типов. Компилируемый в байткод, а значит достаточно быстрый.
Title: Re: Пользовательские функции с возвращаемыми значениями
Post by: СлавьЯнИнъ on October 23, 2012, 02:56:31 PM
Ознакомлюсь по ближе с Пешкой, благодаря твоей рекомендации )
Title: Re: Пользовательские функции с возвращаемыми значениями
Post by: MaxP on September 04, 2014, 04:25:51 PM
+1
Title: Re: Пользовательские функции с возвращаемыми значениями
Post by: ezfalcon on January 29, 2015, 11:00:18 PM
предлагаю добавить возможность процедурам писать в $_return1, #_return2
Title: Re: Пользовательские функции с возвращаемыми значениями
Post by: Johnny on January 30, 2015, 12:48:15 AM
ну а чем тебе не нравится возможность писать в произвольную переменную из процедуры собственно?
Title: Re: Пользовательские функции с возвращаемыми значениями
Post by: ezfalcon on January 30, 2015, 01:52:54 AM
тоже самое в принципе, разве что, более фомализировано получится и реализация такой фичи в интерпретаторе по идее не должна быть накладной