Author Topic: Пользовательские функции с возвращаемыми значениями  (Read 8699 times)

0 Members and 1 Guest are viewing this topic.

Сергей

  • Активный участник
  • ***
  • Posts: 159
    • View Profile
Просто мастхев. Сейчас код можно разбить на части лишь подпрограммами, но они значений возвращать не могут. С помощью функций можно будет писать сторонние библиотеки расширяющие функционал, не внося изменения в саму реализацию языка.
Примерный синтаксис:
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
Отсутствую.

Сергей

  • Активный участник
  • ***
  • Posts: 159
    • View Profile
Отсутствую.

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
да хорошая тема хорошая. что апать, не жигули же продаешь.
для ее реализации надо посидеть подумать. в рамках текущего парсера с наскоку такое не прикрутить.

СлавьЯнИнъ

  • Активный участник
  • ***
  • Posts: 179
    • View Profile
Такая возможность добавляет гибкости при написании программ.
Примером может служить 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 - возвращаемая переменная
***
добрый смех равняет всех

Сергей

  • Активный участник
  • ***
  • Posts: 159
    • View Profile
Вот и приходится использовать такой костыль. C луа сильно не знаком, но язык очень мощный, да.

Кстати идеалом скриптового языка для меня является Pawn, он максимально просто и логичен.
Статическая типизация, функциональная парадигма, однопоточность. Никаких тебе асинхронных вызовов, потоков, внезапных смен типов. Компилируемый в байткод, а значит достаточно быстрый.
Отсутствую.

СлавьЯнИнъ

  • Активный участник
  • ***
  • Posts: 179
    • View Profile
Ознакомлюсь по ближе с Пешкой, благодаря твоей рекомендации )
добрый смех равняет всех

MaxP

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile

ezfalcon

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
предлагаю добавить возможность процедурам писать в $_return1, #_return2

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
ну а чем тебе не нравится возможность писать в произвольную переменную из процедуры собственно?

ezfalcon

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
тоже самое в принципе, разве что, более фомализировано получится и реализация такой фичи в интерпретаторе по идее не должна быть накладной
« Last Edit: January 30, 2015, 02:07:44 AM by ezfalcon »