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

рдЕрдЧрд▓рд╛, рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдмрд╕ Decompile рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдЯрд▓рд┐рди 1.3-рдЖрд░рд╕реА рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм, рдЕрдВрдд рдореЗрдВ, рдореБрдЦреНрдп рднрд╛рдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рд╡рд╕реНрддреБ
Kotlin
object Test
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class Test { public static final Test INSTANCE; static { Test var0 = new Test(); INSTANCE = var0; } }
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдЯрд▓рд┐рди рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рд░ рдХрд┐рд╕реА рд╕реЗ рджреВрд░ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдзрд╛рдЧрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
рд╡рд┐рдШрдЯрд┐рдд рдХреЛрдб рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдкреНрдд рд╕рд┐рдВрдЧрд▓рдЯрди рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рдЙрддреНрд╕реБрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди рд╣реИ, рдпрд╣ рдЙрд╕ рд╕рдордп рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреНрд▓рд╛рд╕ рд▓реЛрдбрд░ рдХрдХреНрд╖рд╛ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдПрдХ рддрд░рдл, рдПрдХ рд╕реНрдерд┐рд░ рдмреНрд▓реЙрдХ рдХреЛ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдПрдХ рдХреНрд▓рд╛рд╕ рдбреНрд░рд╛рдЗрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрдХреНрд╖рд╛ рдЪрд╛рд▓рдХ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдкреНрд░рддрд┐ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдирд┐рдХрд▓ рд╕рдХрддреЗред
рдПрдХреНрд╕рдЯреЗрдВрд╢рди
Kotlin
fun String.getEmpty(): String { return "" }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class TestKt { @NotNull public static final String getEmpty(@NotNull String $receiver) { Intrinsics.checkParameterIsNotNull($receiver, "receiver$0"); return ""; } }
рдпрд╣рд╛рдВ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдмрдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗрд╡рд▓ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдЪреАрдиреА рд╣реИрдВ рдФрд░ рдирд┐рдпрдорд┐рдд рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВред
рдЕрдЧрд░ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ Intrinsics.checkParameterIsNotNull рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдореЗрдВ рдЙрд▓рдЭрд╛ рд╣реБрдЖ рдерд╛, рддреЛ рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ - рдЧреИрд░-рдЕрд╢рдХреНрдд рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдХреЛрдЯрд▓рд┐рди рдПрдХ рдЕрд╢рдХреНрдд рдЪреЗрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдПрдХ рдЕрд╢рдХреНрдд
рд╕реБрдЕрд░ рдлрд┐рд╕рд▓ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдиреЗ рд╡рд╛рджреЛрдВ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
public static void checkParameterIsNotNull(Object value, String paramName) { if (value == null) { throwParameterIsNullException(paramName); } }
рдпрджрд┐ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреНрд░реЙрдкрд░реНрдЯреА рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ
val String.empty: String get() { return "" }
рдлрд┐рд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рд╡рд╣реА рдЪреАрдЬрд╝ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рд╣рдореЗрдВ String.getEmpty () рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдорд┐рд▓реА рдереА
рдЗрдирд▓рд╛рдЗрди
Kotlin
inline fun something() { println("hello") } class Test { fun test() { something() } }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class Test { public final void test() { String var1 = "hello"; System.out.println(var1); } } public final class TestKt { public static final void something() { String var1 = "hello"; System.out.println(var1); } }
рдЗрдирд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рдЗрдирд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рдЗрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдпрд╣ рдЦреБрдж рдХреЛ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдореЗрдВ рднреА рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рд▓рд┐рдПред
рдЗрдирдмреИрдВрдХ рдХреА рд╕рд╛рд░реА рд╢рдХреНрддрд┐ рдЙрд╕ рд╕рдордп рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИ рдЬрдм
рд▓рдВрдмреЛрджрд░ рддрд░реНрдХреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:
Kotlin
inline fun something(action: () -> Unit) { action() println("world") } class Test { fun test() { something { println("hello") } } }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class Test { public final void test() { String var1 = "hello"; System.out.println(var1); var1 = "world"; System.out.println(var1); } } public final class TestKt { public static final void something(@NotNull Function0 action) { Intrinsics.checkParameterIsNotNull(action, "action"); action.invoke(); String var2 = "world"; System.out.println(var2); } }
рдирд┐рдЪрд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ, рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдКрдкрд░реА рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рднреА рдЗрдирдмрд┐рд▓реНрдб рд╣реИ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдирд╛рдо рд╡рд░реНрдЧ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд▓реИрдореНрдмрдбрд╛ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕, рдХреЛрдЯрд▓рд┐рди рдХреЗ рдХрдИ рдЗрдирд▓рд╛рдЗрди рдЬреНрдЮрд╛рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди 2 рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдирд╛рдорд╛рдВрдХрд┐рдд рдФрд░ рдХреНрд░реЙрд╕рд┐рдирд▓рд╛рдЗрдиред рдпреЗ рдРрд╕реЗ рдХреАрд╡рд░реНрдб рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд▓реИрдореНрдмрдбрд╛ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рддрд░реНрдХ рд╣реИред
Kotlin
inline fun something(noinline action: () -> Unit) { action() println("world") } class Test { fun test() { something { println("hello") } } }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class Test { public final void test() { Function0 action$iv = (Function0)null.INSTANCE; action$iv.invoke(); String var2 = "world"; System.out.println(var2); } } public final class TestKt { public static final void something(@NotNull Function0 action) { Intrinsics.checkParameterIsNotNull(action, "action"); action.invoke(); String var2 = "world"; System.out.println(var2); } }
рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде, рдЖрдИрдбреАрдИ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЗрдирд▓рд╛рдЗрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реИред рдФрд░ рдпрд╣ рдЬрд╛рд╡рд╛ рдХреЗ рд╕рдорд╛рди рд╣реА рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдлрд╝рдВрдХреНрд╢рди 0 рдмрдирд╛рддрд╛ рд╣реИред рдХреНрдпреЛрдВ рдЕрдЬреАрдм (рд╕рдорд╛рд░реЛрд╣ 0) рдЕрд╢рдХреНрддрддрд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рдШрдЯрд┐рдд; - рдореБрдЭреЗ рдХреЛрдИ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреАрдХреЙрдореНрдкрд┐рд▓рд░ рдмрдЧ рд╣реЛред
рдХреНрд░реЙрд╕рд┐рдирд▓рд╛рдЗрди, рдмрджрд▓реЗ рдореЗрдВ, рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЗрдирд▓рд╛рдЗрди рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ (рдпрд╛рдиреА, рдпрджрд┐ рддрд░реНрдХ рдореЗрдВ рд▓рдВрдмреЛрджрд░ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ), рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде, рд░рд┐рдЯрд░реНрди рд▓рдВрдмреЛрджрд╛ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрдирд▓рд╛рдЗрди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдЪрд╛рдирдХ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рдЕрд░реНрде рдореЗрдВ, рдЖрдк рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдИрдбреАрдИ рдХрд╕рдо рдЦрд╛рдПрдЧрд╛, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
рдпрд╣рд╛рдВ here рд╡рд╛рдкрд╕реА тАЩрдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрд░реЙрд╕рд┐рдирд▓рд╛рдЗрди рдмрд╛рдпрдЯреЗрдХреЛрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдирд▓рд╛рдЗрди рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ - рдХреАрд╡рд░реНрдб рдХреЗрд╡рд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрдиреНрдлрд╝рд┐рдХреНрд╕
Kotlin
infix fun Int.plus(value: Int): Int { return this+value } class Test { fun test() { val result = 5 plus 3 } }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class Test { public final void test() { int result = TestKt.plus(5, 3); } } public final class TestKt { public static final int plus(int $receiver, int value) { return $receiver + value; } }
Infix рдлрд╝рдВрдХреНрд╢рдВрд╕ рдирд┐рдпрдорд┐рдд рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕ рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рддрд░рд╣ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
tailrec
Kotlin
tailrec fun factorial(step:Int, value: Int = 1):Int { val newValue = step*value return if (step == 1) newValue else factorial(step - 1,newValue) }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class TestKt { public static final int factorial(int step, int value) { while(true) { int newValue = step * value; if (step == 1) { return newValue; } int var10000 = step - 1; value = newValue; step = var10000; } }
рдЯреЗрд▓рд░реЗрдХ рдПрдХ рдмрд▓реНрдХрд┐ рдордиреЛрд░рдВрдЬрдХ рдЪреАрдЬ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдмрд╕ рдПрдХ рдмрд╣реБрдд рдХрдо рдкрдардиреАрдп рдЪрдХреНрд░ рдореЗрдВ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░ рд╢рд╛рдВрддрд┐ рд╕реЗ рд╕реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдмрд╕реЗ рдЕрдкреНрд░рд┐рдп рдХреНрд╖рдг рдореЗрдВ рдХреБрдЫ рднреА рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рдПрдХ рдФрд░ рдЪреАрдЬ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЯреЗрд▓рд░реЗрдХ рдорд┐рд▓ рдкрд╛рдПред
reified
Kotlin
inline fun <reified T>something(value: Class<T>) { println(value.simpleName) }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class TestKt { private static final void something(Class value) { String var2 = value.getSimpleName(); System.out.println(var2); } }
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реНрд╡рдпрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдпрд╣ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЖрдк рдПрдХ рд╕рдВрдкреВрд░реНрдг рд▓реЗрдЦ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЬрд╛рд╡рд╛ рдореЗрдВ рд╣реА рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╕рдВрдХрд▓рд┐рдд рд╕рдордп рдкрд░ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдХреЛрдЯрд▓реАрди рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИред рдкреБрдирд░реАрдХреНрд╖рд┐рдд рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд╕ рдХреЙрдкреА рдФрд░ рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЪрд┐рдкрдХрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ "рдХреЙрд▓" рдХреЗ рджреМрд░рд╛рди, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ
рдкрд╣рд▓реЗ рд╕реЗ
рд╣реА рдкрддрд╛ рдЪрд▓ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдВрдЯреЗрдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЖрдкрдХреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐
рдирд┐рдЬреА рдПрдХреНрд╕реЗрд╕ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдмрд╛рдпрдЯреЗрдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╡реИрд╕реЗ, рдХреЛрдЯрд▓рд┐рди рдХреЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдореЗрдВ
"рдЬрд╛рд╡рд╛ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде 100% рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд▓" рдХреЗ рдХрд╛рд░рдг , рдХрдо рд╕реЗ рдХрдо рдЕрд╢реБрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред

рд╢рд╛рдпрдж рд╕рднреА 99% рдХреЗ рдмрд╛рдж?
init
Kotlin
class Test { constructor() constructor(value: String) init { println("hello") } }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class Test { public Test() { String var1 = "hello"; System.out.println(var1); } public Test(@NotNull String value) { Intrinsics.checkParameterIsNotNull(value, "value"); super(); String var2 = "hello"; System.out.println(var2); } }
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, init рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рд╕реНрд╡рдпрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ
рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдбреЗрдЯрд╛ рд╡рд░реНрдЧ
Kotlin
data class Test(val argumentValue: String, val argumentValue2: String) { var innerValue: Int = 0 }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class Test { private int innerValue; @NotNull private final String argumentValue; @NotNull private final String argumentValue2; public final int getInnerValue() { return this.innerValue; } public final void setInnerValue(int var1) { this.innerValue = var1; } @NotNull public final String getArgumentValue() { return this.argumentValue; } @NotNull public final String getArgumentValue2() { return this.argumentValue2; } public Test(@NotNull String argumentValue, @NotNull String argumentValue2) { Intrinsics.checkParameterIsNotNull(argumentValue, "argumentValue"); Intrinsics.checkParameterIsNotNull(argumentValue2, "argumentValue2"); super(); this.argumentValue = argumentValue; this.argumentValue2 = argumentValue2; } @NotNull public final String component1() { return this.argumentValue; } @NotNull public final String component2() { return this.argumentValue2; } @NotNull public final Test copy(@NotNull String argumentValue, @NotNull String argumentValue2) { Intrinsics.checkParameterIsNotNull(argumentValue, "argumentValue"); Intrinsics.checkParameterIsNotNull(argumentValue2, "argumentValue2"); return new Test(argumentValue, argumentValue2); }
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рдЙрди рддрд╛рд░реАрдЦ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдмрд╣реБрдд рдХреБрдЫ рдХрд╣рд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХреБрдЫ рдмрд┐рдВрджреБ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдХреЗрд╡рд▓ рдЪрд░ рдмрд░рд╛рдмрд░ / рд╣реИрд╢рдХреЛрдб / рдХреЙрдкреА / рд╕реНрдЯреНрд░реАрдВрдЧ рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВред рдпрд╣ рд╕рд╡рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЖрдВрджреНрд░реЗрдИ рдмреНрд░реЗрд╕рд▓реЗрд╡ рдиреЗ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдлрд╝реАрд▓реНрдб рд▓реЗрдирд╛ рднреА рдХрдард┐рди рдФрд░ рдХрдард┐рди рд╣реИред рд╡реИрд╕реЗ, рдХрдХреНрд╖рд╛ рдХреА рддрд╛рд░реАрдЦ рд╕реЗ рд╡рд╛рд░рд┐рд╕ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд╕рдЪреНрдЪрд╛рдИ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд╣реИ
рдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рдХреЛрдб рд╕рд╣реА рдирд╣реАрдВ рд╣реЛрдЧрд╛ ред рджреВрд╕рд░реЗ, рдпрд╣ рдлрд╝реАрд▓реНрдб рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХ 1 () рд╡рд┐рдзрд┐ рдХреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдШрдЯрдХ () рддрд░реАрдХреЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдмреЗрдХрд╛рд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдШреЛрд╖рдгрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдШреЛрд╖рдгрд╛
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджрд┐рдирд╛рдВрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВрдЧреЗ:
Kotlin
class DestructuringDeclaration { fun test() { val (one, two) = Test("hello", "world") } }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class DestructuringDeclaration { public final void test() { Test var3 = new Test("hello", "world"); String var1 = var3.component1(); String two = var3.component2(); } }
рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдПрдХ рд╢реЗрд▓реНрдл рдкрд░ рдзреВрд▓ рдЗрдХрдЯреНрдард╛ рдХрд░ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдорд╛рдирдЪрд┐рддреНрд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ред
рдСрдкрд░реЗрдЯрд░
Kotlin
class Something(var likes: Int = 0) { operator fun inc() = Something(likes+1) } class Test() { fun test() { var something = Something() something++ } }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class Something { private int likes; @NotNull public final Something inc() { return new Something(this.likes + 1); } public final int getLikes() { return this.likes; } public final void setLikes(int var1) { this.likes = var1; } public Something(int likes) { this.likes = likes; }
рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднрд╛рд╖рд╛ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдХреАрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВрдиреЗ рдХрднреА рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдирд╣реАрдВ рджреЗрдЦрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдРрд╕рд╛ рдХреЛрдИ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрджрд░ рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдмрд╣реБрдд рдХреБрдЫ рдЯрд╛рдЗрдкреЗрд▓рд┐рдпрд╛рд╕ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рд╣рд╛рдБ, рдЕрдЧрд░ рдЖрдкрдиреЗ рдЕрднреА рд╕реЛрдЪрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдкрд╣рдЪрд╛рди рдСрдкрд░реЗрдЯрд░ (=== рдЬреЛ) рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджрдмрд╛рдЬреА рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИ рдЬрд┐рд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрдирд▓рд╛рдЗрди рд╡рд░реНрдЧ
Kotlin
inline class User(internal val name: String) { fun upperCase(): String { return name.toUpperCase() } } class Test { fun test() { val user = User("Some1") println(user.upperCase()) } }
рд╡рд┐рдШрдЯрд┐рдд рдЬрд╛рд╡рд╛
public final class Test { public final void test() { String user = User.constructor-impl("Some1"); String var2 = User.upperCase-impl(user); System.out.println(var2); } } public final class User { @NotNull private final String name;
рд╕реАрдорд╛рдУрдВ рд╕реЗ - рдЖрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрдирд▓рд╛рдЗрди рд╡рд░реНрдЧ рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рдПрдХ рдЪрд░ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реЛрддрд╛ рд╣реИред рдЗрдирд▓рд╛рдЗрди рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕реНрдерд┐рд░ рд╣реИрдВред рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдЗрдВрдЯрд░реЛрдкреЗрдВрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдо
рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрдб рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд┐рдШрдЯрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╣рд░ рдХреЛрдб рд╡рд┐рдШрдЯрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдЯрд▓рд┐рди рдбрд┐рдХрдореНрдкреЛрдЬреНрдб рдХреЛрдб рдХреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреА рд╣реИред