β Π Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅? Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Π€Π) - ΡΡΠΎ ΡΠ°Π·Π΄Π΅Π» ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ ΠΈ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ:
f(x) = y
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ²ΠΎΠΉΡΡΠ² ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°: Π² ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ (stateless). ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π²Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ - ΠΈΠ½Π°ΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ (side effect), ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ Π±ΡΡΡ ΡΠΈΡΡΠΎΠΉ (pure function), ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ-ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ Π€Π ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ (https://en.wikipedia.org/wiki/Lambda_calculus)
Π ΡΡΡΠ»ΠΊΠ°Ρ ΡΠ½ΠΈΠ·Ρ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ awesome functional programming + ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΊΠ½ΠΈΠΆΠΊΡ ΠΏΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠ°ΠΉΠΊΠ°ΠΉΡΠ΅ ΠΏΠΎΡΡ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΎ Π€Π, Π΄ΠΎΠ±Π°Π²Π»Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅.
#ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅_ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
f(x) = y
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ²ΠΎΠΉΡΡΠ² ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°: Π² ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ (stateless). ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π²Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ - ΠΈΠ½Π°ΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ (side effect), ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ Π±ΡΡΡ ΡΠΈΡΡΠΎΠΉ (pure function), ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ-ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ Π€Π ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ (https://en.wikipedia.org/wiki/Lambda_calculus)
Π ΡΡΡΠ»ΠΊΠ°Ρ ΡΠ½ΠΈΠ·Ρ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ awesome functional programming + ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΊΠ½ΠΈΠΆΠΊΡ ΠΏΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠ°ΠΉΠΊΠ°ΠΉΡΠ΅ ΠΏΠΎΡΡ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΎ Π€Π, Π΄ΠΎΠ±Π°Π²Π»Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅.
#ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅_ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
20 ΡΠΎΠ²Π΅ΡΠΎΠ² ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² angular
https://dev.to/rahul626/20-tips-for-angular-performance-2j1d
https://dev.to/rahul626/20-tips-for-angular-performance-2j1d
DEV Community
20 tips for Angular performance(Part 1)
Load Time Performance AOT: As opposed to JIT Compilation where the compilation is done in the brows...
β ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΆΠ°ΡΠ³ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ², Π½Π°ΡΠ½Π΅ΠΌ Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π²ΡΠ΅Ρ Π½Π° ΡΠ»ΡΡ Ρ.
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° (high order function / HOF) - ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ:
ΠΡΠΌΠ±Π΄Π° (Lambda) - ΡΡΠΎ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΌΠ±Π΄Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ. ΠΡΠΌΠ±Π΄Ρ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
;(
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π² ΡΡΡΠ»ΠΊΠ΅ ΠΏΠΎΠ΄ ΡΡΠ°ΡΡΠ΅ΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° javascript Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅.
#ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅_ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΆΠ°ΡΠ³ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ², Π½Π°ΡΠ½Π΅ΠΌ Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π²ΡΠ΅Ρ Π½Π° ΡΠ»ΡΡ Ρ.
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° (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
Isomorphic git - git, Π½Π°ΠΏΠΈΡΠ°Π½ΡΠΉ Π½Π° javascript. Π Π°Π±ΠΎΡΠ°Π΅Ρ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ ΠΈ Π² node.js. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠΎΡΠΌΠ°Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ , ΡΡΠΎ ΠΈ ΠΎΠ±ΡΡΠ½ΡΠΉ git.
https://github.com/isomorphic-git/isomorphic-git
GitHub
GitHub - isomorphic-git/isomorphic-git: A pure JavaScript implementation of git for node and browsers!
A pure JavaScript implementation of git for node and browsers! - isomorphic-git/isomorphic-git
β Π‘ΡΠΎΡΠ½ΠΎ Π² Π½ΠΎΠΌΠ΅Ρ! 18 Π΄Π΅ΠΊΠ°Π±ΡΡ 2019-Π³ΠΎ Π³ΠΎΠ΄Π° Π²ΡΡΠ»Π° 8-Ρ Π²Π΅ΡΡΠΈΡ javascript engine V8:
Performance (size & speed)
- Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ~40% ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΠ°ΠΌΡΡΠΈ
- ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ built-in fns
JS
- Optional chaining
( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining )
- Nullish coalescing
( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator )
ΠΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅!
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.
ΠΠΎΠ»ΡΡΠ΅ ΠΏΡΠΎ ΠΌΠΎΠ½Π°Π΄Ρ Π² ΡΡΠ°ΡΡΠ΅ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π²Π½ΠΈΠ·Ρ.
#ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅_ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎΠ½ΠΎΠΈΠ΄ (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
WebTorrent - torrent client Π½Π°ΠΏΠΈΡΠ°Π½ΡΠΉ Π½Π° javascript, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΈ Π² node.js.
https://github.com/webtorrent/webtorrent
GitHub
GitHub - webtorrent/webtorrent: β‘οΈ Streaming torrent client for the web
β‘οΈ Streaming torrent client for the web. Contribute to webtorrent/webtorrent development by creating an account on GitHub.
State Of Javascript 2019 π₯
Π’ΡΠ΅Π½Π΄Ρ, Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ, ΠΠ°ΡΠΏΠ»Π°ΡΡ
Π‘ΠΊΠ°Π½Π΄Π°Π»Ρ, ΠΠ½ΡΡΠΈΠ³ΠΈ, Π Π°ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ
https://t.co/qcbd2kkHKK?amp=1
Π’ΡΠ΅Π½Π΄Ρ, Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ, ΠΠ°ΡΠΏΠ»Π°ΡΡ
Π‘ΠΊΠ°Π½Π΄Π°Π»Ρ, ΠΠ½ΡΡΠΈΠ³ΠΈ, Π Π°ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ
https://t.co/qcbd2kkHKK?amp=1
Stateofjs
The State of JavaScript 2019
Discover the most popular JavaScript features & technologies of the year.
ΠΡΠΎ ΡΡΠΎ Π½Π° JavaScript?
Brain.js - Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΡ ΡΠ΅ΡΠ΅ΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° JavaScript. Π Π°Π±ΠΎΡΠ°Π΅Ρ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ ΠΈ Π² node.js. ΠΡΡΡ GPU ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅. ΠΡΡΡΡΠ°Ρ, ΠΏΡΠΎΡΡΠ°Ρ ΠΈ Π»Π΅Π³ΠΊΠ°Ρ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°.
https://github.com/BrainJS/brain.js
Brain.js - Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΡ ΡΠ΅ΡΠ΅ΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° JavaScript. Π Π°Π±ΠΎΡΠ°Π΅Ρ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ ΠΈ Π² node.js. ΠΡΡΡ GPU ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅. ΠΡΡΡΡΠ°Ρ, ΠΏΡΠΎΡΡΠ°Ρ ΠΈ Π»Π΅Π³ΠΊΠ°Ρ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°.
https://github.com/BrainJS/brain.js
GitHub
GitHub - BrainJS/brain.js: π€ GPU accelerated Neural networks in JavaScript for Browsers and Node.js
π€ GPU accelerated Neural networks in JavaScript for Browsers and Node.js - BrainJS/brain.js
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ Π²ΡΡΠΊΠΈΠΌΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΡΡΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π½ΡΠ΅ Π³ΡΠ°Π΄ΡΡΡ Π¦Π΅Π»ΡΡΠΈΡ Π² Π€Π°ΡΠ΅Π½Π³Π΅ΠΉΡΠ°, Π΄ΡΠΉΠΌΡ Π² ΡΠ°Π½ΡΠΈΠΌΠ΅ΡΡΡ ΠΈ Ρ.ΠΏ.
ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΡΠΉ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ Π½Π° javascript.
https://github.com/josdejong/mathjs
ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΡΠΉ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ Π½Π° javascript.
https://github.com/josdejong/mathjs
GitHub
GitHub - josdejong/mathjs: An extensive math library for JavaScript and Node.js
An extensive math library for JavaScript and Node.js - josdejong/mathjs
β Github Trending #4
- https://github.com/nuxt/nuxt.js - Vue.js Meta Framework to create complex, fast & universal web applications quickly.
- https://github.com/laurent22/joplin - Joplin - an open source note taking and to-do application with synchronization capabilities for Windows, macOS, Linux, Android and iOS. Forum: https://discourse.joplinapp.org/ https://joplinapp.org
- https://github.com/gatsbyjs/gatsby - Build blazing fast, modern apps and websites with React https://www.gatsbyjs.org
- https://github.com/renovatebot/renovate - Universal dependency update tool that fits into your workflows. https://renovatebot.com
- https://github.com/typicode/json-server - Get a full fake REST API with zero coding in less than 30 seconds (seriously)
- https://github.com/vuejs/vue-test-utils - π¬ Utilities for testing Vue components https://vue-test-utils.vuejs.org
- https://github.com/scullyio/scully - The Static Site Generator for Angular apps
#github_trending
- https://github.com/nuxt/nuxt.js - Vue.js Meta Framework to create complex, fast & universal web applications quickly.
- https://github.com/laurent22/joplin - Joplin - an open source note taking and to-do application with synchronization capabilities for Windows, macOS, Linux, Android and iOS. Forum: https://discourse.joplinapp.org/ https://joplinapp.org
- https://github.com/gatsbyjs/gatsby - Build blazing fast, modern apps and websites with React https://www.gatsbyjs.org
- https://github.com/renovatebot/renovate - Universal dependency update tool that fits into your workflows. https://renovatebot.com
- https://github.com/typicode/json-server - Get a full fake REST API with zero coding in less than 30 seconds (seriously)
- https://github.com/vuejs/vue-test-utils - π¬ Utilities for testing Vue components https://vue-test-utils.vuejs.org
- https://github.com/scullyio/scully - The Static Site Generator for Angular apps
#github_trending
Channel name was changed to Β«Math.random(): javascript communityΒ»
ΠΡΠΎ ΡΡΠΎ Π½Π° javascript?
Π£Π΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π½Π°ΠΏΠΈΡΠ°Π½ΡΠΉ Π½Π° javascript - ΡΠΈΡΡΠ΅ΠΌΠ° ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² (OCR). Π Π°Π±ΠΎΡΠ°Π΅Ρ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ (!) ΠΈ Π² node.js. Π Π°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ 100+ ΡΠ·ΡΠΊΠΎΠ²!
https://github.com/naptha/tesseract.js
Π£Π΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π½Π°ΠΏΠΈΡΠ°Π½ΡΠΉ Π½Π° javascript - ΡΠΈΡΡΠ΅ΠΌΠ° ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² (OCR). Π Π°Π±ΠΎΡΠ°Π΅Ρ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ (!) ΠΈ Π² node.js. Π Π°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ 100+ ΡΠ·ΡΠΊΠΎΠ²!
https://github.com/naptha/tesseract.js
GitHub
GitHub - naptha/tesseract.js: Pure Javascript OCR for more than 100 Languages πππ₯
Pure Javascript OCR for more than 100 Languages πππ₯ - naptha/tesseract.js
ΠΠΎΠ²Π°Ρ ΡΡΠ°ΡΡΡ ΠΎΡ Π°Π΄Π΅ΠΏΡΠ° RxJS, Π½Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ Π°Π²ΡΠΎΡΠ° ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ° Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΡΡΠ½ΠΈΡΠΈ.
Π ΡΠ΅ΠΌ ΡΡΠ°ΡΡΡ:
Π ΡΠΎΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ drag-n-drop Π² RxJS:
/DM*U/.exec(
mouseDown$,
mouseMove$,
mouseUp$
)
https://dev.to/kosich/regexp-for-reactive-streams-143g
#ΠΊΠΎΡΡΠΈΠ½Ρ_ΠΈΡΡΠΎΡΠΈΠΈ
Π ΡΠ΅ΠΌ ΡΡΠ°ΡΡΡ:
Π ΡΠΎΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ drag-n-drop Π² RxJS:
/DM*U/.exec(
mouseDown$,
mouseMove$,
mouseUp$
)
https://dev.to/kosich/regexp-for-reactive-streams-143g
#ΠΊΠΎΡΡΠΈΠ½Ρ_ΠΈΡΡΠΎΡΠΈΠΈ
DEV Community
RegExp syntax for Observables: Never Been Easier!
Imagine we need to implement a drag-n-drop behavior. For that, we have three event streams: mousemov...
β ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠ΅ΡΡ ΠΏΠΎΠΉΠ΄Π΅Ρ ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ
: ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π°Π²ΡΠΎ-ΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ (Function Composition) - ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π²ΠΎ Π²ΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
ΠΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅(Curring) - ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π² ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π·Π° ΡΠ°Π·.
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π²ΡΠ·ΡΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ:
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π² ΡΡΡΠ»ΠΊΠ΅ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ Π²ΠΈΠ΄Π΅ΠΎ ΠΊΡΡΡ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
#ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅_ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ (Function Composition) - ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π²ΠΎ Π²ΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
F(x) = g(f(y))
Π ΠΊΠΎΠ΄Π΅ ΡΠ°ΠΊ:
const compose = (f, g) => (a) => f(g(a)) // Definition
const floorAndToString = compose((val) => val.toString(), Math.floor) // Usage
floorAndToString(121.212121) // '121'
ΠΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅(Curring) - ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π² ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π·Π° ΡΠ°Π·.
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π²ΡΠ·ΡΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ:
const sum = (a, b) => a + b
const curriedSum = (a) => (b) => a + b
curriedSum(40)(2) // 42.
const add2 = curriedSum(2) // (b) => 2 + b
add2(10) // 12
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Auto Currying) - ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅ΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π² Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ. Π Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΌΠ΅Π½ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎ ΠΎΠ½Π° Π²Π΅ΡΠ½Π΅Ρ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. Π ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΌ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ΅ ramda Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ curry, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
const add = (x, y) => x + y
const curriedAdd = _.curry(add)
curriedAdd(1, 2) // 3
curriedAdd(1) // (y) => 1 + y
curriedAdd(1)(2) // 3
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π² ΡΡΡΠ»ΠΊΠ΅ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ Π²ΠΈΠ΄Π΅ΠΎ ΠΊΡΡΡ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
#ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅_ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅