рдЧреИрдкреНрд╕ рдЬреАрддреЗред JetBrains рд╕реЗ рдХреЛрдЯрд▓рд┐рди рдХреЛрдбрд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдЕрдиреБрд╡рд╛рдж

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ JetBrains рдХреЗ рдХреЛрдЯрд▓рд┐рди рдХреЛрдбрд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдкреЗрдЬ рдХреЗ рд▓реЗрдЦрдХ рдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред


тЖТ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬ


рд╕рд╛рдордЧреНрд░реА:



рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдЗрдбрд┐рдпрд╛ рдореЗрдВ рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рд╡рд░реНрддрдорд╛рди рдореИрдиреБрдЕрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдЗрдбрд┐рдпрд╛ рдореЗрдВ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЛрдЯрд▓рд┐рди рдкреНрд▓рдЧрдЗрди рд╕рдВрд╕реНрдХрд░рдг 1.2.20 рдпрд╛ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЬрд╛рдПрдВред рд╕рдВрдкрд╛рджрдХ | рдХреЛрдб рд╢реИрд▓реА | рдХреЛрдЯрд▓рд┐рди, рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ "рд╕реЗрдЯ рд╕реЗ ..." рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рдореЗрдиреВ рд╕реЗ "рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╢реИрд▓реА" / рдХреЛрдЯрд▓рд┐рди рд╢реИрд▓реА рдЧрд╛рдЗрдб рдЪреБрдиреЗрдВред


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


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛


рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛


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


рдХреЗрд╡рд▓ рдХреЛрдЯрд▓рд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдЕрдиреБрд╢рдВрд╕рд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рд╣реИ: рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдХреБрд▓ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛, рдЕрд░реНрдерд╛рддред рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рднреА рдХреЛрдб рдкреИрдХреЗрдЬ "org.example.kotlin" рдФрд░ рдЙрд╕рдХреЗ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рд╣реИ, рддреЛ рдкреИрдХреЗрдЬ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрд░реЛрдд "org.example.kotlin" рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдкреИрдХреЗрдЬ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ "orgред" example.kotlin.foo.bar "рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛" рдлреВ / рдмрд╛рд░ "рдореЗрдВ рдЭреВрда рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо


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


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


рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЖрдпреЛрдЬрди


рдПрдХ рд╣реА Kotlin рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдИ рдШреЛрд╖рдгрд╛рдУрдВ (рд╡рд░реНрдЧреЛрдВ, рдХрд╛рд░реНрдпреЛрдВ рдпрд╛ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдЧреБрдгреЛрдВ) рд░рдЦрдиреЗ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ рдЕрдЧрд░ рдпреЗ рдШреЛрд╖рдгрд╛рдПрдВ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╢рдмреНрджрд╛рд░реНрде рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдЙрдЪрд┐рдд рд░рд╣рддрд╛ рд╣реИ (рдХреБрдЫ рд╕реМ рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ)ред


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


рд╡рд░реНрдЧ рд╕рдВрд░рдЪрдирд╛


рдЖрдорддреМрд░ рдкрд░, рдПрдХ рд╡рд░реНрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рдореНрди рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


  • рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рдгрд╛рдПрдВ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреНрд▓реЙрдХ
  • рдорд╛рдзреНрдпрдорд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
  • рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛рдПрдБ
  • рд╕рд╛рдереА рд╡рд╕реНрддреБрдУрдВ

рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рд╡рд░реНрдгрд╛рдиреБрдХреНрд░рдо рдпрд╛ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдХреНрд░рдордмрджреНрдз рди рдХрд░реЗрдВ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рди рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рдХреЛрдб рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдЬреЛ рдХреЛрдИ рднреА рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рдХрдХреНрд╖рд╛ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рд╡рд╣ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдХреЗ рддрд░реНрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреНрд░рдо рдЪреБрдиреЗрдВ (рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХрд╛ рдХреЛрдб рдкрд╣рд▓реЗ [рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╕рд╛рдорд╛рди рдкрд╣рд▓реЗ] рдФрд░ рдмрд╛рдж рдореЗрдВ рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╡рд┐рд╡рд░рдг) рдФрд░ рдЙрд╕ рдкрд░ рдЪрд┐рдкрдХреЗ рд░рд╣реЗрдВред


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


рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлреНрд░реЗрдорд╡рд░реНрдХ


рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдЬрд┐рд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЙрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд░рдЦреЗрдВ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд░реЗрдВ)


рдУрд╡рд░рд░рд╛рдЗрдб рд╕реНрдЯреНрд░рдХреНрдЪрд░


Redefinitions рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рд╛рде, рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдбрд╛рд▓рддреЗ рд╣реИрдВред


рдирд╛рдордХрд░рдг рдирд┐рдпрдо


рдХреЛрдЯрд▓рд┐рди рдЬрд╛рд╡рд╛ рдХреЗ рд╕рдорд╛рди рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ:


рд▓реЛрдЕрд░рдХреЗрд╕ рдкреИрдХреЗрдЬ рдирд╛рдо рдФрд░ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ (org.example.myproject) рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдмрд╣реБ-рд╢рдмреНрдж рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдорддреМрд░ рдкрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЛ рдХрдИ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдпрд╛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдКрдВрдЯ рдХреВрдмрдбрд╝ (org.examle.myProject) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдХреИрдкрд┐рдЯрд▓ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╛рдо рдПрдХ рдХреИрдкрд┐рдЯрд▓ рд▓реЗрдЯрд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдКрдВрдЯ рдХреВрдмрдбрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


 open class DeclarationProcessor { ... } object EmptyDeclarationProcessor : DeclarationProcessor() { ... } 

рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо


рдлрд╝рдВрдХреНрд╢рди, рдЧреБрдг рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдирд╛рдо рдПрдХ рд▓реЛрдЕрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ:


 fun processDeclarations() { ... } var declarationCount = ... 

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


 abstract class Foo { ... } class FooImpl : Foo { ... } fun Foo(): Foo { return FooImpl(...) } 

рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдирд╛рдо


рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ (рдФрд░ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ) рдЙрд▓реНрдЯреЗ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдореЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдРрд╕реЗ рд╡рд┐рдзрд┐ рдирд╛рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рд░рдирдЯрд╛рдЗрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред) рдЯреЗрд╕реНрдЯ рдХреЛрдб рдореЗрдВ рд╡рд┐рдзрд┐ рдирд╛рдореЛрдВ рдореЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреА рднреА рдЕрдиреБрдорддрд┐ рд╣реИред


 class MyTestCase { @Test fun `ensure everything works`() { ... } @Test fun ensureEverythingWorks_onAndroid() { ... } } 

рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдордХрд░рдг


рд▓рдЧрд╛рддрд╛рд░ рдирд╛рдо (рдЧреБрдг рд▓реЗрдмрд▓ const , рдпрд╛ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдЧреБрдг рдпрд╛ рдХрд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд┐рдирд╛ рдПрдХ val рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ) рдХреЛ рдХреИрдкрд┐рдЯрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 const val MAX_COUNT = 8 val USER_NAME_FIELD = "UserName" 

рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдирд╛рдо рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдг рдЬрд┐рд╕рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдбреЗрдЯрд╛ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдКрдВрдЯ рдХреВрдмрдбрд╝ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:


 val mutableCollection: MutableSet<String> = HashSet() 

рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдЬреЛ рд╕рд┐рдВрдЧреНрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рдирд╛рдордХрд░рдг рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 val PersonComparator: Comparator<Person> = ... 

рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдкрдпреЛрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдХреИрдкрд┐рдЯрд▓ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдКрдВрдЯ рдХреВрдмрдбрд╝ рд╢реИрд▓реА рдореЗрдВ, рдХреИрдкрд┐рдЯрд▓ рд▓реЗрдЯрд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 enum class Color { RED, GREEN } 

 enum class Color { RedColor, GreenColor } 

рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ: рдмрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рди рдХрд░реЗрдВред рдПрдХ рд╢реИрд▓реА рдЪреБрдиреЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдЪрд┐рдкрдХрд╛ рджреЗрдВред


рдЫрд┐рдкреЗ рд╣реБрдП рдЧреБрдгреЛрдВ рдХрд╛ рдирд╛рдордХрд░рдг


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


 class C { private val _elementList = mutableListOf<Element>() val elementList: List<Element> get() = _elementList } 

рд╕рд╣реА рдирд╛рдо рдЪреБрдирдирд╛


рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╕рдВрдЬреНрдЮрд╛ рдпрд╛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреНрдпрд╛ рд╣реИ:


 List, PersonReader 

рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдпрд╛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИ:


 close, readPersons 

рдирд╛рдо рдХреЛ рдпрд╣ рднреА рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓рддреА рд╣реИ рдпрд╛ рдПрдХ рдирдпрд╛ рд░рд┐рдЯрд░реНрди рджреЗрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, sort рдПрдХ рдРрд╕рд╛ рд╕реЙрд░реНрдЯ рд╣реИ рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ sorted рдЧрдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреА рдирдИ рд╕реЙрд░реНрдЯ рдХреА рдЧрдИ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреА рд╡рд╛рдкрд╕реА рд╣реИред


рдирд╛рдореЛрдВ рдХреЛ рдЗрдХрд╛рдИ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдирд╛рдореЛрдВ рдореЗрдВ рдЕрд░реНрдерд╣реАрди рд╢рдмреНрджреЛрдВ ( Manager , Wrapper , рдЖрджрд┐) рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрдЪрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред


рдЬрдм рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╛рдо рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреИрдкрд┐рдЯрд▓ рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрджрд┐ рдЗрд╕рдореЗрдВ рджреЛ рдЕрдХреНрд╖рд░ ( IOStream ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ; рдпрд╛ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдЕрдХреНрд╖рд░ рдЕрдкрд░рдХреЗрд╕, рдЕрдЧрд░ рдпрд╣ рд▓рдВрдмрд╛ рд╣реИ ( XmlFormatter , HttpInputStream )ред


рд╕реНрд╡рд░реВрдкрдг


рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХреЛрдЯрд▓рд┐рди рдЬрд╛рд╡рд╛ рдкреНрд░рд╛рд░реВрдкрдг рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред


рдЗрдВрдбреЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 4 рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЯреИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред


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


 if (elements != null) { for (element in elements) { // ... } } 

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


рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдерд╛рди


рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрдЯрд░реЛрдВ (a + b) рдЖрд╕рдкрд╛рд╕ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд░рдЦреЗрдВред рдЕрдкрд╡рд╛рдж: "рдСрдкрд░реЗрдЯрд░" (0..i) рд▓рд┐рдП "рд╕реАрдорд╛" рдХреЗ рдЖрд╕рдкрд╛рд╕ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рди (0..i)


рдЕрдкрд░ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕реНрдерд╛рди рди рд░рдЦреЗрдВ (a++)


рдХреБрдВрдЬреА рдирд┐рдпрдВрддреНрд░рдг рд╢рдмреНрджреЛрдВ рдХреЗ рдмреАрдЪ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд░рдЦреЗрдВ ( if , when , рдХреЗ for рдФрд░ while ) рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╢реБрд░реБрдЖрддреА рдХреЛрд╖реНрдардХред


рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рд╡рд┐рдзрд┐ рдпрд╛ рд╡рд┐рдзрд┐ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдмреНрд░реИрдХреЗрдЯ рдЦреЛрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рди рди рд░рдЦреЗрдВред


 class A(val x: Int) fun foo(x: Int) { ... } fun bar() { foo(1) } 

( , [ рдпрд╛ рдкрд╣рд▓реЗ ] , ) рдмрд╛рдж рдХрднреА рднреА рдПрдХ рдЬрдЧрд╣ рди рд░рдЦреЗрдВред


рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрднреА рднреА рдЬрдЧрд╣ рди рд░рдЦреЗрдВ . рдпрд╛ рдСрдкрд░реЗрдЯрд░ ?. :


 foo.bar().filter { it > 2 }.joinToString() foo?.() 

рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдбрдмрд▓ рд╕реНрд▓реИрд╢ рдХреЗ рдмрд╛рдж рдПрдХ рд╕реНрдерд╛рди рд░рдЦреЗрдВ // :


 //   

рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдг рдХреЛрд╖реНрдардХ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рди рд░рдЦреЗрдВ:


 Class Map<K, V> { ... } 

рдбрдмрд▓ рдХреНрд▓рд╛рд╕ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рди рдбрд╛рд▓реЗрдВ: рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП :: рд╡рд░реНрдЧ рд╡рд┐рдзрд┐:


 Foo::class String::length 

рдкрд╣рд▓реЗ рдПрдХ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ ? рдПрдХ null рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 String? 

рдЖрдо рддреМрд░ рдкрд░, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╖реИрддрд┐рдЬ рд╕рдВрд░реЗрдЦрдг рд╕реЗ рдмрдЪреЗрдВред рдПрдХ рдЕрд▓рдЧ рд▓рдВрдмрд╛рдИ рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рдХреЛрдб рдХреЗ рд╕реНрд╡рд░реВрдкрдг рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдкреЗрдЯ


рдмреГрд╣рджрд╛рдиреНрддреНрд░ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЬрдЧрд╣ рд░рдЦреЛ : рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ:


  • рдЬрдм рдЗрд╕реЗ рд╕реБрдкрд░ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;

 abstract class Foo<out T : Any> 

  • рдЬрдм рдПрдХ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдпрд╛ рдЙрд╕реА рдХреНрд▓рд╛рд╕ рдХреЗ рджреВрд╕рд░реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рд╕реМрдВрдкрдирд╛;

 constructor(x: String) : super(x) { ... } constructor(x: String) : this(x) { ... } 

  • рдХреАрд╡рд░реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рджред

 val x = object : IFoo { ... } 

рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рди рди рд░рдЦреЗрдВ : рдЬрдм рд╡рд╣ рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдФрд░ рдЙрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред


 abstract fun foo(a: Int): T 

рд╣рдореЗрд╢рд╛ рдПрдХ рд╕реНрдерд╛рди рд░рдЦреЗрдВ :


 abstract class Foo<out T : Any> : IFoo { abstract fun foo(a: Int): T } class FooImpl : Foo() { constructor(x: String) : this(x) { ... } val x = object : IFoo { ... } } 

рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдкреНрд░рд╛рд░реВрдкрдг


рдХрдИ рдмреБрдирд┐рдпрд╛рджреА рдирд┐рд░реНрдорд╛рдг рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдЫреЛрдЯреЗ рдирд╛рдореЛрдВ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдПрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ:


 class Person(id: Int, name: String) 

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


 class Person( id: Int, name: String, surname: String ) : Human(id, name) { ... } 

рдЬрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдФрд░ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛, рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдкрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдирд╛рдо рд╡рд╛рдо-рдФрдЪрд┐рддреНрдп рд╣реИ:


 class Person( id: Int, name: String, surname: String ) : Human(id, name), KotlinMaker { ... } 

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


 class MyFavouriteVeryLongClassHolder : MyLongHolder<MyFavouriteVeryLongClass>(), SomeOtherInterface, AndAnotherOne { fun foo() { ... } } 

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


 class MyFavouriteVeryLongClassHolder : MyLongHolder<MyFavouriteVeryLongClass>(), SomeOtherInterface, AndAnotherOne { fun foo() { ... } } 

рдирд┐рд░реНрдорд╛рддрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рдЗрдВрдбреЗрдВрдЯреЗрд╢рди (4 рд░рд┐рдХреНрдд рд╕реНрдерд╛рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


рдФрдЪрд┐рддреНрдп: рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдШреЛрд╖рд┐рдд рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╣реИ рдЬреЛ рд╡рд░реНрдЧ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдШреЛрд╖рд┐рдд рдЧреБрдг рд╣реИрдВред


рд╕рдВрд╢реЛрдзрдХ


рдпрджрд┐ рдХрд┐рд╕реА рд╡рд┐рдЬреНрдЮрд╛рдкрди рдореЗрдВ рдХрдИ рд╕рдВрд╢реЛрдзрдХ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрд╢рд╛ рдЙрдиреНрд╣реЗрдВ рдирд┐рдореНрди рдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ:


 public / protected / private / internal expect / actual final / open / abstract / sealed / const external override lateinit tailrec vararg suspend inner enum / annotation companion inline infix operator data 

рд╕рднреА рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрдХ рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦреЗрдВ:


 @Named("Foo") private val foo: Foo 

рдпрджрд┐ рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдирд┐рд░рд░реНрдердХ рд╕рдВрд╢реЛрдзрдХ (рдЙрджрд╛ред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ) рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред


рдкреНрд░рд╛рд░реВрдк рдПрдиреЛрдЯреЗрд╢рди


рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдШреЛрд╖рдгрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рд╕рдВрд▓рдЧреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╣реА рдЗрдВрдбреЗрдВрдЯ рдХреЗ рд╕рд╛рде:


 @Target(AnnotationTarget.PROPERTY) annotation class JsonExclude 

рддрд░реНрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 @JsonExclude @JvmField var x: String 

рддрд░реНрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЙрд╕реА рд▓рд╛рдЗрди рдкрд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдШреЛрд╖рдгрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реИ:


 @Test fun foo() { ... } 

рдлрд╝рд╛рдЗрд▓ рдПрдиреЛрдЯреЗрд╢рди


рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдкреИрдХреЗрдЬ рдХреЗ рдмрдпрд╛рди рд╕реЗ рдкрд╣рд▓реЗ рдлрд╛рдЗрд▓ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рдж рд░рдЦреА рдЧрдИ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ), рддреЛ рдкреИрдХреЗрдЬ рд╕реЗ рдПрдХ рдЦрд╛рд▓реА рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕ рддрдереНрдп рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд▓рдХреНрд╖рд┐рдд рд╣реИрдВ, рдкреИрдХреЗрдЬ рдирд╣реАрдВ)ред


 /** License, copyright and whatever */ @file:JvmName("FooBar") package foo.bar 

рдХрд╛рд░реНрдп рд╕реНрд╡рд░реВрдкрдг


рдпрджрд┐ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


 fun longMethodName( argument: ArgumentType = defaultValue, argument2: AnotherArgumentType ): ReturnType { // body } 

рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рдЗрдВрдбреЗрдВрдЯреЗрд╢рди (4 рд░рд┐рдХреНрдд рд╕реНрдерд╛рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


рдФрдЪрд┐рддреНрдп: рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛

рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдорд┐рд▓рдХрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред


 fun foo(): Int { // bad return 1 } fun foo() = 1 // good 

рдПрдХрд▓-рдкрдВрдХреНрддрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реНрд╡рд░реВрдкрдг


рдпрджрд┐ рдПрдХрд▓-рд░реЗрдЦрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рдорд╛рди рд░реЗрдЦрд╛ рдкрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ = рдЪрд┐рд╣реНрди рдбрд╛рд▓реЗрдВред 4 рд╕реНрдерд╛рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╢рд░реАрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред


 fun f(x: String) = x.length 

рд╕рдВрдкрддреНрддрд┐ рд╕реНрд╡рд░реВрдкрдг


рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХрд▓-рдкрдВрдХреНрддрд┐ рд╕реНрд╡рд░реВрдкрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ:


 val isEmpty: Boolean get() = size == 0 

рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрд╢рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдФрд░ set :


 val foo: String get() { ... } 

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


 private val defaultCharset: Charset? = EncodingRegistry.getInstance().getDefaultCharsetForPropertiesFiles(file) 

рд╕реНрд╡рд░реВрдкрдг рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрджреЗрд╢


рдпрджрд┐ рдпрд╛ when рдирд┐рдпрдВрддреНрд░рдг рдХрдерди рдмрд╣реБ-рд░реЗрдЦрд╛ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╣реИ, рддреЛ рд╣рдореЗрд╢рд╛ рдХрдерди рдХреЗ рд╢рд░реАрд░ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХрдерди рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ 4 рд╕реНрдерд╛рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд┐рддрд┐ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреА рд░реЗрдЦрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред рд╢рд░реНрдд рдХреЗ рд╕рдорд╛рдкрди рдХреЛрд╖реНрдардХреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд░реЗрдЦрд╛ рдкрд░ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рд░рдЦреЗрдВ:


 if (!component.isSyncing && !hasAnyKotlinRuntimeInScope(module) ) { return createKotlinNotConfiguredPanel(module) } 

рдФрдЪрд┐рддреНрдп: рд╕реНрд╡рдЪреНрдЫ рд╕рдВрд░реЗрдЦрдг рдФрд░ рд╕реНрдерд┐рддрд┐ рд╢рд░реАрд░ рдФрд░ рд╕реНрдерд┐рддрд┐ рд╢рд░реАрд░ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдкреГрдердХреНрдХрд░рдг

else , catch , finally рдХреАрд╡рд░реНрдб, рд╕рд╛рде рд╣реА рдбреВ рдХреЗ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде / рдЬрдмрдХрд┐ рдПрдХ рд╣реА рд▓рд╛рдЗрди рдкрд░ рд▓реВрдк рдХрд░реЗрдВ рдЬреЛ рдкрд┐рдЫрд▓реЗ рд╕рдорд╛рдкрди рдХрд░реНрд▓реА рдмреНрд░реИрдХреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ:


 if (condition) { // body } else { // else part } try { // body } finally { // cleanup } 

рдпрджрд┐ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╢рд░реНрддреЛрдВ рдореЗрдВ рдХрдИ рдмреНрд▓реЙрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЦрд╛рд▓реА рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ:


 private fun parsePropertyValue(propName: String, token: Token) { when (token) { is Token.ValueToken -> callback.visitValue(propName, token.value) Token.LBRACE -> { // ... } } } 

when рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╣реА рд▓рд╛рдЗрди рдкрд░ рдмрдпрд╛рди when рддреЛ рдЫреЛрдЯреЗ рдмреНрд▓реЙрдХ рд░рдЦреЗрдВред


 when (foo) { true -> bar() // good false -> { baz() } // bad } 

рд╕реНрд╡рд░реВрдкрдг рд╡рд┐рдзрд┐ рдХреЙрд▓


рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рд▓рдВрдмреА рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХреЛрд╖реНрдардХ рдХреЗ рдмрд╛рдж рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рд▓рдЧрд╛рдПрдВред 4 рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдФрд░ рддрд░реНрдХ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд░реЗрдВред


 drawSquare( x = 10, y = 10, width = 100, height = 100, fill = true ) 

рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рдФрд░ рдЙрд╕рдХреЗ рдорд╛рди рдХреЗ рдмреАрдЪ рд╕рдорд╛рди рдЪрд┐рд╣реНрди рдХреЗ рдЖрд╕рдкрд╛рд╕ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


рдПрдХ рдЪреЗрди рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдлреЙрд░реНрдореЗрдЯ рдХрд░рдирд╛


рдЬрдВрдЬреАрд░ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд░рдЦреЛ . рдпрд╛ ?. 4 рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдПрдХ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╡рд╛рд▓реА рдирдИ рд▓рд╛рдЗрди рдкрд░ рдСрдкрд░реЗрдЯрд░:


 val anchor = owner ?.firstChild!! .siblings(forward = true) .dropWhile { it is PsiComment || it is PsiWhiteSpace } 

рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд╣рд▓реА рдХреЙрд▓ рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХрд┐ рдХреЛрдб рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдП рдФрд░ рдпрд╣ рд╕рдордЭ рдореЗрдВ рди рдЖрдПред


рд╕реНрд╡рд░реВрдкрдг рд▓рдВрдмреЛрджрд░ рднрд╛рд╡


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


 list.filter { it > 10 } 

рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдмрд▓ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рд▓реЗрдмрд▓ рдФрд░ рд╢реБрд░реБрдЖрддреА рдмреНрд░реЗрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдерд╛рди рди рд░рдЦреЗрдВ:


 fun foo() { ints.forEach lit@{ // ... } } 

рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдореЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп, рдирд╛рдореЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд▓рд╛рдЗрди, рдлрд┐рд░ рдПрд░реЛ, рдФрд░ рдирдИ рд▓рд╛рдЗрди рдкрд░ рдлрдВрдХреНрд╢рди рдмреЙрдбреА рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд░рдЦреЗрдВ:


 appendCommaSeparated(properties) { prop -> val propertyValue = prop.get(obj) // ... } 

рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪреА рдПрдХ рд▓рд╛рдЗрди рдкрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рддреАрд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд▓рд╛рдЗрди рдкрд░ рд░рдЦреЗрдВ:


 foo { context: Context, environment: Env -> context.configureEnv(environment) } 

рдкреНрд░рд▓реЗрдЦрди рдмрдирд╛рдирд╛


рдорд▓реНрдЯреА-рд▓рд╛рдЗрди рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдЕрд▓рдЧ рд▓рд╛рдЗрди рдкрд░ /** рдбрд╛рд▓реЗрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреА рд▓рд╛рдЗрди рдХреЛ рдПрдХ рддрд╛рд░рд╛рдВрдХрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ:


 /** * This is a documentation comment * on multiple lines. */ 

рд▓рдШреБ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 /** This is a short documentation comment. */ 

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


 // Avoid doing this: /** * Returns the absolute value of the given number. * @param number The number to return the absolute value for. * @return The absolute value. */ fun abs(number: Int) = ... // Do this instead: /** * Returns the absolute value of the given [number]. */ fun abs(number: Int) = ... 

рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрдорд╛рдгреЛрдВ рд╕реЗ рдмрдЪрдирд╛


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


рдХреАрд╡рд░реНрдб рдпреВрдирд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдпреВрдирд┐рдЯ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:


 fun foo() { // ": Unit" is omitted here } 

рд╕реЗрдореАрдХреЛрд▓рди


рд╣рд░ рдЕрд╡рд╕рд░ рдкрд░ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред


рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрдЯрд░реНрди


рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрд░ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдХреЗрд╡рд▓ рд▓рдВрдмреЗ рднрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


 println("$name has ${children.size} children") 

рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдЙрдкрдпреЛрдЧ


рдЕрдЪрд▓рддрд╛


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


рд╕рдВрдЧреНрд░рд╣ рдмрджрд▓рдиреЗ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ Collection рд╕рдВрдЧреНрд░рд╣ рдЗрдВрдЯрд░рдлреЗрд╕ ( Collection , List , Set , Map ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рд░ рдЕрд╡рд╕рд░ рдкрд░, рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрдЧреНрд░рд╣ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:


 // Bad: use of mutable collection type for value which will not be mutated fun validateValue(actualValue: String, allowedValues: HashSet<String>) { ... } // Good: immutable collection type used instead fun validateValue(actualValue: String, allowedValues: Set<String>) { ... } // Bad: arrayListOf() returns ArrayList<T>, which is a mutable collection type val allowedValues = arrayListOf("a", "b", "c") // Good: listOf() returns List<T> val allowedValues = listOf("a", "b", "c") 

: .



.


 // Bad fun foo() = foo("a") fun foo(a: String) { ... } // Good fun foo(a: String = "a") { ... } 

[Type alias]


, , :


 typealias MouseClickHandler = (Any, MouseEvent) -> Unit typealias PersonIndex = Map<String, Person> 

-


-, , it . - .


-


. - , . , - .


( @ ) .



, , boolean , .


 drawSquare(x = 10, y = 10, width = 100, height = 100, fill = true) 


try , if when , return :


 return if (x) foo() else bar() //   ,    if (x) return foo() else return bar() // return when(x) { 0 -> "zero" else -> "nonzero" } //   ,    when(x) { 0 -> return "zero" else -> return "nonzero" } 

if when


if when


 when (x) { null -> ... else -> ... } if (x == null) ... else ... //      

, when .


Boolean?


Boolean? , if (value == true) if (value == false) , if (value ?: false) if (value != null && value) .



filtet , map .. . : forEach ( for null forEach )


, , , .



until ( ):


 for (i in 0..n - 1) { ... } // bad for (i in 0 until n) { ... } // good 


.


\n escape- .


, trimIndent , , trimMargin , :


 assertEquals( """ Foo Bar """.trimIndent(), value ) val a = """if(a > 1) { | return a |}""".trimMargin() 


. , , .


:


  • ( )
  • ,


. , , , , . API, , . , .



infix , , . : and , to , zip . : add .


infix , .



, , . , , . , , .


 class Point(val x: Double, val y: Double) { companion object { fun fromPolar(angle: Double, radius: Double) = Point(...) } } 

, , .



: , , Kotlin null , null

public /, , Kotlin:


 fun apiCall(): String = MyJavaApi.getProperty("name") 

(package-level class-level) Kotlin:


 class Person { val name: String = MyJavaApi.getProperty("name") } 

, , Kotlin :


 fun main() { val name = MyJavaApi.getProperty("name") println(name) } 

apply / with / run / also / let


Kotlin . , :


  • ? , , it , this ( also let ). also , .

 // Context object is 'it' class Baz { var currentBar: Bar? val observable: Observable val foo = createBar().also { currentBar = it // Accessing property of Baz observable.registerCallback(it) // Passing context object as argument } } // Receiver not used in the block val foo = createBar().also { LOG.info("Bar created") } // Context object is 'this' class Baz { val foo: Bar = createBar().apply { color = RED // Accessing only properties of Bar text = "Foo" } } 

  • ? , apply also . , with , let run .

 // Return value is context object class Baz { val foo: Bar = createBar().apply { color = RED // Accessing only properties of Bar text = "Foo" } } // Return value is block result class Baz { val foo: Bar = createNetworkConnection().let { loadBar() } } 

  • null ? , apply , let run . , with also .

 // Context object is nullable person.email?.let { sendEmail(it) } // Context object is non-null and accessible directly with(person) { println("First name: $firstName, last name: $lastName") } 


API:


  • ( API)
  • ( )
  • KDoc public api, , /

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


All Articles