Reaktive - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ Kotlin рдХреЗ рд▓рд┐рдП рдмрд╣реБ-рдордВрдЪ рдкреБрд╕реНрддрдХрд╛рд▓рдп



рдЖрдЬ рдХрдИ рд▓реЛрдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдлрд╛рдпрджреЗ рд╣реИрдВ: рддрдерд╛рдХрдерд┐рдд " рдХреЙрд▓рдмреИрдХ рдирд░рдХ " рдХреА рдХрдореА, рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рддрдВрддреНрд░, рдФрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдЬреЛ рдмрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдФрд░ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди (рдХрдВрдмрд╛рдЗрди, рд╕реНрдкреНрд▓рд┐рдЯ рдФрд░ рдХрдиреНрд╡рд░реНрдЯ)ред

рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреА рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ: JVM рдХреЗ рд▓рд┐рдП RxJava, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП RxJS, iOS рдХреЗ рд▓рд┐рдП RxSwift, Rx.NET рдЖрджрд┐ред

рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдЯрд▓рд┐рди рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛрддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдХрд┐ RxKotlinред рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ RxJava2 рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рддрдерд╛рдХрдерд┐рдд "рдЪреАрдиреА"ред

рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдореИрдВ рдПрдХ рдРрд╕рд╛ рдЙрдкрд╛рдп рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗ:

  • рдмрд╣реБ-рдордВрдЪ - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБ-рдордВрдЪ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдХрдВрдкрдиреА рдХреЗ рднреАрддрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП;
  • рдЕрд╢рдХреНрдд рд╕реБрд░рдХреНрд╖рд╛ - рдХреЛрдЯрд▓рд┐рди рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рд╣рдореЗрдВ " рдЕрд░рдм рдбреЙрд▓рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ " рд╕реЗ рдмрдЪрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрд╢рдХреНрдд рдореВрд▓реНрдп рдорд╛рдиреНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Observable<String?> );
  • рдХреЛрд╡рд░рд▓реАрди рдФрд░ рдХреЙрдиреНрдЯреНрд░реИрд╡рд┐рд░реНрд╕рд┐рдпрд╕ рдХреЛрдЯрд▓рд┐рди рдХреА рдПрдХ рдФрд░ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╡ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Observable<String> рд╕реЗ Observable<CharSequence> рдЯрд╛рдЗрдк рдЯрд╛рдЗрдк рдХрд░рдирд╛ред

рд╣рдордиреЗ рдПрдЯ рдж рдбрд┐рдб рдиреЗ рд╕рдореБрджреНрд░ рдХреЗ рдореМрд╕рдо рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛, рд╣рдордиреЗ рдЗрд╕реЗ Reaktive рдХрд╣рд╛ рдФрд░ рдЗрд╕реЗ GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдХреЛрдЯрд▓рд┐рди рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ Reaktive рдХреА рдХреНрд╖рдорддрд╛рдПрдВ рдЙрдирд╕реЗ рдХреИрд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИрдВред

рддреАрди рдкреНрд░рд╛рдХреГрддрд┐рдХ рд░рд┐рд╕рд╛рд╡ рд▓рд╛рдн


рдмрд╣реБ


рдкрд╣рд▓рд╛ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд▓рд╛рдн рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рдорд╛рд░реЗ iOS, Android рдФрд░ рдореЛрдмрд╛рдЗрд▓ рд╡реЗрдм рдЯреАрдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореМрдЬреВрдж рд╣реИрдВред рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ, рдбрд┐рдЬрд╛рдЗрди рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИред

рдХреЛрдЯрд▓рд┐рди рдЖрдкрдХреЛ рдорд▓реНрдЯреА-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдХрдВрдкрдиреА рдХреЗ рднреАрддрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдпрд╛ GitHub рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреА рдХреБрд▓ рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЕрд╢рдХреНрдд рд╕реБрд░рдХреНрд╖рд╛


рдпрд╣ рдЬрд╛рд╡рд╛ рдФрд░ RxJava2 рдХреЗ рджреЛрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЕрд╢рдХреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВред рдЗрд╕ рдЬрд╛рд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 public interface UserDataSource {   Single<User> load(); } 

рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, RxJava2 рдореЗрдВ рдирд▓ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрднреА рднреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рддреЛ рд╡рд╣ рд╣реИ рд╢рд╛рдпрдж рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХред рд▓реЗрдХрд┐рди рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ Single<User> рдФрд░ Single<User?> рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдФрд░ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдкреЙрдк рдЕрдк рд╣реЛрддреА рд╣реИрдВред

рд╕рд╣рд╕рдВрдпреЛрдЬрдХ рдФрд░ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА


рдпрд╣ рдХреЛрдЯрд▓рд┐рди рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдореА рд╣реИред рдЖрдк рдореИрдиреБрдЕрд▓ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдЯрд▓рд┐рди рдореЗрдВ RxJava рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖрддреА рд╣реИрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВред

рд╕рд╣рд╕рдВрдпреЛрдЬрдХ :

 fun bar(source: Observable<CharSequence>) { } fun foo(source: Observable<String>) {   bar(source) //   } 

рдЪреВрдВрдХрд┐ Observable рдПрдХ рдЬрд╛рд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реНрдХреИрди рдЬреИрд╕реЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╣реЛ рдЬрд╛рдПрдЧреА:

 fun bar(source: Observable<out CharSequence>) {   source.scan { a, b -> "$a,$b" } //   } fun foo(source: Observable<String>) {   bar(source) } 

рд╕реНрдХреИрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рднрд┐рдиреНрди рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ "T" рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рджреЛрдиреЛрдВ рд╣реИред рдпрджрд┐ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд▓ рдХреЛрдЯрд▓рд┐рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдерд╛, рддреЛ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдЯреА рдХреЛ рдЖрдЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреА:

 interface Observable<out T> {   тАж } 

рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рд╣реИ:

 fun bar(consumer: Consumer<String>) { } fun foo(consumer: Consumer<CharSequence>) {   bar(consumer) //   } 

рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг (рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп) рдХреЗ рд╕рдорд╛рди рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рдПрдХ рд╕реМ рдкреНрд░рддрд┐рд╢рдд рдирд╣реАрдВ:

 fun bar(consumer: Consumer<in String>) {   if (consumer is Subject) {       val value: String = consumer.value //     } } fun foo(consumer: Consumer<CharSequence>) {   bar(consumer) } interface Subject<T> : Consumer<T> {   val value: T } 

рдЦреИрд░, рдкрд░рдВрдкрд░рд╛ рд╕реЗ, рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 interface Consumer<in T> {   fun accept(value: T) } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдФрд░ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реАрддрд╛, рд░рд┐рдХреЗрдЯрд┐рд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рддреАрд╕рд░рд╛ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд▓рд╛рдн рд╣реИред

рдХреЛрдЯрд▓рд┐рди + рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ = рд░рд┐рд╕рд╛рд╡


рд╣рдо рдореБрдЦреНрдп рдмрд╛рдд рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ - рд░реЗрдХрд┐рдЯрд┐рд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╡рд░реНрдгрдиред

рдЗрд╕рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

  1. рдпрд╣ рдмрд╣реБ-рдордВрдЪ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЕрдВрддрддрдГ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред Badoo рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдирддреЗ рд╣реИрдВред
  2. рдпрд╣ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдлрд╛рдпрджреЗ рджреЗрддрд╛ рд╣реИ: рдЕрд╢рдХреНрдд, рд╡рд┐рдЪрд░рдг / рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИред рдпрд╣ рд▓рдЪреАрд▓рд╛рдкрди рдмрдврд╝рд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
  3. RxJava, RxSwift, рдЖрджрд┐ рдЬреИрд╕реЗ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЬрдХ рддрдХ рд▓рд╛рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  4. рд╢реБрджреНрдз рдПрдкреАрдЖрдИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Reaktive рдореЗрдВ ObservableSource рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрд╕ Observable рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдСрдкрд░реЗрдЯрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╡рд┐рд╕реНрддрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред 15,000 рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдХреЛрдИ рднрдЧрд╡рд╛рди рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рдореМрдЬреВрджрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдмрд┐рдирд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдврд╝рд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
  5. рдЕрдиреБрд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди (рдкрд░рд┐рдЪрд┐рдд subscribeOn рдФрд░ observeOn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
  6. RxJava2 (рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА) рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд, Reaktive рдФрд░ RxJava2 рдХреЗ рдмреАрдЪ рд╕реНрд░реЛрдд рд░реВрдкрд╛рдВрддрд░рдг рдФрд░ RxJava2 рд╕реЗ рдЕрдиреБрд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
  7. ReactiveX рдЕрдиреБрдкрд╛рд▓рдиред

рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдорд┐рд▓рд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

  1. рд░рд┐рдХреЗрдЯрд┐рд╡ рдореЗрдВ, рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:
    • observableOf<String>(null) //
    • val o1: Observable<String?> = observableOf(null)
      val o2: Observable<String> = o1 // ,
    • val o1: Observable<String?> = observableOf(null)
      val o2: Observable<String> = o1.notNull() // , null
    • val o1: Observable<String> = observableOf("Hello")
      val o2: Observable<String?> = o1 //
    • val o1: Observable<String?> = observableOf(null)
      val o2: Observable<String> = observableOf("Hello")
      val o3: Observable<String?> = merge(o1, o2) //
      val o4: Observable<String> = merge(o1, o2) // ,

    рднрд┐рдиреНрдирддрд╛ рднреА рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рдн рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Observable рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ, рдЯрд╛рдЗрдк рдЯреА рдХреЛ out рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ out , рдЬрд┐рд╕рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

     fun foo() {   val source: Observable<String> = observableOf("Hello")   bar(source) //   } fun bar(source: Observable<CharSequence>) { } 

рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдЬ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

  • рд▓реЗрдЦрди рдХреЗ рд╕рдордп рд╕реНрдерд┐рддрд┐: рдЕрд▓реНрдлрд╛ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рд╕рдВрднрд╡ рд╣реИрдВ);
  • рд╕рдорд░реНрдерд┐рдд рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо: рдЬреЗрд╡реАрдПрдо рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб;
  • рд╕рдорд░реНрдерд┐рдд рд╕реНрд░реЛрдд: Observable , Maybe , Single рдФрд░ Completable ;
  • рдХрд╛рдлреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдорд╛рдирдЪрд┐рддреНрд░, рдлрд╝рд┐рд▓реНрдЯрд░, рдлрд╝реНрд▓реИрдЯрдореИрдк, рдХреЙрдиреНрдХреИрдЯрдкрд╛рдЗрдк, рдХрдореНрдмрд╛рдЗрдирдЯреЗрд╕реНрдЯ, рдЬрд╝рд┐рдк, рдорд░реНрдЬ рдФрд░ рдЕрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдкреВрд░реА рд╕реВрдЪреА GitHub рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ );
  • рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕рдВрдЧрдгрдирд╛, рдЖрдИрдУ, рдЯреНрд░реИрдореНрдкреЛрд▓рд┐рди рдФрд░ рдореБрдЦреНрдп;
  • рд╡рд┐рд╖рдпреЛрдВ: рдкрдмреНрд▓рд┐рд╢рд╕рдмрдЬреЗрдХреНрдЯ рдФрд░ рдмрд┐рд╣реЗрд╡рд┐рдпрд░рд╕реБрдмрдЬреЗрдХреНрдЯ;
  • рдмреИрдХрдкреНрд░реЗрд╢рд░ рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВред

рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдХреНрдпрд╛ рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ:

  • рд╣рдорд╛рд░реЗ рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ Reaktive рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ (рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ);
  • рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд░реНрдерди (рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрд▓ рдЕрдиреБрд░реЛрдз);
  • iOS рд╕рдкреЛрд░реНрдЯ
  • JCenter (рд╡рд░реНрддрдорд╛рди рдореЗрдВ JitPack рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдореЗрдВ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рдХрд╛рд╢рди;
  • рдкреНрд░рд▓реЗрдЦрди;
  • рд╕рдорд░реНрдерд┐рдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐;
  • рдкрд░реАрдХреНрд╖рдг;
  • рдЕрдзрд┐рдХ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ - рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрднреА рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ GitHub рдкрд░ рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬрд╝ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ ред рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ рдФрд░ рд╕рд╡рд╛рд▓ рдкреВрдЫреЗрдВред рд╣рдо рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реЛрдВрдЧреЗред

Source: https://habr.com/ru/post/hi447424/


All Articles