Coder Social home page Coder Social logo

mostlyadequate / mostly-adequate-guide-ru Goto Github PK

View Code? Open in Web Editor NEW
1.2K 78.0 157.0 4.99 MB

Mostly adequate guide to FP (in javascript, translated to russian)

License: Other

HTML 0.76% JavaScript 96.13% TeX 2.37% CSS 0.13% Perl 0.60%
javascript functional-programming tutorial reactive-programming

mostly-adequate-guide-ru's Introduction

cover

Об этой книге

Это книга о функциональной парадигме в целом. Мы будем использовать самый популярный в мире язык функционального программирования — JavaScript. Некоторые могут подумать, что JS — это плохой выбор, поскольку его нынешняя культура ощущается преимущественно императивной, и ФП явно ей противоречит. Тем не менее, есть основания считать, что лучше всего начинать освоение ФП именно с JS:

  • Вы наверняка используете его на работе каждый день.

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

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

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

  • JS позволяет всё, что требуется для написания первоклассного функционального кода.

    В JS есть всё необходимое, чтобы при помощи пары небольших библиотек мимикрировать под язык вроде Scala или Haskell. В настоящее время ООП доминирует в индустрии, но применять его в JavaScript ужасно неудобно — примерно как разбивать палатку на трассе или танцевать чечётку в галошах. Мы приучены повсеместно применять bind только для того, чтобы this случайно не выскользнуло из-под нас. В нашем арсенале есть несколько костылей для того, чтобы не пострадать от случайно забытого new. Мы даже умеем делать приватные поля при помощи замыканий... Короче, для большинства из нас ФП будет более естественным, чем всё это ООП-барахло.

Несомненно, типизированные функциональные языки лучше подойдут для стиля, который рассматривает эта книга. JavaScript будет для нас средством изучения парадигмы, которую вы сможете применять где угодно. К счастью, функциональные интерфейсы происходят из математики, а потому они вездесущи. Вы будете чувствовать себя дома, пользуясь Swiftz, Scalaz, Haskell, PureScript и любой другой средой, основанной на математике.

Читать онлайн (на английском).

Для наилучшего впечатления, можно читать онлайн на Gitbook (на английском). Там есть:

  • Боковая панель с оглавлением
  • Упражнения, проверяемые прямо в браузере

Поиграть с примерами кода

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

Все функции и алгебраические структуры данных, представленные в книге, собраны в приложениях. Их код также доступен в виде npm-модуля:

$ npm i @mostly-adequate/support

Кроме того, упражнения из каждой главы могут быть выполнены в вашем редакторе! Например, выполните упражнения в файлах exercise_*.js в директории exercises/ch04 и затем выполните команду:

$ npm run ch04

Скачать (на английском)

Собрать книгу самостоятельно

git clone https://github.com/MostlyAdequate/mostly-adequate-guide-ru.git
cd mostly-adequate-guide-ru/
npm install
npm run setup
npm run generate-pdf
npm run generate-epub

Важно! Для создания ebook-версии вам необходимо установить ebook-convert. Инструкции.

Инструкция для Windows:

git clone https://github.com/MostlyAdequate/mostly-adequate-guide-ru.git
cd mostly-adequate-guide-ru/
npm install
npm install gitbook-cli -g
Set-ExecutionPolicy RemoteSigned (опционально) *
gitbook install
Установить [calibre](https://calibre-ebook.com/download_windows64) **
Установить переменные среды `ebook-convert` `C:\Program Files\Calibre2` ***
npm run generate-pdf
npm run generate-epub

* Снимает запрет на выполнение сторонних скриптов

** Настройки по генерации книг задаются в этой программе

*** Инструкция по установке переменых среды

Оглавление

SUMMARY-ru.md

Contributing

CONTRIBUTING-ru.md

Переводы

TRANSLATIONS-ru.md

FAQ

FAQ-ru.md

Планы на будущее

  • Часть 1 (главы 1-7) посвящена основам. Она обновляется по мере обнаружения ошибок (данная книга представляет из себя черновик). Если вы можете предложить исправление — не стесняйтесь!
  • Часть 2 (главы 8-13) рассматривает классы типов, начиная с функторов и монад, и заканчивая traversable. Я надеюсь втиснуть в неё трансформеры монад и аппликативные функторы.
  • Часть 3 (главы 14+) начнет танец на тонкой грани между практическим программированием и академическим абсурдом. Мы рассмотрим комонады, f-алгебры, фри-монады, yoneda и другие категориальные понятия.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

mostly-adequate-guide-ru's People

Contributors

a-x- avatar a1ip avatar alexanderaverin avatar bluesbroz avatar dependabot[bot] avatar e-serebriakov avatar elforastero avatar flppv avatar fromnt34 avatar kazatca avatar kirit0s avatar kurumpa avatar maksimf avatar maxjazz avatar nike-17 avatar rrramble avatar rsboarder avatar sakayama avatar vkorotkyi avatar vladimirlogachev avatar vsnegovik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mostly-adequate-guide-ru's Issues

Как зайти в Haskell и не выпасть обратно

Дорогие читатели! Если после прочтения данной книги у вас созрело желание зайти в Haskell и разобраться, то я рекомендую 2 курса:

Функциональное программирование на языке Haskell

Функциональное программирование на языке Haskell (часть 2)

Я уверенно могу рекомендовать их, потому что:

  • значительно быстрее и надёжнее, чем попытка изучить то же самое в любом другом языке (серьёзно, это просто сэкономит вам время и нервы).
  • на русском
  • бесплатно
  • с задачками
  • можно проходить в любом темпе
  • по окончанию выдаётся сертификат

P.S. Летом я не переводил книгу, пока проходил эти 2 курса, и получил 2 сертификата с отличием. Работа над задачами этих курсов дала мне намного больше понимания, чем любая книга о Haskell, включая даже Learn You A Haskell.

P.P.S. Существуют компании, которые используют Haskell и готовы рассматривать кандидатов с уровнем, начинающимся с этих курсов.

P.P.P.S. Русскоязычное Haskell-сообщество сосредоточено в telegram

Common agreement in Russian translations

I've got question, or suggestion. I'm going to translate 6th chapter. There are a bunch of different Russian translations for common functional programming terminology, so I think, maybe we should create common agreements how to translate terminology. For example word "application" can be - приложение, применение, аппликация.

Don't you think that we need common agreements?

Lost in translation

@DrBoolean, could you please explain to me the meaning of the heading in chapter 4? I'm talking about this one: https://github.com/MostlyAdequate/mostly-adequate-guide-ru/blob/master/ch4.md#more-than-a-pun--special-sauce

"More than a pun / special sauce"

What did you mean by "pun" here?

From wiki: "The pun, also called paronomasia, is a form of word play that suggests two or more meanings, by exploiting multiple meanings of words, or of similar-sounding words, for an intended humorous or rhetorical effect".

Is that correct meaning in the context of the heading?

Не генерируется pdf, epub

Выполняю по инструкции
npm run setup

"$" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] setup: `$(npm bin)/gitbook install`
npm ERR! Exit status 1

OS: Windows 10

Глава 3

Вроде как написано "чистая функция должна быть честной в отношении своих зависимостей", а как же зависимость от других функций? Или на функции это не распространяется? Здесь функция чистая
const signUp = (Db, Email, attrs) => () => {
const user = saveUser(Db, attrs);
welcomeUser(Email, user);
};
Но является ли это чистой функцией? Это скорее процедура
() => {
const user = saveUser(Db, attrs);
welcomeUser(Email, user);
}

Chapter 6

I'll take that one for translation

Глава 9

@maksimf, приветствую. Хотел бы поучаствовать в переводе главы 9.
Есть ли какие-либо наработки или с нуля начинать?

Примеры реальных проектов

Привет!
Во первых, спасибо за труды по переводу книги, вы проделали колоссальную работу.

Хочу полученные знания потихоньку начать применять в реальных проектах. С самим ФП проблем нет, но вот как только пытаюсь применять монады (остановился на folktale), то тут начинаются проблемы.

Хотел спросить, нет ли реальных примеров именно с использованием монад, особенно таких как IO. Буду очень благодарен за ссылки.

Состояние перевода

Сейчас книга продолжает переводиться мной и @Sakayama .
Перевод глав завершён.
В оригинальном репозитории есть написанная, но неопубликованная глава про Моноиды, в скором времени выложу её перевод (автор не возражает, я узнавал).

Глава 4 Каррирование

Упражнения, бонус 2.
В оригинале задача звучит совсем не так как переведено и в оригинале есть пример того что надо получить.

Оригинал:
// Bonus 2:
// ============
// Use slice to define a function "take" that takes n elements from the beginning of the string. Make it curried.
// // Result for "Something" with n=4 should be "Some"

Перевод:
// Бонус 2:
// ============
// используйте метод slice, чтобы объявить функцию "take", которая принимает n аргументов. Сделайте её каррируемой

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.