рд╕реНрдХрд╛рд▓рд╛ рд╡рд╛рдЯ: рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╡реИрдХрд▓реНрдкрд┐рдХ рдореВрд▓реНрдп

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд╕реНрддрд░ рдХреЗ рд▓реЗрдЦ рд╣реИрдВ рдФрд░ рд╣реЗрд░рд╛ рдкрд░ рдХреИрд╕реЗ рд╕реНрдХрд╛рд▓рд╛ рдкрд░ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рдирд╛ рд╣реИред

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

рдЖрдЗрдП рддреБрдЪреНрдЫ рдорд╛рдорд▓реЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ: рдЖрдк рдЬрд┐рд╕ рд╕реНрдХрд╛рд▓рд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЖрдк рдЗрд╕рд╕реЗ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗрдВрдЧреЗ:

val optionalValue = service.readValue() if(optionalValue.isDefined) { //    optionalValue != None val value = optionalValue.get processValue(value) } else { throw new IllegalArgumentException("No value!") } 

рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдмреБрд░рд╛ рд╣реИ? рд╕реНрдХреИрд▓рд╛ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдСрдкреНрд╢рдирд▓рд╡реИрд▓реНрдпреВ, рд╕реНрдХреИрд▓рд╛ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд░рд┐рдЯрд░реНрди рдСрдкреНрд╢рди, рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд░рд╛рдЗрдЯрд┐рдВрдЧ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕ рдкрд░ рдХреЛрдИ рд╣рдереМрдбрд╝рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдкрдХрдбрд╝реА рдЬрд╛рдПред (рдЬреЛ рдХреБрдЫ рдЕрдЬреНрдЮрд╛рдд рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛, рдЬреИрд╕реЗ "рдЕрдЬреНрдЮрд╛рдд рддреНрд░реБрдЯрд┐, рдмрд╛рдж рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред") рд╢рд╛рдпрдж рдЖрдк рдмрд╣реБрдд рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ рдФрд░ рд╕реЛрдЪрддреЗ рд╣реИрдВ: рдЬрд╛рд╡рд╛ рдореЗрдВ рдореИрдВрдиреЗ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рд╣реИ! рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрднрд╡ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕реНрдХрд╛рд▓рд╛ рдкрд░ рдПрдХ рдмрдбрд╝реЗ рд╡рд░реНрдЧ рдХреЛ рдкреБрдирд░реНрд▓реЗрдЦрди рдХрд░рддреЗ рд╣реБрдП, рдХрдИ рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рдВрдЪреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рддреНрд░реБрдЯрд┐ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реБрдИ рдереА рдФрд░ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдЦреЛрдЬрдиреЗ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╡реЗрдХ рд▓реЗрдЦрди рдХреЛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдирдкреАрдИ рдлреЗрдВрдХрддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡реИрдХрд▓реНрдкрд┐рдХ рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдЪрд░ рдХреЗ рдпреБрдЧрд▓ рдорд┐рд▓реЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдПрдЧрд╛ред рджреВрд╕рд░рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЦрд╛рд▓реАрдкрди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рд╡рд┐рдХрд▓реНрдк, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд╣реБрдд рдХреНрд░реВрд░ рд╣реИред рдФрд░, рддреАрд╕рд░рд╛, Option.get рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд░реНрдЬрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╣рдореЗрд╢рд╛ рдЬрдм рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреБрдЫ рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рднреВрд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдПрдирдкреАрдИ рдПрдирд╛рд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рдХрд▓реНрдк рд╡рд░реНрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреВрдЯ рджреЗрддрд╛ рд╣реИред

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

 for(value <- service.readValue()) { processValue(value) } 

рджреВрд╕рд░рд╛ рддрдм рд╣реИ рдЬрдм рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рддрдм рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ:

 service.readValue() match { case Some(value) => processValue(value) case None => throw new IllegalArgumentException("No value!") } 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рд╡рд░реНрдгрд┐рдд рдиреБрдХрд╕рд╛рди рд╕реЗ рд░рд╣рд┐рдд рд╣реИред

рдЪрд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдПрдХ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЕрдХреНрд╕рд░ рдРрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдкреИрджрд╛ рд╣реЛрддреЗ рд╣реИрдВ:

 var value: Type = null try { value = parse(receiveValue()) } catch { case e: SomeException => value = defaultValue } 

рдпрд╣рд╛рдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдХрдорд┐рдпрд╛рдВ рднреА рд╣реИрдВ: рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо, рд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдЕрд╢рдХреНрдд рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕реНрдХреИрд▓рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреБрдЫ рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рдХреЛ рд╡рд╣рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реБрдП рдХрд┐ рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рд╕рднреА рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдКрдкрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 val value = try { parse(receiveValue()) } catch { case e: SomeException => defaultValue } 

рдХреЛрдб рдХреНрд▓реАрдирд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдХрднреА-рдХрднреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдорд┐рд▓ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдФрд░, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 var value: Option[Type] = null try { value = Some(parse(receiveValue())) } catch { case e: SomeException => value = None } 

рд╡реИрд╕реЗ, рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рдпрджрд┐ рдкрд╛рд░реНрд╕, рдЕрдЪрд╛рдирдХ, рднрдЧрд╡рд╛рди рди рдХрд░реЗ, рдЕрд╢рдХреНрдд рд╣реЛ, рдЬреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХреБрдЫ (рд╢реВрдиреНрдп) рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдХреЛрдИ рдирд╣реАрдВ, рдЬрд┐рд╕реЗ рдЖрдк рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо, рдЖрдкрдХреЛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рд╡рд┐рдХрд▓реНрдк рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ (рдкрд╛рд░реНрд╕ (рдкреНрд░рд╛рдкреНрддрд╡реНрдпреВ) ()), рдФрд░ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░, рдорд╛рдирдХ рдкреИрдХреЗрдЬ scala.util.control.Exception._ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 val value = catching(classOf[SomeException]).opt({ parse(receiveValue()) }).getOrElse(defaultValue) 

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

 list.map(_.optionalField).filterNot(_ == None).map(_.get) 

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╢рд╛рддрд┐рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрдкрдЯрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕реВрдЪреА рдФрд░ рд╡рд┐рдХрд▓реНрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореБрджреНрд░рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЕрднреА рднреА рд╣рдВрдЧрд╛рдорд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ! рдФрд░ рдпрд╣рд╛рдВ рдпрд╣ рдмрдЪрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХрд╛рд▓рд╛ рди рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рднреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реВрдЪреА рдФрд░ рд╡рд┐рдХрд▓реНрдк рджреЛрдиреЛрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Iterable рд╣реИрдВ, рдЬрд╣рд╛рдВ рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рд╕рдорддрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд┐рдВрдЧреЛ! рд╕реНрдХрд╛рд▓рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 list.map(_.optionalField).flatten 

рдХреНрдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 list.flatMap(_.optionalField) 

рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╣рд╛рди рд╣реИ!

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

 iterable.map(value => value match { case Some(value) => whenValue(value) case None => whenNothing() }) 

рдпрд╣ рдмрд╣реБрдд рд╕рд╛рдл рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рд╡рд┐рдзрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдЖрдВрд╢рд┐рдХ рдХрд╛рд░реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдФрд░ рднреА рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 iterable.map({ case Some(value) => whenValue(value) case None => whenNothing() }) 

рд╡реИрд╕реЗ, рдПрдХ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИред рдХрднреА-рдХрднреА рдЖрдк рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 iterable.map(function(_)) 

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

 iterable.map(function) 

рдЦреИрд░, рдпрд╣ рд╕рдм рдЗрд╕ рд╕рдордп рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдЖрдкрдХреЗ рд╕реНрдХреИрд▓рд╛ рдХреЛрдб рдмреЗрд╕ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдмрд╣реБрдд рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХрд┐, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реНрдХреЗрд▓реЗ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ IntelliJ IDEA рдФрд░ рдорд╛рд╡реЗрди рдкреНрд▓рдЧрдЗрдиреНрд╕, рд╕рдорд╛рдзрд╛рди рдХреА рдкреЗрд╢рдХрд╢ рдХреЗ рдмрд┐рдирд╛, рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рдЕрд╢рдХреНрдд рдпрд╛ рдЪрд░ рдЪрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдмрддрд╛рддреЗ рд╣реБрдП рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдмреБрд░рд╛ рд╣реИ, рдпрд╣ рдмрддрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдирдХрд╛ рд╣реЛрдЧрд╛ред

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

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


All Articles