что значит foo в программировании

Почему во многих примерах функции называют foo?

2 ответа 2

What’s Foo? My uncle found this word engraved on the bottom of a jade statue in San Francisco’s China town. The word Foo means Good-Luck.

Что такое Foo? Мой дядя нашел это слово выгравированным на дне нефритовой статуэтки в «China town» в Сан Франциско. И обозначает (переводится) оно «удача» или «удачи!».

Также в популяризации данных слов сыграла роль военная аббревиатура FUBAR («Fucked Up Beyond All Repair», что можно перевести как «ремонту не подлежит», что относилось к военной технике, либо «Fucked Up Beyond All Recognition» — речь шла о людских жертвах, которые невозможно опознать), которая появилась во время второй мировой войны и по слухам была придумана неким рядовым, которого «задолбали» всякие военные аббревиатуры.

Технари из TRMC клуба в MIT использовали слово «FOO» для обозначения ситуаций когда была необходима аварийная остановка системы. В случае, когда кто-нибудь нажимал один из аварийных выключателей на системном табло вместо времени появлялась надпись «FOO» и поэтому эти выключатели назвали «Foo switches». Позже в этом клубе стали использовать кнопки с подписями «FOO» и «BAR» (уже как дань традиции), и использовались они в самых разных ситуациях.

Впоследствии это стало использоваться в IT мире как «placeholders», то есть для названия переменных/классов в тех случаях, когда это не важно (например в примерах) или когда на ум ничего лучшего не приходит.

Источник

Какова история использования «foo» и «bar» в примерах исходного кода?

Почему многие примеры кода, особенно учебники, часто используют имена «Foo» и «Bar»? Это почти стандарт.

14 ответов

Обновление: в Википедии есть список соответствующих аббревиатур, который включает в себя некоторые оригинальные WWII, перечисленные Аткинсоном.

Любой программист поймет мотивацию использования foo и bar для обозначения переменных. Они, конечно, были частью культуры C /UNIX с самого начала, и, как указывает @Walter Mitty, она предшествовала.

Обновление (10/5/2009): Вот описание Аткинсона:

Я думаю, что это фонетическое произнесение фубара.

Название, используемое в примерах, и понимаемое как стоящее за любой предмет, обсуждаемый, или любой случайный член класса вещей, обсуждаемых. Слово foo является каноническим примером. Чтобы избежать путаницы, хакеры никогда (ну, вряд ли когда-либо) используют «foo» или другие слова как постоянные имена для чего-либо. В именах файлов существует общее правило: любое имя файла, начинающееся с имени метасинтетической переменной, является файлом с царапинами, который может быть удален в любое время.

В какой-то мере список предпочтительных метасинтетических переменных является культурной подписью. Они встречаются как в серии (используются для связанных групп переменных или объектов), так и в виде одиночек. Вот несколько общих подписей:

bazola, ztesch:
Стэнфорд (с середины 70-х годов).

foo, bar, thud, grunt:
Эта серия была популярна в КМУ. Другие связанные с CMU переменные включают gorp.

foo, bar, fum:
Эта серия, как сообщается, распространена в XEROX PARC.

fred, barney:
См. Запись для fred. Это, как правило, британцы.

corge, grault, flarp:
Популярный в Rutgers University и среди хакеров GOSMACS.

zxc, spqr, wombat:
Кембриджский университет (Англия).

shme
Berkeley, GeoWorks, Ingres. Произнесено /shme /с коротким /e /.

Snork
Университет Брауна, начало 1970-х годов.

foo, bar, zot
Хельсинкский технологический университет, Финляндия.

blarg, wibble
Новая Зеландия.

toto, titi, tata, tutu
Франция.

пиппо, плуто, бумажно-белое

Италия. Pippo /pee’po /и Paperino /pa-per-ee’-no /являются итальянскими именами для Гуфи и Дональда Дака.

aap, noot, mies
Нидерланды. Это первые слова, которые ребенок учил писать на голландской орфографической доске.

Из всего этого только «foo» и «bar» универсальны (и почти так). Соединения foobar и `foobaz ‘также пользуются очень широкой валютой.

Некоторые термины жаргона также используются как метасинтетические имена; barf и mumble, например. См. Также Commonwealth Hackish для обсуждения многочисленных метасинтатических переменных, найденных в Великобритании и Содружестве.

В статье также приводятся общие примеры таких переменных в разных языках программирования:

Python

рубин

В следующем примере baz, foo и bar являются метасинтактическими переменные и строки, начинающиеся с #, являются комментариями.

Вот ответ Википедии:

Foo вошел в английский язык как неологизм и рассматривается многие из них являются каноническим примером метасинтатическая переменная. [цитата] необходимо] Он широко используется в примеры компьютерного программирования (иногда выражается как «на один раз только «) и псевдокодом. Эрик С. Раймонд назвал его «важным хакеризмом», наряду с kludge и cruft. [1]

«Foo» и «bar», поскольку метасинтатические переменные были популяризированы MIT и DEC, первые ссылки находятся в работе над LISP и PDP-1 и Project MAC с 1964 года.

Многие из этих людей были в MIT’s Tech Model Railroad Club, где мы нашли первое документированное использование «foo» в технических кругах в 1959 году (и вариант в 1958 году).

Оба «foo» и «bar» (и даже «baz») были хорошо известны в популярной культуре, особенно из комиксов Smokey Stover и Pogo, которые будут прочитаны многими членами TMRC.

Кроме того, похоже, что военный FUBAR способствовал их популярности.

Использование одинокого «foo» как бессмысленного слова довольно хорошо документировано в популярной культуре в начале 20-го века, равно как и военный FUBAR. (Некоторое фоновое чтение: FOLDOC FOLDOC файл жаргонов Файл жаргонов Википедия RFC3092 )

ОК, поэтому давайте найдем некоторые ссылки.

STOP PRESS! После публикации этого ответа я обнаружил эту прекрасную статью о «foo» в выпуске 1938 в пятницу 14 января = «http: //tech.mit.edu/V57/PDF/N57.pdf» rel =» nofollow noreferrer «> Технология (« Самый старый и самый большой газета и amp; первая газета, опубликованная в Интернете »), том LVII. № 57, Price Three Cents:

Как ругательство, конечно, «foo!» имеет определенную и, возможно, незаменимую позицию на нашем языке, хотя мы опасаемся, что чрезмерное использование, которому оно подвергается в настоящее время, вполне может привести к его раннему (и, увы, темному) забвению. Мы говорим, увы, потому что правильное использование слова может привести к таким счастливым инцидентам, как следующее.

Это была лекция профессора Слейтера профессора Слейтера в 8.50 Thermodynamics в комнате 6-120. Профессор, прикрыв переднюю сторону доски, установил ручку, которая управляет лифтовым механизмом, показывая тем временем класс, чтобы продолжить обсуждение. Передняя доска медленно, величественно поднялась, показав доску за ней, и на этой доске, написав большие, символы, которые пишут «FOO»!

К тому времени, когда поезд достиг станции, неофиты настолько наполнены рассказами о славе Phi Omicron Omicron, которые обычно называют Foo, что они легкие жертвы.

Не то, чтобы я не потерял своих первых четырех сыновей в Великом и Вселенском Братстве Пхи Омикрон Омикрон, но я действительно хочу, чтобы мой пятый сын, мой ребенок, должен был, по крайней мере, быть предупрежден заранее.

Возмущенная мать пяти.

И Технология в декабре 1938

Общая тенденция мысли лучше всего интерпретировать из замечаний сделанные в конце избирательных бюллетеней. Один голос сказал: «Яне думайте, что я делаю, это любой бизнес Пулвера », а другой просто добавил короткое« Foo ».

Первый документированный «foo» в технических кругах, вероятно, 1959 Словарь языка TMRC :

FOO: священный слог (FOO MANI PADME HUM); чтобы говорить только, когда под вдохновением, чтобы общаться с Божеством. Наша первая обязанность заключается в том, чтобы заставить Foo Counters поворачиваться.

Использование этого слова в TMRC предшествует моему приходу. Счетчик foo может просто случайно мигать огнями или может быть реальным счетчиком с неясным входом.

Более ранние версии этого лексикона вывели «baz» как стенографическое повреждение бара. Тем не менее, Пит Самсон (компилятор лексики TMRC) сообщает, что он был уже текущим, когда он присоединился к TMRC в 1958 году. Он говорит: «Это произошло от« Пого ». Альберт Аллигатор, когда он был досаден или возмущен, кричал« Bazz Fazz! ». или «Rowrbazzle!» Считалось, что макет клуба моделирует (мифические) графства Новой Англии Роверфолк и Бассекс (Rowrbazzle смешивается с (Норфолк /Саффолк /Миддлсекс /Эссекс) ».

За год до словаря TMRC, 1958 ‘MIT Voo Doo Gazette («Юморное дополнение к офису MIT Deans») %20(PDF)%20%20%D1%83%D0%BF%D0%BE%D0%BC%D0%B8%D0%BD%D0%B0%D0%B5%D1%82%20Foocom%20%D0%B2%C2%AB%20%D0%97%D0%B0%D0%BA%D0%BE%D0%BD%D0%B0%D1%85%20%D0%9C%D0%B5%D1%80%D1%84%D0%B8%20%D0%B8%20%D0%A4%D0%B8%D0%BD%D0%B0%D0%B3%D0%BB%D0%B5%20%C2%BB%D0%94%D0%B6%D0%BE%D0%BD%D0%B0%20%D0%91%D0%B0%D0%BD%D0%B6%D0%B0%D1%84%D0%B0%20(%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%BA%D0%B0%20%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B8)%20

%20%D0%A2%D0%B0%D0%BA%D0%B6%D0%B5%20%201964%20%20MIT%20Voo%20Doo%20 (PDF) ссылается на использование TMRC:

Но давайте вспомним, что этот вопрос касается примеров кода, поэтому давайте найдем «foo», «bar» и «foobar», опубликованные в коде.

Итак, Jargon File 4.4.7 говорит о «foobar «:

Вероятно, изначально распространялся через руководства DECsystem от Digital Equipment Corporation (DEC) в 1960-х и начале 1970-х годов; подтвержденные наблюдения там возвращаются к 1972 году.

Таким образом, поскольку «FOO» является именем для себя, «COMITRIN» будет обрабатывать как «FOO», так и «(FOO)» точно так же.

Также включает другие метасинтатические переменные, такие как: FOO CROCK GLITCH /POOT TOOR /ON YOU /SNAP CRACKLE POP /X Y Z

Я ожидаю, что это почти то же самое, что и следующая ссылка «foo» из Project MAC в MIT в январе 1964 AIM-064, или Упражнения LISP Тимоти П. Харт и Майкл Левин:

автомобиль [((FOO. CROCK). GLITCH)]

Он делитсямногие другие метасинтетические переменные, такие как: CHI /BOSTON NEW YORK /SPINACH BUTTER STEAK /FOO CROCK GLITCH /POOT TOOP /TOOT TOOT /ISTHISATRIVIALEXCERCISE /PLOOP FLOT TOP /SNAP CRACKLE POP /ONE TWO THREE /PLANE SUB THRESHER

EXPLODE, как и PRIN1, вставляет слэши, поэтому (EXPLODE (QUOTE FOO /BAR)) PRIN1 как (F O O ///B A R) или PRINC как (F O O /B A R).

Еще несколько напоминаний.

Во второй файл жаргона, касающийся Foo Bar. Я могу проследить его, по крайней мере, до 1963 года, и номер PDP-1 серийный номер 2, который находился на втором этаже здания 26 в Массачусетском технологическом институте. Foo и Foo Bar, а после 1964 года в PDP-6 в проекте MAC.

Джон В. Эверетт напоминает в 1996 году:

Когда я присоединился к DEC в 1966 году, foobar уже обычно использовался как имя файла выброса. Я считаю, что fubar стал foobar, потому что PDP-6 поддерживал шесть имен символов, хотя я всегда предполагал, что этот термин перенесен в DEC из MIT. В те времена в DEC было много типов MIT, некоторые из которых работали с CTSS 7090/7094. Поскольку 709x также был 36-битной машиной, foobar, возможно, использовался в качестве общего имени файла.

У Дика Груена было устройство в его комнате в общежитии, обычная сборка B-аккумулятора, резисторов, конденсаторов и неоновых ламп NE-2, которые он назвал «счетчиком foo». Это было бы около 1964 года или около того.

Использование имен переменных FOO и BAR в качестве примеров происходит по меньшей мере до 1964 года и IBM 7070. Это тоже может быть старше, но именно там я впервые увидел его. Это было в Ассемблере. Каким будет эквивалент FORTRAN? IFOO и IBAR?

Самый ранний ассемблер PDP-1 использовал два символа для символов (18-битная машина), программисты всегда оставляли несколько слов в качестве места исправления для исправления проблем. (Перейти к месту патча, сделать новый код, вернуться назад) Это пространство условно было названо FU: это означало Fxxx Up, место, где вы исправили Fxxx Ups. Когда говорят, это было известно как пространство FU. Позже Ассемблеры (например, MIDAS разрешили три символа тэгов, так что FU стал FOO, и поскольку ВСЕ программисты PDP-1 скажут вам, что это пространство FOO.

Источник

Что означает «foo»?

Я надеюсь, что это будет рассматриваться как вопрос программирования, как и в любом учебном руководстве по программированию, вы в конце концов сталкиваетесь с «foo» в примерах кода. (да, правильно?)

Если это означает ничего, когда он начал использоваться так?

ОТВЕТЫ

Ответ 1

Для краткости излагайте только соответствующие определения из этого RFC:

Используется в основном как примерное имя для абсолютно чего-либо, особенно. программ и файлов (особенно файлов с царапинами).

Сначала в стандартном списке метасинтатических переменных, используемых в примеры синтаксиса (bar, baz, qux, quux, corge, grault, garply, waldo, fred, plugh, xyzzy, thud). [Жаргон]

Ответ 2

Ответ 3

Поскольку определение «Foo» имеет много значений:

bar, а baz часто объединяются вместе, чтобы делать такие слова, как foobar, barbaz и foobaz. www.nationmaster.com/encyclopedia/Metasyntactic-variable

Основные понятия в CML, обычно отображаемые непосредственно на XMLElements (которые будут обсуждаться ниже). wwmm.ch.cam.ac.uk/blogs/cml/

Измерение общего количества пастбищ в паддоке, выраженное в килограммах пастбищного сухого вещества на гектар (кг DM/га) www.lifetimewool.com.au/glossary.aspx

Сотрудник по прямому наблюдению. Артиллерийский офицер, который остался с пехотными и танковыми батальонами, чтобы установить наблюдательные пункты на передних линиях, чтобы наблюдать за позициями противника и радио, координаты целей к пушкам в тылу. members.fortunecity.com/lniven/definition.htm

— первая метасинтатическая переменная, обычно используемая. Это иногда сочетается с баром, чтобы сделать foobar. Это говорит о том, что foo, возможно, возникло с помощью слангового термина World War II fubar, в качестве аббревиатуры для f ucked/ f ouled u p b eyond a ll r, хотя файл Jargon делает довольно хороший случай. explanation-guide.info/meaning/Metasyntactic-variable.html

Также foo. Представление дурака (глупого человека), в акценте г-на Т en.wiktionary.org/wiki/foo

Ответ 4

Ответ 5

Я думаю, это означало ничего не значить. Вики говорит:

«Foo обычно используется с метасинтактическими переменными bar и foobar».

Ответ 6

Ответ 7

Звук французского fou, (например: amour fou) [сумасшедший], написанный на английском языке, будет foo, не так ли. Else furchtbar → foobar → foo, bar → barfoo → barfuß (босиком). Просто fou. Нога без зубов.

Я согласен со всеми, кто упомянул это, означает: ничего интересного, просто что-то, как правило, необходимо для завершения выражения/выражения.

Ответ 8

Сегодня я избегаю использования «foo» и предпочитаю использовать этот тип подстановочной замены по нескольким причинам.

Ответ 9

foo = Файл или объект. Он используется вместо переменной объекта или имени файла.

Источник

Атрибуты и протокол дескриптора в Python

Рассмотрим такой код:

Сегодня мы разберём ответ на вопрос: «Что именно происходит, когда мы пишем foo.bar

Вы, возможно, уже знаете, что у большинства объектов есть внутренний словарь __dict__, содержащий все их аттрибуты. И что особенно радует, как легко можно изучать такие низкоуровневые детали в Питоне:

Давайте начнём с попытки сформулировать такую (неполную) гипотезу:

Пока звучит похоже на правду:

что значит foo в программировании. Смотреть фото что значит foo в программировании. Смотреть картинку что значит foo в программировании. Картинка про что значит foo в программировании. Фото что значит foo в программировании

Теперь предположим, что вы уже в курсе, что в классах можно объявлять динамические аттрибуты:

Хм… ну ладно. Видно что __getattr__ может эмулировать доступ к «ненастоящим» атрибутам, но не будет работать, если уже есть объявленная переменная (такая, как foo.bar, возвращающая ‘hello!’, а не ‘goodbye!’). Похоже, всё немного сложнее, чем казалось вначале.

И действительно: существует магический метод, который вызывается всякий раз, когда мы пытаемся получить атрибут, но, как продемонстрировал пример выше, это не __getattr__. Вызываемый метод называется __getattribute__, и мы попробуем понять, как в точности он работает, наблюдая различные ситуации.

Пока что модифицируем нашу гипотезу так:

foo.bar эквивалентно foo.__getattribute__(‘bar’), что примерно работает так:

Проверим практикой, реализовав этот метод (под другим именем) и вызывая его напрямую:

Выглядит корректно, верно?

что значит foo в программировании. Смотреть фото что значит foo в программировании. Смотреть картинку что значит foo в программировании. Картинка про что значит foo в программировании. Фото что значит foo в программировании

Отлично, осталось лишь проверить, что поддерживается присвоение переменных, после чего можно расходиться по дом… —

my_getattribute возвращает некий объект. Мы можем изменить его, если он мутабелен, но мы не можем заменить его на другой с помощью оператора присвоения. Что же делать? Ведь если foo.baz это эквивалент вызова функции, как мы можем присвоить новое значение атрибуту в принципе?

Когда мы смотрим на выражение типа foo.bar = 1, происходит что-то больше, чем просто вызов функции для получения значения foo.bar. Похоже, что присвоение значения атрибуту фундаментально отличается от получения значения атрибута. И правда: мы может реализовать __setattr__, чтобы убедиться в этом:

Пара вещей на заметку относительно этого кода:

что значит foo в программировании. Смотреть фото что значит foo в программировании. Смотреть картинку что значит foo в программировании. Картинка про что значит foo в программировании. Фото что значит foo в программировании

А ведь у нас есть ещё и property (и его друзья). Декоратор, который позволяет методам выступать в роли атрибутов.

Давайте постараемся понять, как это происходит.

Просто ради интереса, а что у нас в f.__dict__?

В __dict__ нет ключа bar, но __getattr__ почему-то не вызывается. WAT?

bar — метод, да ещё и принимающий в качестве параметра self, вот только это метод находится в классе, а не в экземпляре класса. И в этом легко убедиться:

Ключ bar действительно находится в словаре атрибутов класса. Чтобы понять работу __getattribute__, нам нужно ответить на вопрос: чей __getattribute__ вызывается раньше — класса или экземпляра?

Видно, что первым делом проверка идёт в __dict__ класса, т.е. у него приоритет перед экземпляром.

что значит foo в программировании. Смотреть фото что значит foo в программировании. Смотреть картинку что значит foo в программировании. Картинка про что значит foo в программировании. Фото что значит foo в программировании

Погодите-ка, а когда мы вызывали метод bar? Я имею в виду, что наш псевдокод для __getattribute__ никогда не вызывает объект. Что же происходит?

Вся суть тут. Реализуйте любой из этих трёх методов, чтобы объект стал дескриптором и мог менять дефолтное поведение, когда с ним работают как с атрибутом.

Если объект объявляет и __get__(), и __set__(), то его называют дескриптором данных («data descriptors»). Дескрипторы реализующие лишь __get__() называются дескрипторами без данных («non-data descriptors»).

Оба вида дескрипторов отличаются тем, как происходит перезапись элементов словаря атрибутов объекта. Если словарь содержит ключ с тем же именем, что и у дескриптора данных, то дескриптор данных имеет приоритет (т.е. вызывается __set__()). Если словарь содержит ключ с тем же именем, что у дескриптора без данных, то приоритет имеет словарь (т.е. перезаписывается элемент словаря).

Чтобы создать дескриптор данных доступный только для чтения, объявите и __get__(), и __set__(), где __set__() кидает AttributeError при вызове. Реализации такого __set__() достаточно для создания дескриптора данных.

Короче говоря, если вы объявили любой из этих методов — __get__, __set__ или __delete__, вы реализовали поддержку протокола дескриптора. А это именно то, чем занимается декоратор property: он объявляет доступный только для чтения дескриптор, который будет вызываться в __getattribute__.

Последнее изменение нашей реализации:

foo.bar эквивалентно foo.__getattribute__(‘bar’), что примерно работает так:

Попробуем продемонстрировать на практике:

что значит foo в программировании. Смотреть фото что значит foo в программировании. Смотреть картинку что значит foo в программировании. Картинка про что значит foo в программировании. Фото что значит foo в программировании

Мы лишь немного поскребли поверхность реализации атрибутов в Python. Хотя наша последняя попытка эмулировать foo.bar в целом корректна, учтите, что всегда могут найтись небольшие детали, реализованные по-другому.

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

Источник

Жаргон функционального программирования

что значит foo в программировании. Смотреть фото что значит foo в программировании. Смотреть картинку что значит foo в программировании. Картинка про что значит foo в программировании. Фото что значит foo в программировании

У функционального программирования много преимуществ, и его популярность постоянно растет. Но, как и у любой парадигмы программирования, у ФП есть свой жаргон. Мы решили сделать небольшой словарь для всех, кто знакомится с ФП.

В примерах используется JavaScript ES2015). (Почему JavaScript?)

Работа над материалом продолжается; присылайте свои пулл-реквесты в оригинальный репозиторий на английском языке.

В документе используются термины из спецификации Fantasy Land spec по мере необходимости.

Arity (арность)

Количество аргументов функции. От слов унарный, бинарный, тернарный (unary, binary, ternary) и так далее. Это необычное слово, потому что состоит из двух суффиксов: «-ary» и «-ity.». Сложение, к примеру, принимает два аргумента, поэтому это бинарная функция, или функция, у которой арность равна двум. Иногда используют термин «диадный» (dyadic), если предпочитают греческие корни вместо латинских. Функция, которая принимает произвольное количество аргументов называется, соответственно, вариативной (variadic). Но бинарная функция может принимать два и только два аргумента, без учета каррирования или частичного применения.

Higher-Order Functions (функции высокого порядка)

Функция, которая принимает функцию в качестве аргумента и/или возвращает функцию.

Partial Application (частичное применение)

Частичное применение функции означает создание новой функции с пред-заполнением некоторых аргументов оригинальной функции.

Также в JS можно использовать Function.prototype.bind для частичного применения функции:

Благодаря предварительной подготовке данных частичное применение помогает создавать более простые функции из более сложных. Функции с каррированием автоматически выполняют частичное применение.

Currying (каррирование)

Процесс конвертации функции, которая принимает несколько аргументов, в функцию, которая принимает один аргумент за раз.

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

Auto Currying (автоматическое каррирование)

Трансформация функции, которая принимает несколько аргументов, в новую функцию. Если в новую функцию передать меньшее чем предусмотрено количество аргументов, то она вернет функцию, которая принимает оставшиеся аргументы. Когда функция получает правильное количество аргументов, то она исполняется.

Дополнительные материалы

Function Composition (композиция функций)

Соединение двух функций для формирования новой функции, в которой вывод первой функции является вводом второй.

Purity (чистота)

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

Side effects (побочные эффекты)

У функции есть побочные эффекты если кроме возврата значения она взаимодействует (читает или пишет) с внешним изменяемым состоянием.

Idempotent (идемпотентность)

Функция является идемпотентной если повторное ее исполнение производит такой же результат.

Point-Free Style (бесточечная нотация)

Написание функций в таком виде, что определение не явно указывает на количество используемых аргументов. Такой стиль обычно требует каррирования или другой функции высокого порядка (или в целом — неявного программирования).

Predicate (предикат)

Предикат — это функция, которая возвращает true или false в зависимости от переданного значения. Распространенный случай использования предиката — функция обратного вызова (callback) для фильтра массива.

Categories (категории)

Объекты с функциями, которые подчиняются определенным правилам. Например, моноиды.

Value (значение)

Все, что может быть присвоено переменной.

Constant (константа)

Переменная, которую нельзя переназначить после определения.

Константы обладают референциальной прозрачностью или прозрачностью ссылок (referential transparency). То есть, их можно заменить значениями, которые они представляют, и это не повлияет на результат.

Functor (функтор)

Pointed Functor (указывающий функтор)

Lifting — это когда значение помещается в объект вроде функтора. Если «поднять» (lift) функцию в аппликативный функтор, то можно заставить ее работать со значениями, которые также присутствуют в функторе.

Referential Transparency (прозрачность ссылок)

Если выражение можно заменить его значением без влияния на поведение программы, то оно обладает прозрачностью ссылок.

Например, есть функция greet :

Lambda (лямбда)

Анонимная функция, которую можно использовать как значение.

Лямбды часто передают в качестве аргументов в функции высокого порядка.

Лямбду можно присвоить переменной.

Lambda Calculus (лямбда-исчисление)

Область информатики, в которой функции используются для создания универсальной модели исчисления.

Lazy evaluation (ленивые вычисления)

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

Monoid (моноид)

Объект с функцией, которая «комбинирует» объект с другим объектом того же типа. Простой пример моноида это сложение чисел:

В этом случае число — это объект, а + это функция.

Также необходимо, чтобы группировка операций не влияла на результат (ассоциативность):

Конкатенация массивов — это тоже моноид:

Нейтральный элемент — это пустой массив []

Если существуют функции нейтрального элемента и композиции, то функции в целом формируют моноид:

foo — это любая функция с одним аргументом.

Monad (монада)

of также известен как return в других функциональных языках.
chain также известен как flatmap и bind в других языках.

Comonad (комонада)

Extract берет значение из функтора.

Extend выполняет функцию на комонаде. Функция должна вернуть тот же тип, что комонада.

Applicative Functor (аппликативный функтор)

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

В итоге получим массив функций, которые можно вызвать с ap чтобы получить результат:

Morphism (морфизм)

Endomorphism (эндоморфизм)

Функция, у которой ввод и вывод — одного типа.

Isomorphism (изоморфизм)

Пара структурных трансформаций между двумя типами объектов без потери данных.

Например, двумерные координаты можно хранить в массиве [2,3] или объекте .

Setoid

Сделать массив сетоидом:

Semigroup (полугруппа)

Foldable

Type Signatures (сигнатуры типа)

Часто функции в JavaScript содержат комментарии с указанием типов их аргументов и возвращаемых значений. В сообществе существуют разные подходы, но они все схожи:

Если функция принимает другую функцию в качестве аргумента, то ее помещают в скобки.

Дополнительные материалы

Union type (тип-объединение)

Комбинация двух типов в один, новый тип.

Операция + в JavaScript работает со строками и числами, так что можно использовать наш новый тип для описания его ввода и вывода:

Тип-объединение также известно как алгебраический тип, размеченное объединение и тип-сумма.

Существует пара библиотек в JavaScript для определения и использования таких типов.

Product type (тип-произведение)

Тип-произведение комбинирует типы таким способом, который вам скорее всего знаком:

Его называют произведением, потому что возможное значение структуры данных это произведение (product) разных значений.

Option (опцион)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *