ΠΠ½Π°Π½ΠΈΡ β ΡΡΠΎ Ρ
ΠΎΡΠΎΡΠΎ, ΠΏΡΠΎΡΡΠΎ ΠΎΡΠ»ΠΈΡΠ½ΠΎ. ΠΠΎ Π½ΡΠΆΠ½Π° Π΅ΡΠ΅ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Ρ ΠΈΡ
ΠΈΠ· ΡΡΠ°ΡΡΡΠ° Β«ΠΏΠ°ΡΡΠΈΠ²Π½ΠΎΠ΅ Ρ
ΡΠ°Π½Π΅Π½ΠΈΠ΅Β» Π² ΡΡΠ°ΡΡΡ Β«Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅Β». ΠΠ°ΠΊΠΈΠΌ Π±Ρ Ρ
ΠΎΡΠΎΡΠΈΠΌ Π½ΠΈ Π±ΡΠ»ΠΎ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ° Β«Π² ΠΏΠΎΠ»Π΅Β». Π‘ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π»ΡΠ±ΠΎΠΉ ΡΡΠ΅ΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ, Π²ΠΊΠ»ΡΡΠ°Ρ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΠ.
Π ΡΡΠΎΠΌ Π³ΠΎΠ΄Ρ GeekBrains Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ°ΠΊΡΠ»ΡΡΠ΅ΡΠ° ΠΎΠ½Π»Π°ΠΉΠ½-ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° GeekUniversity ΠΏΠΎ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π½Π°ΡΠ°Π» ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΌ Π°Π³Π΅Π½ΡΡΡΠ²ΠΎΠΌ AGIMA, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ β ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ (Π΄Π΅Π»Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΏΠΎΡΡΠ°Π»Ρ ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π²ΠΎΡ ΡΡΠΎ Π²ΡΡ). AGIMA ΠΈ GeekBrains ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠ°ΠΊΡΠ»ΡΡΠ°ΡΠΈΠ² Π΄Π»Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ Π² ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠ° Π΄Π½ΡΡ
ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ Ρ ΠΠ³ΠΎΡΠ΅ΠΌ ΠΠ΅Π΄Π΅Π½Π΅Π΅Π²ΡΠΌ, ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠΌ ΠΏΠΎ iOS, ΠΈ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΠΎΠΌ Π’ΠΈΠ·ΠΈΠΊΠΎΠΌ, ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΌΡΡ Π½Π° Android. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΈΠΌ ΡΠ°ΠΊΡΠ»ΡΡΠ°ΡΠΈΠ² ΠΏΠΎ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΎΠ±ΠΎΠ³Π°ΡΠΈΠ»ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ
Π Π΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² iOS Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ RxSwift
ΠΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°ΡΠ΅Π»Ρ ΡΠ°ΠΊΡΠ»ΡΡΠ°ΡΠΈΠ²Π° ΠΠ³ΠΎΡΡ ΠΠ΅Π΄Π΅Π½Π΅Π΅Π²: Β«C RxSwift Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π»Π΅ΡΠ°ΡΡΒ»
ΠΠ°ΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΡΡΠ΄Π΅Π½ΡΡ Π½Π° ΡΠ°ΠΊΡΠ»ΡΡΠ°ΡΠΈΠ²Π΅?
ΠΡ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°, Π½ΠΎ ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π² ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΊΠ΅ MVVM + RxSwift. Π’Π°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ². ΠΠ»Ρ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΊ ΠΏΠΎΠ»Π΅Π²ΡΠΌ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΡΠ·ΡΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
RxSwift β Π·Π°ΡΠ΅ΠΌ ΡΡΠΎΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ iOS-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΠΆΠΈΠ·Π½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ?
RxSwift ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ ΡΠ²ΡΠ·ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ. Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β ΡΡΠΎ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΈ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² Π½ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΠΎ viewModel. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ data-driven. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, RxSwift ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ ΡΡΠΈΠ»Π΅, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΡΡ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ. ΠΡΡ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π·Π½Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° β ΡΡΠΎ Π΅ΡΡ ΠΈ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΠ»ΡΡ Π² ΡΠ΅Π·ΡΠΌΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈ Π² ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΎΠΏΡΡ Ρ RxSwift, ΡΠ΅Π½ΡΡΡΡ Π½Π° ΡΡΠ½ΠΊΠ΅.
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎΠΈΡ Π²ΡΠ±ΡΠ°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ, Π° Π½Π΅ Π΄ΡΡΠ³ΠΈΠ΅?
Π£ RxSwift ΡΠ°ΠΌΠΎΠ΅ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ. Π’ΠΎ Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π½ΡΠΎΠ², ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΡΠΆΠ΅ ΠΊΠ΅ΠΌ-ΡΠΎ ΡΠ΅ΡΠ΅Π½Π°. Π’Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΎΠ² ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, RxSwift β ΡΠ°ΡΡΡ ReactiveX. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ Π΄Π»Ρ Android, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ (RxJava, RxKotlin), Π° ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΠΏΠΎ ΡΠ΅Ρ Ρ ΠΌΠΎΠ³ΡΡ Π³ΠΎΠ²ΠΎΡΠΈΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΎΠ΄Π½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ iOS, Π΄ΡΡΠ³ΠΈΠ΅ β Ρ Android.
Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ, ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π½Π΅Π΄ΠΎΡΠ΅ΡΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΈΡΠ΅ΠΊ ΠΈΠ· Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΠΉ Swift, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ RxSwift ΠΎΠΏΠ΅Π½ΡΠΎΡΡΠ½ΡΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° Π²ΡΠ΅ΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈΡ ΡΠ°ΠΌΠΎΠΌΡ.
ΠΠ΄Π΅ ΡΡΠΎΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ RxSwift?
- ΠΠΈΠ½Π΄ΠΈΠ½Π³ΠΈ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΡΡ ΡΠ΅ΡΡ ΠΈΠ΄ΡΡ ΠΏΡΠΎ UI, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ UI, ΠΊΠ°ΠΊ Π±Ρ ΡΠ΅Π°Π³ΠΈΡΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , Π° Π½Π΅ ΡΠ²Π½ΠΎ Π³ΠΎΠ²ΠΎΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΡΡΠΎ ΠΏΠΎΡΠ° ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡΡ.
- Π‘Π²ΡΠ·Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. Π‘ΡΠ°Π·Ρ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠ°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ
ΠΈΠ· ΡΠ΅ΡΠΈ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ, ΡΠΌΠ°ΠΏΠΏΠΈΡΡ ΠΎΡΠ²Π΅Ρ Π² ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ Π΅Π³ΠΎ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΈ ΠΎΡΠ΄Π°ΡΡ Π΅Π³ΠΎ Π² UI. ΠΡΠ²Π΅ΡΠ°ΡΡ Π·Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ°Π·Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ (ΠΌΡ ΠΆΠ΅ ΠΌΡ Π»ΡΠ±ΠΈΠΌ ΠΈ ΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌ
SOLID ?). ΠΠΌΠ΅Ρ ΠΏΠΎΠ΄ ΡΡΠΊΠΎΠΉ ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠ°ΠΊ RxSwift, ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ, Π§Π’Π Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°, Π° ΠΠΠ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ β Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² Π΄ΡΡΠ³ΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ . ΠΠΌΠ΅Π½Π½ΠΎ Π·Π° ΡΡΡΡ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π»ΡΡΡΠ°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ²ΡΡΠ°Π΅ΡΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ. Π£ΡΠ»ΠΎΠ²Π½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡ Π½Π° ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ°ΠΌΡ ΠΊΠ½ΠΈΠ³Ρ.
ΠΠΎΡΡΡΠΈΠ½Ρ Π² Kotlin
ΠΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°ΡΠ΅Π»Ρ ΡΠ°ΠΊΡΠ»ΡΡΠ°ΡΠΈΠ²Π° ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ Π’ΠΈΠ·ΠΈΠΊ: Β«Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΡΠ΅Π΄ΡΡΠ²Β»
Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°ΡΡΡΡ Π½Π° ΡΠ°ΠΊΡΠ»ΡΡΠ΅ΡΠ΅ GeekBrains Π² ΡΠ°ΠΌΠΊΠ°Ρ Π±ΡΠ΅Π½Π΄ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠ΅ΡΠ²Π΅ΡΡΠΈ?
Π’Π΅ΠΎΡΠΈΡ, ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°ΠΌΠΈ, ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π² ΡΠΈΡΡΠΎΠΌ Kotlin ΠΈ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ Android-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ, ΡΠΎ ΡΡΡΠ΄Π΅Π½ΡΠ°ΠΌ Π±ΡΠ΄Π΅Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΡ Π·Π°Π²ΡΠ·Π°Π½ΠΎ Π½Π° coroutines. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ β ΡΠΏΠ»ΠΎΡΠ½ΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. Π Π²ΠΎΡ ΠΊΠΎΡΡΡΠΈΠ½Ρ Kotlin ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΉ, ΡΠ°Π·Π½ΠΎΡΠΎΠ΄Π½ΡΠΉ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅ΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ΄ ΡΠ²Π΅ΡΡΠΈ ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΌΡ, ΠΏΡΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΡΠΈΠ»Ρ, ΠΏΠΎΠ»ΡΡΠΈΠ² Π²ΡΠΈΠ³ΡΡΡ Π² ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΡ Π½Π°ΡΡΠΈΠΌΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΈΠ΄ΠΈΠΎΠΌΠ°ΡΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΊΠΎΡΡΡΠΈΠ½Π°Ρ , ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΈ ΠΏΠΎΠ½ΡΡΠ΅Π½ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²Π·Π³Π»ΡΠ΄Π° Π΄Π°ΠΆΠ΅ Π±Π΅Π· Π³Π»ΡΠ±ΠΎΠΊΠΈΡ Π·Π½Π°Π½ΠΈΠΉ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½Ρ ΠΊΠΎΡΡΡΠΈΠ½Ρ (ΡΡΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠ°ΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ , ΠΊΠ°ΠΊ RxJava). Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΉΠΌΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΏΠΎΡΠ»ΠΎΠΆΠ½Π΅Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π°ΠΊΡΠΎΡΠΎΠ², Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ MVI.
ΠΡΡΠ°ΡΠΈ, Π΅ΡΡ Ρ
ΠΎΡΠΎΡΠ°Ρ Π½ΠΎΠ²ΠΎΡΡΡ. ΠΠΎΠΊΠ° Π·Π°ΠΏΠΈΡΡΠ²Π°Π»ΡΡ ΡΠ°ΠΊΡΠ»ΡΡΠ°ΡΠΈΠ², Π²ΡΡΠ»ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Kotlin Coroutines, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΊΠ»Π°ΡΡ Flow
β Π°Π½Π°Π»ΠΎΠ³ ΡΠΈΠΏΠΎΠ² Flowable
ΠΈ Observable
ΠΈΠ· RxJava. ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎ ΡΡΡΠΈ, Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΡΡΡΠΈΠ½Ρ feature complete Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠ°Π²Π΄Π°, ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎΠΊΠ° Π΅ΡΡ Π΅ΡΡΡ ΠΊΡΠ΄Π°: Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΠΊΠΎΡΡΡΠΈΠ½ Π² kotlin/native ΡΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΌΡΠ»ΡΡΠΈΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Kotlin ΠΈ Π½Π΅ ΡΡΡΠ°Π΄Π°ΡΡ ΠΎΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ RxJava ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² Π² ΡΠΈΡΡΠΎΠΌ Kotlin, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΊΠΎΡΡΡΠΈΠ½ Π² kotlin/native Π΅ΡΡ Π½Π΅ ΠΏΠΎΠ»Π½Π°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Π°ΠΊΡΠΎΡΠΎΠ². Π ΡΠ΅Π»ΠΎΠΌ, Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Kotlin ΡΡΠΎΠΈΡ Π² ΠΏΠ»Π°Π½Π°Ρ
ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ
Π°ΠΊΡΠΎΡΠΎΠ² Π½Π° Π²ΡΠ΅Ρ
ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ
.
Kotlin Coroutines β ΡΠ΅ΠΌ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ Kotlin?
ΠΠΎΡΡΡΠΈΠ½Ρ Π΄Π°ΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ, Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΈ Β«ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΡΠΉΒ» (concurrency) ΠΊΠΎΠ΄. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°Π΄Π°ΠΏΡΠ΅ΡΡ ΠΏΠΎΠ΄ Π΄ΡΡΠ³ΠΈΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅.
Π§Π΅ΠΌ Coroutines ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²?
ΠΠΎΠΌΠ°Π½Π΄Π° Kotlin Π½Π°Π·ΡΠ²Π°Π΅Ρ ΠΊΠΎΡΡΡΠΈΠ½Ρ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΠ»ΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΡΡΡΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ, ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΠΈ, ΠΊΠΎΡΡΡΠΈΠ½Π° β ΡΡΠΎ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅. ΠΠ½Π° Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΡΡΡΠΈΠ½Ρ.
ΠΠ°ΠΊΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠ°ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΠΎΡΡΡΠΈΠ½, ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΈΠ»ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠ°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Β«ΡΠΈΡΡΠΎΠ³ΠΎΒ» Kotlin?
ΠΡΠ±ΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅, Β«ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΡΠ΅Β» Π·Π°Π΄Π°ΡΠΈ Ρ ΠΎΡΠΎΡΠΎ ΡΠ΅ΡΠ°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΡΡΡΠΈΠ½ β Π±ΡΠ΄Ρ ΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π°ΠΆΠ°ΡΠΈΠΉ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΠΎΡ ΠΎΠ΄ Π² ΡΠ΅ΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ° Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
Π ΡΠΈΡΡΠΎΠΌ Kotlin ΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ ΡΠ΅ΡΠ°ΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Java β ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΡΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ², Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΏΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ, Π½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ·ΡΠΊΠ°.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠΎΠΈΡ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΎΠ±Π° ΡΠ°ΠΊΡΠ»ΡΡΠ°ΡΠΈΠ²Π° (Π΄Π° ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΡΡΡΡ ΡΠΎΠΆΠ΅) ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π²Π½Π΅ΡΠ½ΠΈΡ
ΡΡΠ»ΠΎΠ²ΠΈΠΉ. ΠΡΠ»ΠΈ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π²Π°ΠΆΠ½ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π² ΡΠ·ΡΠΊΠ°Ρ
ΠΈΠ»ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ
, ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°ΡΠ΅Π»ΠΈ ΡΡΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΡ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π΅ΡΠΆΠ°ΡΡ ΡΡΠΊΡ Π½Π° ΠΏΡΠ»ΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π·ΠΈΡΡΡΡ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com