рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдХреЛрдЯрд▓рд┐рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

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

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдирд╣реАрдВ, рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдПрдХ рдбреЗрд╡рд▓рдкрд░, JetBrains рдиреЗ рдЕрдкрдиреЗ рдирдП рдЙрддреНрдкрд╛рдж, рдХреЛрдЯрд▓рд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХреАред рдХрдВрдкрдиреА рдкрд░ рдЖрд▓реЛрдЪрдирд╛ рдХреА рдПрдХ рд▓рд╣рд░ рдЧрд┐рд░ рдЧрдИ: рдЖрд▓реЛрдЪрдХреЛрдВ рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдХрдВрдкрдиреА рдЕрдкрдирд╛ рджрд┐рдорд╛рдЧ рдмрджрд▓ рд▓реЗ рдФрд░ рдЕрдкрдиреА рднрд╛рд╖рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдЦрддреНрдо рдХрд░ рджреЗред рд╕реНрдХрд╛рд▓рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдкреНрд▓рдЧ-рдЗрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рднреА рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ: рд╕реНрдХрд╛рд▓рд╛, рдЬреЛ рд╕реНрд╡рд┐рдЯреНрдЬрд░рд▓реИрдВрдб рдХреЗ рд╢реЛрдзрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдкреИрджрд╛ рд╣реБрдЖ рдерд╛, рдиреЗ рдХрдИ рдирд╡реАрди рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЕрдЪреНрдЫреЗ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдХреЛ рдПрдХ рдЕрддреНрдпрдВрдд рдХрдард┐рди рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред ред рдлрд┐рд▓рд╣рд╛рд▓, JVM рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╡рд╛рд▓реА рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕реЗрдЧрдореЗрдВрдЯ рдЫреЛрдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдкрдиреА рднрд╛рд╖рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рдЗрд╕рдХреЗ рдкреНрд░рддрд┐ рдмрд╣реБрдд рджреВрд░рдЧрд╛рдореА рд▓рдЧрддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рдпрд╣ рднрд╛рд╖рд╛ рд╕рдореБрджрд╛рдп рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд▓реЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди JetBrains рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддреА рд╣реИред рдХреЛрдИ рднреА рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрди рдЬрд░реВрд░рддреЛрдВ рдХреЛ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ: рдЬрд╛рд╡рд╛, рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреА рд╣реИ, рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ (рдкрд╣рд▓реЗ рдХреНрд░рдо рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдЬреЛ рд╣рдо рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ), рднрд╛рд╖рд╛ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрднрд╡ рдмрдирд╛ рджреЗрддреА рд╣реИред рднрд╡рд┐рд╖реНрдп (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреНрдп рдорд╛рдирдХреАрдХрд░рдг)ред рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореБрдЦреНрдп рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрдкрдХрд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП, рднрд╛рд╖рд╛ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдФрд░ рд╕рд░рд▓рддрд╛ рдРрд╕реЗ рд╕рдВрдХреЗрддрдХ рд╣реИрдВ рдЬреЛ рди рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдЯреВрд▓ рдХреА рд╕рд╛рджрдЧреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХреЛрдбрд┐рдВрдЧ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рд▓рд╛рдЧрдд рднреА, рдпрд╛рдиреА рдпрд╣ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕рдордЭреЛред

рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


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

fun foo(text:String) { println(text.toLowerCase()) // NPE? ! } val str:String? = null // String? --   null- foo(str) // <-      -- //  str   String,  //    foo 


рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдПрдирдкреАрдИ рд╕реЗ рдЬреБрдбрд╝реА рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдПрдХ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рдЧрддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдпрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреЛрдЯрд▓рд┐рди рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓реМрдЯрдиреЗ рдкрд░, рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ, Nullable / NotNull рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЗ рдореБрджреНрджреЗ рд╣реИрдВ - рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЬрд╛рд╡рд╛ рдмрд╛рдпреЛрдЯреЗрдХ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдпрд╣ рд╕рд╡рд╛рд▓ рдЕрднреА рднреА рд╕рдорд╛рдзрд╛рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдЕрд╢рдХреНрдд рд╣реИрдВред

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

рдЖрдЗрдП рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рджреЗрдЦреЗрдВ:

 path(array("/notes/")) controller class NotesController { private autowired val notesService : NotesService? = null path(array("all")) fun all() = render("notes/notes") { addObject("notes", notesService!!.all) } //... } 


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

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╕рдВрдд рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдХреЛрдЯрд▓рд┐рди рд╡рд░реНрдЧреЛрдВ рдХреЛ рд▓рдкреЗрдЯ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ - рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

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

 fun doSomething(thing:()->Unit) { //     // ()->Unit     //     thing() //  } doSomething() { //        // ()->Unit      doShomething //   --  ,  //      println("Hello world") } 


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

 fun <T> List<T>.filter(condition:(T)->Boolean):List<T> { val result = list<T>() for(item in this) { if(condition(item)) result.add(item) } return result } val someList = list(1, 2, 3, 4).filter { it > 2 } // someList==[3, 4] 


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

рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рджреЗрдЦреЗрдВ:

 //  bean-  // ,    //     class TimeLord(val name:String) //       class TARDIS(val owner:TimeLord) fun main(args:Array<String>) { val doctor = TimeLord("Doctor") val tardis = TARDIS(doctor) println(tardis.owner.name) } 


рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рд╣рдо рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ, рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдП рдФрд░ TARDIS рдХреЗ рдорд╛рд▓рд┐рдХ рдХрд╛ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛! рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдЧ рдЕрдкрдиреЗ рдПрдХрдорд╛рддреНрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рднреА рд╣реИред рдмрд╣реБрдд рдХрдо рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдгред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдХреА рдирд┐рдВрджрд╛ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЕрдкрдиреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрддрд╛ рд╣реИ - рдЖрдЦрд┐рд░рдХрд╛рд░, рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрдИ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдпрд╛ рддреЛ рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдХреЛрдЯрдкрд╛ рднрд╛рд╖рд╛ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдпрд╣ рд╡рд░реНрдЧ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░рдЦрд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреА рджрдпрд╛ рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред "рдЪрд░" рдФрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдХреЛрдЯрд▓рд┐рди рд╣рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ: val рдпрд╛ var ред рдЬрд╣рд╛рдВ val - рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп final рд▓рд┐рдВрдХ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ var - рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓, рдЬреЛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддреА рд▓рд┐рдВрдХ рдХреЗ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг


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

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП:

 fun main(args: Array<String>) { //    val tree= tree("root") { node("1-1") { node("2-1") node("2-2") } node("1-2") { node("2-3") } } //        tree.traverse { println(it) } } 


рдЕрдм рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЯреНрд░реА рдиреЛрдб рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ:

 /** * @param value   */ class Node<T>(val value:T) { //   private val children:List<Node<T>> = arrayList() /** * ,       * @param value     * @param init    ,  *  */ fun node(value:T, init:Node<T>.()->Unit = {}):Node<T> { val node = Node<T>(value) node.init() children.add(node) return node } /** *          * ,      * @param handler       */ fun traverse(handler:(T)->Unit) { handler(value) children.forEach { child -> child.traverse(handler) } } } 


рдЕрдм рдЯреНрд░реА рдЯреЙрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ:

 /** *      value   *    init. */ fun <T> tree(value:T, init:Node<T>.()->Unit): Node<T> { val node = Node(value) //   init,   // ,    node.init() return node } 


рдХреЛрдб рдХреЗ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ, рдлреЙрд░реНрдо рдХреЗ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ Node.()->Unit, , -, Node. , Node.node(), , .



java , Kotlin java . , .

, , github-, Issue Tracker. , . milestone 3, , , JetBrains, .

Node.()->Unit, , -, Node. , Node.node(), , .



java , Kotlin java . , .

, , github-, Issue Tracker. , . milestone 3, , , JetBrains, .

Node.()->Unit, , -, Node. , Node.node(), , .



java , Kotlin java . , .

, , github-, Issue Tracker. , . milestone 3, , , JetBrains, .

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


All Articles