Skip to content

Instantly share code, notes, and snippets.

@sameoldmadness
Last active March 25, 2016 10:41
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
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

Придирки

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

Звучит слабенько. Даже если ты просто решил рассказать о несвязанной фигне, незачем говорить народу об этом.

Так называемые <парадигмы> языков программирования - это унылое и вымирающее наследие уходящей эпохи


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

Тем временем, на слайдах нарисована лямбда, то есть анонимная функция. Но анонимная функция — не обязательно функция первого порядка (то есть такая функция. которая может принимать другие функции в качестве аргументов). Так, например, в Java 8 есть лямбды, но нет функций первого порядка. Вот, почитай первые [несколько абзацев](http://kotlinlang.org/docs/reference/lambdas.html), чтобы разобраться. Рекомендую уточнить терминологию.

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

Не хочешь дать прямые ссылки на `g`? Сравнение loc-ов batch/bash будет устно?
### Итог

Контент мне нравится.

Надо прогнать устно, чтобы последить за ритмом доклада.

И надо добавить шуток-прибауток, сейчас всё очень академично. Подумаю над этим.

@igorlukanin
Copy link

В твиттер ты больше не постишь ссылочки и его пиарить не желаешь?

@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