Skip to content

Instantly share code, notes, and snippets.

@sameoldmadness
Last active March 25, 2016 10:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sameoldmadness/36def739622c58748d71 to your computer and use it in GitHub Desktop.
Save sameoldmadness/36def739622c58748d71 to your computer and use it in GitHub Desktop.
fp
@ECHO OFF
REM Say hello
ECHO Hello %1
@echo off
echo Calling a function ...
goto:greet
echo ... and returning back
:greet
echo Hello, Roman!
:compose :: (xs, fns, *result)
setlocal EnableDelayedExpansion
set fns=%~2
for %%x in (%~1) do (
set subresult=%%x
for %%y in ("%fns:,=" "%") do (
call:%%~y !subresult! subresult
)
set result=!result!,!subresult!
)
endlocal & set %3=%result:~1%
goto:eof

Привет всем.

Меня зовут Роман Парадеев, а это доклад о том, как писать консольные скрипты под Винду.

Когда я готовился к докладу и думал, как бы получше связать эти три темы - фронтенд, функциональное программирование и .bat-файлы, я наткнулся на замечательную цитату: "Так называемые <парадигмы> языков программирования - это унылое и вымирающее наследие уходящей эпохи".

В статье "Обучение языкам программирования в пост-линнейскую эпоху", (Карл Линней - это такой парень из восемнадцатого века, разработавший классификацию растений на основе их половых признаков. Но вернёмся к теме.), автор, профессор университета, замечает, что языки программирования не нужно делить на классам (функциональный, императивный, логический). Вместо этого он предлагает рассматривать язык как совокупность возможностей, которые предоставляет этот язык.

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

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

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

Однако, не всем языкам программирования повезло обладать такой функциональностью. А нам, разработчикам, не всегда удаётся писать на то языке, что нам нравится. Зачастую выбор ограничен требованиями извне: ограничениями платформы, особенностями задачи или желанием заказчика.

Сегодня мы возмём достаточно скромный в плане возможностей скриптовый язык и самостоятельно, шаг за шагом, подготовим инструментарий, позволяющий писать код в функциональном стиле.

@igorlukanin
Copy link

Мне по-прежнему непонятно, почему ты не реагируешь на это:

Дальше ты сразу переходишь к batch-у. Хотя потом будут и HOF, и PA, и функциональные примитивы (FE/M/R). Скажи сразу, что ты ожидаешь от языка их наличия.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment