πŸ‡ΊπŸ‡¦ Math.random(): javascript community
1.14K subscribers
363 photos
8 videos
530 links
Admin: @andrey_pk, @StartupEmulatorAdmin
YouTube ΠΊΠ°Π½Π°Π»: https://bit.ly/3cdY6HV
Download Telegram
Π”Π°Π²Π½ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ с Π²Π°ΠΌΠΈ ΠΎ serverless, интСрСсная ΡΡ‚Π°Ρ‚ΡŒΡ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ использования serverless Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°
⁠GitHub Trending #3

- https://github.com/cristianbote/goober - πŸ₯œ goober, a less than 1KB πŸŽ‰css-in-js alternative with a familiar API
- https://github.com/jgraph/mxgraph - mxGraph is a fully client side JavaScript diagramming library ( draw.io is our production-grade example that demonstrates extending the functionality of this library and how to deploy it in a secure, scalable manner. The sources to draw.io are also available.)
- https://github.com/aws-amplify/amplify-cli - A CLI toolchain for simplifying serverless web and mobile development.
- https://github.com/ngneat/transloco - πŸš€ 😍 The internationalization (i18n) library for Angular https://transloco.netlify.com/
- https://github.com/swimlane/ngx-charts πŸ“Š Declarative Charting Framework for Angular https://swimlane.github.io/ngx-charts/
- https://github.com/nrwl/nx - Extensible Dev Tools for Monorepos https://nx.dev
- https://github.com/cobidev/simplefolio - A clean, beautiful and responsive portfolio template for Developers! https://simplfolio.netlify.com
- https://github.com/microsoft/TypeScript-Node-Starter - A starter template for TypeScript and Node with a detailed README describing how to use the two together.
- https://github.com/saket/Press - A cross-platform markdown editor written in Kotlin Multiplatform (work in progress)
Π”Ρ€ΡƒΠ·ΡŒΡ, ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ΠΌΠ½Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ использовал инструмСнты для отслСТивания Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² IDE? Π’Ρ€Π΅ΠΊΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, записываСт врСмя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π»ΠΈ, ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π»ΠΈ? ПолСзно Π»ΠΈ? Π”Π°Π΅Ρ‚ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ прирост Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π½Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½ΠΎ Π² IDE?
Π’ΠΎΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€ΠΎΠ²:
https://wakatime.com/
https://github.com/wakatime/wakatime
#ide #tools
Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ собрали список ΠΈΠ· Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… видСокурсов для Web Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°
⁠Awesome: списки "ΠΏΡ€ΠΈΠΊΠΎΠ»ΡŒΠ½Ρ‹Ρ…" ссылок ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°ΠΌ - популярная Ρ‚Π΅ΠΌΠ° Π½Π° github, здСсь собраны списки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ javascript Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список списков Π² ссылкС снизу.

https://github.com/sorrycc/awesome-javascript - 🐒 A collection of awesome browser-side JavaScript libraries, resources and shiny things.
https://github.com/sindresorhus/awesome-nodejs - ⚑️ Delightful Node.js packages and resources https://node.cool
https://github.com/standard/awesome-standard - Documenting the explosion of packages in the standard ecosystem! https://standardjs.com
https://github.com/sindresorhus/awesome-electron - Useful resources for creating apps with Electron
https://github.com/parro-it/awesome-micro-npm-packages - A curated list of small, focused npm packages.
https://github.com/feross/awesome-mad-science - Delightful npm packages that make you say "wow, didn't know that was possible!"
https://github.com/kucherenko/awesome-project-questions - list of questions that engineers / architects / managers should ask before the start of a project.
β ΠœΡ‹ с Π²Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π° javascript Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ: web, backend Π½Π° node.js, mobile с react native ΠΈ Ρ‚.ΠΏ., Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΡƒΠ·Π½Π°Π² ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΎΠΌ: "Π”Π° Π»Π°Π΄Π½ΠΎ, это Π½Π° JavaScript?", Π² это постС собраны ссылки Π½Π° интСрСсныС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, написаныС Π½Π° JS ΠΈΠ· разряда "НС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ":
https://github.com/mmckegg/notevil - javascript javascript interpreter, useful for running untrusted code safely.
https://www.npmjs.com/package/google-distance - Easily get distance data between locations
https://www.npmjs.com/package/node-jvm - java virtual machine in pure node.js
https://github.com/mattytemple/speak-js - Text-to-Speech in JavaScript
https://github.com/DanielRapp/doppler - detect motion with the doppler effect using only the microphone and speakers
https://www.npmjs.com/package/cylon - JavaScript framework for robotics, drones, and the Internet of Things (IoT) https://cylonjs.com
https://github.com/rwaldron/johnny-five - JavaScript Robotics and IoT programming framework, developed at Bocoup.
Π”Ρ€ΡƒΠ·ΡŒΡ, привСтствуСм!
ΠœΡ‹ Ρ€Π°Π΄Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΠΆΠΈΠΌ #післясвят Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΎΠ±ΠΎΡ€ΠΎΡ‚Ρ‹, Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΠ»Π°Π½Ρ‹ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π³ΠΎΠ΄! πŸŽ‰
ΠœΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π°Π½ΠΎΠ½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наш ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ²Π΅Π½Ρ‚ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Growing Seniority– состоится ΠΎΠ½ 22 января ΠΈ спикСры ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ прямо скаТСм Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅:
⏩ Martin Chaov, Software Architect @SBTech с Ρ‚Π΅ΠΌΠΎΠΉ β€œThe Mythical Senior Developer”
⏩ Oleksandr Poshtaruk, Senior front-end developer @ITecGurus с Ρ‚Π΅ΠΌΠΎΠΉ β€œMentor it, blog it, talk it, record it”
На этот Ρ€Π°Π· ΠΌΡ‹ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½Ρ‹ ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² прСкрасной ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΡƒΠ·Π½Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ интСрСсныС Π²Π΅Ρ‰ΠΈ, Π½ΠΎ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎΠ±Ρ€ΠΎΠ΅ Π΄Π΅Π»ΠΎ – всС собранныС срСдства с этой встрСчи ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Π±Π»Π°Π³ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ„ΠΎΠ½Π΄Ρƒ Π‘Π»Π°Π³ΠΎΠΌΠ°ΠΉ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π±Π»Π°Π³ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π° ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠΌΠ΅Π½Π½ΠΎ – смоТСм ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ совсСм скоро, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ рСбята ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ„ΠΈΠ½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠ»Π°Π½Ρ‹ Π½Π° 2020 Π³ΠΎΠ΄. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎΠ±Ρ€Ρ‹Π΅ Π΄Π΅Π»Π° вмСстС 😊

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ мСроприятия, описания Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΠΈ ссылка Π½Π° Π±ΠΈΠ»Π΅Ρ‚Ρ‹ Π²ΠΎΡ‚ здСсь.
⁠"Π‘Π΅Π·Π³ΠΎΠ»ΠΎΠ²Ρ‹Π΅" систСмы управлСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ (Headless CMS) - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· популярных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π² соврСмСнном ΠΌΠΈΡ€Π΅ Π² сфСрС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ. ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Π΅ΠΉΡˆΠ°Ρ Π±Π»ΠΎΠ³ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Wordpress Π² послСднСС врСмя часто встрСчаСтся Π² ΡΡ‚Π°Ρ‚ΡŒΡΡ… ΠΎ headless CMS. Drupal ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ сСбя Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ headless CMS. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… сСрвисов ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ сСбя ΠΊΠ°ΠΊ headless CMS.

Π’Π°ΠΊ Π² Ρ‡Π΅ΠΌ-ΠΆΠ΅ идСя?
ИдСя простая - Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс для управлСния ΠΊΠΎΠ½Ρ‚Π΅Ρ‚ΠΎΠΌ ΠΈ API, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ этот ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, CMS Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ навязываСт ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°.

Π§Ρ‚ΠΎ это Π½Π°ΠΌ Π΄Π°Π΅Ρ‚:
- Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° backend ΠΈ frontend Ρ€Π°Π·Π²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΡƒΠ³Π»Ρ‹ ΠΈ ΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· API
- Нагрузка Π½Π° сСрвСр сниТаСтся
- Frontend ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ

Π§Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² node.js для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ?

Один ΠΈΠ· популярных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² - https://strapi.io/, ΠΎΡ‡Π΅Π½ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΆΠ΅ сСйчас Π΄Π΅Π»Π°Ρ‚ΡŒ headless CMS.
β ΠŸΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ wiki для построСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
Π₯ΠΎΡ€ΠΎΡˆΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π° своСм сСрвСрС ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ тСхничСской Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ с вСрсионированиСм, уровнями доступа, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Π΄ΠΈΠ° Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ Π΄Ρ€.
⁠А Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅? Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ЀП) - это Ρ€Π°Π·Π΄Π΅Π» ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΈ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ вычислСниС рассматриваСтся ΠΊΠ°ΠΊ матСматичСская функция:

f(x) = y

Как слСдствиС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько свойств Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°: Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ хранится состояниС (stateless). ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ - ΠΈΠ½Π°Ρ‡Π΅ появляСтся ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт (side effect), функция пСрСстаСт Π±Ρ‹Ρ‚ΡŒ чистой (pure function), Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ-ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΡ‹ всСгда ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ основой ЀП являСтся лямбда-исчислСния (https://en.wikipedia.org/wiki/Lambda_calculus)

Π’ ссылках снизу Π²Ρ‹ смоТСтС Π½Π°ΠΉΡ‚ΠΈ awesome functional programming + ссылка Π½Π° ΠΊΠ½ΠΈΠΆΠΊΡƒ ΠΏΡ€ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π›Π°ΠΉΠΊΠ°ΠΉΡ‚Π΅ пост, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΎ ЀП, добавлю ссылки Π½Π° популярныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС.

#Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅_ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
β ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΆΠ°Ρ€Π³ΠΎΠ½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… программистов, Π½Π°Ρ‡Π½Π΅ΠΌ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρƒ всСх Π½Π° слуху.

Ѐункция Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка (high order function / HOF) - это функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

const filter = (predicate, xs) => xs.filter(predicate)
const is = (type) => (x) => Object(x) instanceof type
filter(is(Number), [0, '1', 2, null]) // [0, 2]


Лямбда (Lambda) - это анонимная функция, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Лямбды ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ присвоСны ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Лямбды ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

;(
function (a) {
return a + 1
})
;(a) => a + 1
const add1 = (a) => a + 1
[1, 2].map((a) => a + 1)


БСгодня Π² ссылкС ΠΏΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ популярная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° javascript для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС.

#Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅_ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Новый ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° "Π­Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π½Π° javascript?"
Isomorphic git - git, написаный Π½Π° javascript. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… ΠΈ Π² node.js. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ² для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ измСнСниях, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ git.

https://github.com/isomorphic-git/isomorphic-git
⁠Брочно Π² Π½ΠΎΠΌΠ΅Ρ€! 18 дСкабря 2019-Π³ΠΎ Π³ΠΎΠ΄Π° Π²Ρ‹ΡˆΠ»Π° 8-я вСрсия javascript engine V8:

Performance (size & speed)
- Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ~40% мСньшС памяти
- оптимизация выполнСния built-in fns

JS
- Optional chaining
const nameLength = db?.user?.name?.length;
( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining )

- Nullish coalescing
props.enabled ?? true
( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator )

ВсС подробности ΠΏΠΎ ссылкС!
β Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 2 Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΠΈΠ· ΠΆΠ°Ρ€Π³ΠΎΠ½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программиста это ΠΌΠΎΠ½ΠΎΠΈΠ΄ ΠΈ ΠΌΠΎΠ½Π°Π΄Π°. Π˜Ρ‚Π°ΠΊ Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ Π·Π°Ρ‡Π΅ΠΌ это Π½ΡƒΠΆΠ½ΠΎ:

Моноид (monoid) - ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ-ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. НапримСр:

1 + 1
[1, 2].concat([3, 4])

Когда ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΌΠΎΠ½ΠΎΠΈΠ΄Π°Ρ…, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт (identity), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ влияСт Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

1 + 0

0 - Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт (identity)

[1,2].concat([])

[] - Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт (identity)

Монада (Monad) - ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΌΠΈΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Для простоты понимания ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠΎΠ½Π°Π΄ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

// Implementation
Array.prototype.chain = function (f) {
return this.reduce((acc, it) => acc.concat(f(it)), [])
}

// Usage
Array.of('cat,dog', 'fish,bird').chain((a) => a.split(',')) // ['cat', 'dog', 'fish', 'bird']

// Contrast to map
Array.of('cat,dog', 'fish,bird').map((a) => a.split(',')) // [['cat', 'dog'], ['fish', 'bird']]

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΌΠΎΠ½Π°Π΄Π°ΠΌΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ of ΠΈ chain. chain ΠΏΠΎΡ…ΠΎΠΆ Π½Π° map, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². chain Ρ‚Π°ΠΊ ΠΆΠ΅ извСстСн ΠΊΠ°ΠΊ flatmap ΠΈΠ»ΠΈ bind.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΡ€ΠΎ ΠΌΠΎΠ½Π°Π΄Ρ‹ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎ ссылкС Π²Π½ΠΈΠ·Ρƒ.

#Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅_ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Π­Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π½Π° Javascript?

WebTorrent - torrent client написаный Π½Π° javascript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈ Π² node.js.

https://github.com/webtorrent/webtorrent