{"id":275118,"date":"2016-02-29T09:26:02","date_gmt":"2016-02-29T06:26:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=275118"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=275118","title":{"rendered":"\u041a\u0430\u043a \u0441\u0435\u0431\u0435 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0432 \u043d\u043e\u0433\u0443 \u0432 Kotlin"},"content":{"rendered":"<p>       \u0421\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u0448\u0435\u043b <a href=\"http:\/\/blog.jetbrains.com\/kotlin\/2016\/02\/kotlin-1-0-released-pragmatic-language-for-jvm-and-android\/\">\u0440\u0435\u043b\u0438\u0437<\/a> Kotlin, \u0430 \u0435\u0433\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b\u0430 <a href=\"https:\/\/habrahabr.ru\/company\/JetBrains\/blog\/277573\/\">\u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b<\/a> \u043f\u0440\u043e \u044f\u0437\u044b\u043a. \u041e\u043d \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430 \u0441\u043b\u0443\u0445\u0443 \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043c\u043d\u043e\u0433\u0438\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c. <br \/>  \u041f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u043d\u0430\u0437\u0430\u0434 \u0442\u0438\u043c\u043b\u0438\u0434 \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u041a\u043e\u0442\u043b\u0438\u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u043e. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u044b\u043b \u00ab\u0410 \u043a\u0430\u043a \u0432 \u041a\u043e\u0442\u043b\u0438\u043d\u0435 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443?\u00bb \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u044f.<\/p>\n<p>  Disclaimer:<br \/>  \u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u043a\u0430\u043a \u00abKotlin \u2014 \u043e\u0442\u0441\u0442\u043e\u0439\u00bb. \u0425\u043e\u0442\u044f \u044f \u043e\u0442\u043d\u043e\u0448\u0443\u0441\u044c \u0441\u043a\u043e\u0440\u0435\u0435 \u043a \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u0438 \u0441\u043e Scala \u0445\u043e\u0440\u043e\u0448\u043e, \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u044f\u0437\u044b\u043a \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439. <br \/>  \u0412\u0441\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u0441\u043f\u043e\u0440\u043d\u044b\u0435, \u043d\u043e \u0440\u0430\u0437 \u0432 \u0433\u043e\u0434 \u0438 \u043f\u0430\u043b\u043a\u0430 \u0441\u0442\u0440\u0435\u043b\u044f\u0435\u0442. \u041a\u043e\u0433\u0434\u0430-\u0442\u043e \u0432\u044b \u0441\u0435\u0431\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u0435 \u0437\u0430\u043e\u0434\u043d\u043e \u0438 \u0431\u0430\u0448\u043a\u0443, \u0430 \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0443 \u0432\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u043e\u043b\u043d\u043e\u0447\u044c \u043f\u043e\u043b\u043d\u043e\u043b\u0443\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u0435 \u0447\u0435\u0440\u043d\u044b\u0439 \u0440\u0438\u0442\u0443\u0430\u043b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043b\u043e\u0445\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 Scala, \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u043c\u0435\u043b\u044c\u0447\u0435 \u043d\u0430 Kotlin, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043e Scala. \u042f \u0431\u0443\u0434\u0443 \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e Nullable \u0432 Kotlin \u2014 \u044d\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 Option, \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u0430\u043a, \u043d\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 Option, \u0431\u0443\u0434\u0443\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Nullable.<\/p>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>1. \u041f\u043e\u0441\u0442-\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0438 \u043f\u0440\u0435\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u043a\u0430\u043a \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h4>\n<p>  \u0426\u0438\u0442\u0438\u0440\u0443\u044e \u0432\u043e\u043f\u0440\u043e\u0448\u0430\u0432\u0448\u0435\u0433\u043e: \u00ab\u0424\u0443, \u044d\u0442\u043e \u0436 \u0431\u0430\u044f\u043d, \u0441\u043a\u0443\u0447\u043d\u043e\u00bb. \u0421\u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043f\u0438\u0439 \u0441\u043b\u043e\u043c\u0430\u043d\u043e, \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u0445 C++\u2026 \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0435\u0433\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 (statement&#8217;\u043e\u043c). \u0421\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0441\u0442\u0438 \u0440\u0430\u0434\u0438, \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u0432\u0440\u043e\u0434\u0435 +=, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438. <br \/>  <a href=\"https:\/\/habrahabr.ru\/company\/JetBrains\/blog\/277573\/#comment_8784811\">\u0426\u0438\u0442\u0438\u0440\u0443\u044e<\/a> \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432,  <a href=\"https:\/\/habrahabr.ru\/users\/abreslav\/\" class=\"user_link\">abreslav<\/a>:  <\/p>\n<blockquote><p>\u0421\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043d\u0430 \u044e\u0437\u043a\u0435\u0439\u0441\u044b, \u0443\u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u043f\u043e\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f, \u0440\u0435\u0448\u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c.<\/p>\n<p>  \u0417\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0442\u0443\u0442 \u043d\u0435 \u0421++, \u0438 \u043d\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043e\u0441\u043e\u0431\u043e \u043d\u0435\u0447\u0435\u0433\u043e. \u0420\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u044b\u043c \u0438 \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u043d\u044b\u043c.<\/p><\/blockquote>\n<p>\u041d\u0430 \u043d\u0435\u0442 \u0438 \u0441\u0443\u0434\u0430 \u043d\u0435\u0442. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u043c \u0443\u043c\u0435 \u043d\u0438\u043a\u0442\u043e \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u2014 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c.  <\/p>\n<pre><code class=\"scala\">    var i = 5     i = i++ + i++     println(i) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e undefined behaviour, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, 12<\/b><\/p>\n<div class=\"spoiler_text\">11<\/div>\n<\/div>\n<p>  <\/p>\n<pre><code class=\"scala\">    var a = 5     a = ++a + ++a     println(a) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0449\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, 14<\/b><\/p>\n<div class=\"spoiler_text\">13<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">  <\/p>\n<pre><code class=\"scala\">    var b = 5     b = ++b + b++     println(b) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0411\u0430\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043c\u0435\u0436\u0434\u0443 11 \u0438 13<\/b><\/p>\n<div class=\"spoiler_text\">\u0434\u0430, 12<\/div>\n<\/div>\n<p>  <\/p>\n<pre><code class=\"scala\">    var c = 5     c = c++ + ++c     println(c) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u0435\u0441\u0442 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0445 \u0441\u0443\u043c\u043c\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, 12<\/div>\n<\/div>\n<p>   <\/p>\n<pre><code class=\"scala\">    var d = 5     d = d + d++ + ++d + ++d     println(d)      var e = 5     e = ++e + ++e + e++ + e     println(e) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u0435\u0441\u0442 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0445 \u0441\u0443\u043c\u043c\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f!<\/b><\/p>\n<div class=\"spoiler_text\">\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f:<br \/>  25<br \/>  28  <\/div>\n<\/div>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0451 \u0442\u0430\u043c \u0432 Scala?<\/b><\/p>\n<div class=\"spoiler_text\"> \u041d\u0438\u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e, \u0432 Scala \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435\u0442. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043d\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 ++ \u0434\u043b\u044f Int. \u041d\u043e \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u0445\u043e\u0442\u0435\u0442\u044c, \u0435\u0433\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c.  <\/div>\n<\/div>\n<p>  <\/p>\n<h4>2. \u041e\u0434\u043e\u0431\u0440\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431<\/h4>\n<p>   <\/p>\n<pre><code class=\"scala\">    val foo: Int? = null     val bar = foo!! + 5 <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0445\u043e\u0442\u0435\u043b\u0438, \u0442\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438<\/b><\/p>\n<div class=\"spoiler_text\">Exception in thread \u00abmain\u00bb kotlin.KotlinNullPointerException<\/div>\n<\/div>\n<p>  \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0442\u043e\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c NullPointerException. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443: !! \u0440\u0435\u0436\u0435\u0442 \u0433\u043b\u0430\u0437 \u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u0437\u0433\u043b\u044f\u0434\u0435 \u043d\u0430 \u043a\u043e\u0434 \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 !! \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 null \u0438 smart cast \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0418\u043b\u0438 \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c null.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0451 \u0442\u0430\u043c \u0432 Scala?<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"scala\">    val foo: Option[Int] = None     val bar = foo.get + 5 <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0445\u043e\u0442\u0435\u043b\u0438, \u0442\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438<\/b><\/p>\n<div class=\"spoiler_text\">Exception in thread \u00abmain\u00bb java.util.NoSuchElementException: None.get<\/div>\n<\/div>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h4>3. \u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 invoke()<\/h4>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e: \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u0438 \u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0443 a?    <\/p>\n<pre><code class=\"scala\">    class A(){...}     val a = A() <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0430 \u0433\u043b\u0443\u043f\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 &#8212; \u0433\u043b\u0443\u043f\u044b\u0439 \u043e\u0442\u0432\u0435\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 A, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/div>\n<\/div>\n<p>  \u0410 \u0437\u0434\u0435\u0441\u044c \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442?   <\/p>\n<pre><code class=\"scala\">    class \u0412 private constructor(){...}     val b = B() <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0443, \u043d\u0430\u0432\u0435\u0440\u043d\u043e, \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442&#8230;<\/b><\/p>\n<div class=\"spoiler_text\">\u0410 \u0432\u043e\u0442 \u0438 \u043d\u0435\u0442!    <\/p>\n<pre><code class=\"scala\">class B private constructor(){     var param = 6      constructor(a: Int): this(){         param = a     }      companion object{         operator fun invoke() = B(7)     } } <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0444\u0430\u0431\u0440\u0438\u043a\u0430. \u0410 \u0435\u0441\u043b\u0438 \u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 A, \u0442\u043e \u0442\u0430\u043c \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u0431\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440.  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u0433\u043e\u0442\u043e\u0432\u044b:   <\/p>\n<pre><code class=\"scala\">    class \u0421 private constructor(){...}     val c = C() <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 \u0421 \u0447\u0435\u0440\u0435\u0437 \u0444\u0430\u0431\u0440\u0438\u043a\u0443, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435-\u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u0421.<\/b><\/p>\n<div class=\"spoiler_text\"> \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0435\u0442!   <\/p>\n<pre><code class=\"scala\">class C private constructor(){    ...     companion object{         operator fun invoke() = A(9)     } } <\/code><\/pre>\n<p>  \u0423 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 c \u0431\u0443\u0434\u0435\u0442 \u0442\u0438\u043f A. \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e A \u0438 \u0421 \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0443\u0437\u0430\u043c\u0438.  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>class A(){     var param = 5      constructor(a: Int): this(){         param = a     }      companion object{         operator fun invoke()= A(10)     } }  class B private constructor(){     var param = 6      constructor(a: Int): this(){         param = a     }      companion object{         operator fun invoke() = B(7)     } }  class C private constructor(){     var param = 8      constructor(a: Int): this(){         param = a     }      companion object{         operator fun invoke() = A(9)     } }  class D(){     var param = 10      private constructor(a: Int): this(){         param = a     }      companion object{         operator fun invoke(a: Int = 25) = D(a)     } }  fun main(args: Array&lt;String&gt;) {     val a = A()     val b = B()     val c = C()     val d = D()     println(&quot;${a.javaClass}, ${a.param}&quot;)     println(&quot;${b.javaClass}, ${b.param}&quot;)     println(&quot;${c.javaClass}, ${c.param}&quot;)     println(&quot;${d.javaClass}, ${d.param}&quot;) } <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:<\/p>\n<pre> class A, 5 class B, 7 class A, 9 class D, 10 <\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0434\u0435 \u0443 \u0432\u0430\u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0435 \u043f\u043e\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f, \u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u043d\u0435 \u0441\u043c\u043e\u0433. \u041d\u043e \u043f\u043e\u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e. \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0435\u0440\u043d\u0435\u0442\u0435 \u043b\u0435\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c C, \u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u0430\u0441 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u044b\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0442\u0438\u043d\u0443\u044e \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044e, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u041d\u0438\u0447\u0435\u0433\u043e \u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e, \u043d\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0439\u0442\u0438 \u0441 \u0443\u043c\u0430 \u0438 \u0437\u0430\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430 \u043a\u043b\u0430\u0441\u0441\u0430.<br \/>  \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c (Animal), \u0430 invoke() \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430 (Dog) \u0432\u0435\u0440\u043d\u0435\u0442 \u0432\u0430\u043c \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430 (Duck), \u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0442\u0438\u043f\u043e\u0432 (Animal as Dog) \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043a\u0440\u044f\u043a\u0430\u0442\u044c \u0441\u0435\u0431\u0435 \u0431\u0435\u0434\u0443.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0451 \u0442\u0430\u043c \u0432 Scala?<\/b><\/p>\n<div class=\"spoiler_text\">\u0412 Scala \u043f\u0440\u043e\u0449\u0435 \u2014 \u0435\u0441\u0442\u044c new, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 new, \u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 apply \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d\u0430 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043b\u0435\u0432\u044b\u0439 \u0442\u0438\u043f). \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432\u0430\u043c \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0438\u0437-\u0437\u0430 private, \u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0440\u0443\u0433\u043d\u0435\u0442\u0441\u044f. \u0412\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0435\u0435.   <\/div>\n<\/div>\n<p>  <\/p>\n<h4>4. lateinit<\/h4>\n<p>  <\/p>\n<pre><code>class SlowPoke(){     lateinit var value: String      fun test(){         if (value == null){ \/\/\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u0434\u0435\u0441\u044c \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 (\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442)             println(&quot;null&quot;)             return         }         if (value == &quot;ololo&quot;)             println(&quot;ololo!&quot;)         else             println(&quot;alala!&quot;)     } } SlowPoke().test() <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c<\/b><\/p>\n<div class=\"spoiler_text\">Exception in thread \u00abmain\u00bb kotlin.UninitializedPropertyAccessException: lateinit property value has not been initialized<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e?<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>class SlowBro(){     val value: String? = null      fun test(){         if (value == null) {             println(&quot;null&quot;)             return         }         if (value == &quot;ololo&quot;)             println(&quot;ololo!&quot;)         else             println(&quot;alala!&quot;)     } } SlowBro().test() <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/b><\/p>\n<div class=\"spoiler_text\">null<\/div>\n<\/div>\n<p>  <\/div>\n<\/div>\n<p>  \u042f \u0431\u044b \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043e\u0434\u043e\u0431\u0440\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431, \u043d\u043e \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u044d\u0442\u043e \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 !!. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0443\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u0447\u0442\u043e, \u043c\u043e\u043b, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e, \u043c\u044b \u043a\u0438\u043d\u0435\u043c \u0442\u0435\u0431\u0435 Exception. \u041f\u043e \u0438\u0434\u0435\u0435, \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0442\u043e\u0447\u043d\u043e \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u043f\u043e\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043a\u0435\u043c-\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u043c. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0438\u043a\u043e\u0433\u0434\u0430. \u041f\u043e \u043c\u043e\u0435\u043c\u0443 \u043e\u043f\u044b\u0442\u0443, \u0432\u0441\u0435 \u043f\u043e\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 lateinit, \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u0441\u0442\u0430\u043b\u0438 Nullable. \u041d\u0435\u043f\u043b\u043e\u0445\u043e \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0432\u043f\u0438\u0441\u0430\u043b\u043e\u0441\u044c \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 JavaFX \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 Gui \u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u0438\u0437 FXML, \u043d\u043e \u0434\u0430\u0436\u0435 \u044d\u0442\u043e \u00ab\u0436\u0435\u043b\u0435\u0437\u043e\u0431\u0435\u0442\u043e\u043d\u043d\u043e\u0435\u00bb \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0441\u0432\u0435\u0440\u0433\u043d\u0443\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u0435\u0437 \u043f\u0430\u0440\u044b \u043a\u043d\u043e\u043f\u043e\u043a. \u041e\u0434\u0438\u043d \u0440\u0430\u0437 \u0442\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432 SceneBuilder \u0438\u0437\u043c\u0435\u043d\u0438\u043b fx:id, \u0430 \u0432 \u043a\u043e\u0434\u0435 \u0437\u0430\u0431\u044b\u043b. \u0412 \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u043d\u0438 \u043a\u043e\u0434\u0438\u043d\u0433\u0430 \u043d\u0430 Kotlin \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0437\u0431\u0435\u0441\u0438\u043b\u043e, \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c lateinit Int. \u042f \u043c\u043e\u0433\u0443 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043b\u0438, \u043d\u043e \u0441\u043e\u043c\u043d\u0435\u0432\u0430\u044e\u0441\u044c, \u0447\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b (\u0447\u0438\u0442\u0430\u0439: \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u044c).<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0451 \u0442\u0430\u043c \u0432 Scala?<\/b><\/p>\n<div class=\"spoiler_text\">\u0410 \u0442\u0430\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0430 lateinit \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0438 \u043d\u0435\u0442. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u044f \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b.<\/div>\n<\/div>\n<p>  <\/p>\n<h4>5. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440<\/h4>\n<p>  <\/p>\n<pre><code>class IAmInHurry(){     val param = initSecondParam()     \/*tons of code*\/     val twentySecondParam = 10     \/*tons of code*\/     fun initSecondParam(): Int{         println(&quot;Initializing by default with $twentySecondParam&quot;)         return twentySecondParam     }  } class IAmInHurryWithStrings(){     val param = initSecondParam()     \/*tons of code*\/     val twentySecondParam = &quot;Default value of param&quot;     \/*tons of code*\/     fun initSecondParam(): String{         println(&quot;Initializing by default with $twentySecondParam&quot;)         return twentySecondParam     } } fun main(args: Array&lt;String&gt;){     IAmInHurry()     IAmInHurryWithStrings() } <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/b><\/p>\n<div class=\"spoiler_text\">Initializing by default with 0<br \/>  Initializing by default with null<\/div>\n<\/div>\n<p>  \u0412\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u043a \u043f\u043e\u043b\u044e \u0438\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e. \u0412\u0438\u0434\u0438\u043c\u043e, \u0442\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440. \u041f\u043e \u0438\u0434\u0435\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u043a\u043e\u0434 \u0445\u043e\u0440\u043e\u0448\u043e, \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0443 \u0432\u0430\u0441 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c, \u043d\u043e \u0432\u0441\u044f\u043a\u043e\u0435 \u0431\u044b\u0432\u0430\u0435\u0442, \u043d\u0435 \u0441 \u043f\u043e\u0442\u043e\u043b\u043a\u0430 \u0436\u0435 \u044f \u0432\u0437\u044f\u043b \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 (\u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0441\u0435\u0431\u0435 \u0442\u0430\u043a \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u043b \u0432 \u043d\u043e\u0433\u0443, \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u0440\u0435\u0434\u043a\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u043c \u043a\u043e\u0434\u0435 \u0432\u044b\u0437\u0432\u0430\u043b \u043f\u043e\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b\u043b\u043e \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e).<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0451 \u0442\u0430\u043c \u0432 Scala?<\/b><\/p>\n<div class=\"spoiler_text\">\u0412\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435.  <\/p>\n<pre><code class=\"scala\">object Initializer extends App{   class IAmInHurry(){     val param = initSecondParam()     \/*tons of code*\/     val twentySecondParam = 10     \/*tons of code*\/     def initSecondParam(): Int = {       println(s&quot;Initializing by default with $twentySecondParam&quot;)       twentySecondParam     }    }    class IAmInHurryWithStrings(){     val param = initSecondParam()     \/*tons of code*\/     val twentySecondParam = &quot;Default value of param&quot;     \/*tons of code*\/     def initSecondParam(): String = {       println(s&quot;Initializing by default with $twentySecondParam&quot;)       twentySecondParam     }    }    override def main(args: Array[String]){     new IAmInHurry()     new IAmInHurryWithStrings()   } } <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/b><\/p>\n<div class=\"spoiler_text\">Initializing by default with 0<br \/>  Initializing by default with null<\/div>\n<\/div>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h4>6. \u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 Java<\/h4>\n<p>  \u0414\u043b\u044f \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0430 \u0442\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0440 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0438\u0437 Java, Nullable. \u041d\u043e \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u0434\u043e\u043b\u0433\u0430\u044f \u0438 \u043f\u043e\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f <a href=\"http:\/\/blog.jetbrains.com\/kotlin\/2015\/04\/upcoming-change-more-null-safety-for-java\/\">\u0438\u0441\u0442\u043e\u0440\u0438\u044f<\/a>. \u041a\u0430\u043a \u044f \u043f\u043e\u043d\u044f\u043b, \u043e\u043d\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438, \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u043e\u0439 Java-Kotlin-Java. \u0418 \u043f\u0440\u0438 \u0442\u0430\u043a\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b\u0438 \u043e\u0442 \u0438\u0434\u0435\u0438 \u00ab\u0432\u0441\u0435 Nullable\u00bb \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f. <br \/>  \u041d\u043e \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u2014 \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u043f\u0438\u0448\u0435\u043c \u043d\u0430 Kotlin, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043b\u0438 \u0431\u0435\u0440\u0435\u043c Java (\u043a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0441\u044f \u043c\u043d\u0435, \u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443 \u043a\u0440\u0435\u0441\u0442\u044c\u044f\u043d\u0438\u043d\u0443-\u043a\u043e\u0434\u0435\u0440\u0443). \u0418 \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u0435, \u043b\u0443\u0447\u0448\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u0438 \u044f\u0432\u043d\u044b\u0435 \u043a\u043e\u0441\u0442\u044b\u043b\u0438 \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0435\u043c \u00ab\u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e\u00bb + \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u044b\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 (\u0438\u043b\u0438 \u044f\u043c\u0430 \u0441 \u043a\u043e\u043b\u044c\u044f\u043c\u0438, \u043a\u0430\u043a \u043f\u043e\u0432\u0435\u0437\u0435\u0442). \u041d\u043e \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0434\u0440\u0443\u0433\u043e\u0435 <a href=\"https:\/\/habrahabr.ru\/company\/JetBrains\/blog\/277573\/#comment_8784731\">\u043c\u043d\u0435\u043d\u0438\u0435<\/a>:  <\/p>\n<blockquote><p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u0431\u044b\u043b\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0442\u0430\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e, \u0430 \u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u2014 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e. \u041f\u043e\u0432\u0441\u044e\u0434\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u0432\u043e\u0441\u043a\u043b\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c-\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0430 \u043d\u0435 \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0432 null. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u044c\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u043e\u0432: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Map&lt;String?, String?&gt;?..  <\/p><\/blockquote>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u043d\u0430 Java:  <\/p>\n<pre><code class=\"java\">public class JavaCopy {     private String a = null;      public JavaCopy(){};      public JavaCopy(String s){         a = s;     }      public String get(){         return a;     } } <\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0435\u0433\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u0437 Kotlin:  <\/p>\n<pre><code>    fun printString(s: String) {         println(s)     }      val j1 = JavaCopy()     printString(j1Got) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/b><\/p>\n<div class=\"spoiler_text\"> Exception in thread \u00abmain\u00bb java.lang.IllegalStateException: j1Got must not be null <\/div>\n<\/div>\n<p>  \u0422\u0438\u043f \u0443 j1 \u2014 String! \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u043e\u0432\u0435\u043c printString. \u041e\u043a, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0442\u0438\u043f:<\/p>\n<pre><code>    val j2 = JavaCopy(&quot;Test&quot;)     val j3 = JavaCopy(null)      val j2Got: String = j2.get()     val j3Got: String = j3.get()      printString(j2Got)     printString(j3Got) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/b><\/p>\n<div class=\"spoiler_text\"> Exception in thread \u00abmain\u00bb java.lang.IllegalStateException: j3.get() must not be null <\/div>\n<\/div>\n<p>  \u0412\u0441\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d NotNullable, \u0442\u043e\u0433\u0434\u0430 \u0438 \u043b\u043e\u0432\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0439 \u0443 \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 Nullable, \u0438 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e. \u041d\u043e \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code>printString(j2.get())<\/code><\/pre>\n<p>\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0443 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u0440\u043e.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0451 \u0442\u0430\u043c \u0432 Scala?<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439, NPE \u0441\u043b\u043e\u0432\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0432 Option, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0435\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u0447\u0442\u043e Option(null) = None. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0442\u0443\u0442 \u043d\u0435\u0442 \u0438\u043b\u043b\u044e\u0437\u0438\u0439, \u0447\u0442\u043e java interop \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d.<\/div>\n<\/div>\n<p>  <\/p>\n<h4>7. infix \u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0438 \u043b\u044f\u043c\u0431\u0434\u044b<\/h4>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0435\u0435:  <\/p>\n<pre><code>fun&lt;R&gt; first(func: () -&gt; R): R{     println(&quot;calling first&quot;)     return func() }  infix fun&lt;R, T&gt; R.second(func: (R) -&gt; T): T{     println(&quot;calling second&quot;)     return func(this) }  first {     println(&quot;calling first body&quot;) } second {     println(&quot;calling second body&quot;) } <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/b><\/p>\n<div class=\"spoiler_text\">calling first<br \/>  calling first body<br \/>  Oops!<br \/>  calling second body<\/div>\n<\/div>\n<p>  \u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435-\u043a\u0430\u2026 \u0442\u0443\u0442 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0430! \u0418 \u043f\u0440\u0430\u0432\u0434\u0430, \u00ab\u0437\u0430\u0431\u044b\u043b\u00bb \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c:<\/p>\n<pre><code>fun&lt;T&gt; second(func: () -&gt; T): T{     println(&quot;Oops!&quot;)     return func() } <\/code><\/pre>\n<p>  \u0418 \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u00ab\u043a\u0430\u043a \u043d\u0430\u0434\u043e\u00bb, \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code>first {     println(&quot;calling first body&quot;) } second {     println(&quot;calling second body&quot;) } <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/b><\/p>\n<div class=\"spoiler_text\">calling first<br \/>  calling first body<br \/>  calling second<br \/>  calling second body<\/div>\n<\/div>\n<p>  \u0412\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c\/\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u041e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445: \u0431\u044b\u043b\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u00ab\u0441\u0434\u0435\u043b\u0430\u0439 \u0432 background\u00bb \u0438 \u00ab\u043f\u043e\u0442\u043e\u043c \u0441\u0434\u0435\u043b\u0430\u0439 \u0432 ui \u0442\u0440\u0435\u0434\u0435\u00bb. \u0418 \u0431\u044b\u043b \u043c\u0435\u0442\u043e\u0434 \u00ab\u0441\u0434\u0435\u043b\u0430\u0439 \u0432 ui\u00bb \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0438\u043c\u0435\u043d\u0435\u043c. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0451 \u0442\u0430\u043c \u0432 Scala?<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0443\u0442 \u0441\u0435\u0431\u0435 \u043d\u0435 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0448\u044c:  <\/p>\n<pre><code class=\"scala\">object Infix extends App{   def first[R](func: () =&gt; R): R = {     println(&quot;calling first&quot;)     func()   }    implicit class Second[R](val value: R) extends AnyVal{     def second[T](func: (R) =&gt; T): T = {       println(&quot;calling second&quot;)       func(value)     }   }    def second[T](func: () =&gt; T): T = {     println(&quot;Oops!&quot;)     func()   }    override def main(args: Array[String]) {     first { () =&gt;       println(&quot;calling first body&quot;)     } second { () =&gt; \/\/&lt;--------type mismach       println(&quot;calling second body&quot;)     }   } } <\/code><\/pre>\n<p>  \u0417\u0430\u0442\u043e, \u043f\u044b\u0442\u0430\u044f\u0441\u044c \u043f\u043e\u0434\u043e\u0433\u043d\u0430\u0442\u044c \u0441\u043a\u0430\u043b\u043e\u0432\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u043b\u044f \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0441\u0447\u0435\u0442 implicit\/underscore, \u044f \u0432\u0437\u043e\u0440\u0432\u0430\u043b \u0432\u0441\u0435 \u0432\u043e\u043a\u0440\u0443\u0433.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e! \u041a\u0440\u043e\u0432\u044c, \u043a\u0438\u0448\u043a\u0438 \u0438 \u0440\u0430\u0441\u0447\u043b\u0435\u043d\u0435\u043d\u043a\u0430&#8230;<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"scala\">object Infix2 extends App{   def first(func: (Unit) =&gt; Unit): Unit = {     println(&quot;calling first&quot;)     func()   }    implicit class Second(val value: Unit) extends AnyVal{     def second(func: (Unit) =&gt; Unit): Unit = {       println(&quot;calling second&quot;)       func(value)     }   }    def second(func: (Unit) =&gt; Unit): Unit = {     println(&quot;Oops!&quot;)     func()   }    override def main(args: Array[String]) {     first { _ =&gt;       println(&quot;calling first body&quot;)     } second { _ =&gt;       println(&quot;calling second body&quot;)     }   } } <\/code><\/pre>\n<p>  \u0418 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:  <\/p>\n<pre> Exception in thread &quot;main&quot; java.lang.VerifyError: Operand stack underflow Exception Details:   Location:     Infix2$Second$.equals$extension(Lscala\/runtime\/BoxedUnit;Ljava\/lang\/Object;)Z @40: pop   Reason:     Attempt to pop empty stack.   Current Frame:     bci: @40     flags: { }     locals: { 'Infix2$Second$', 'scala\/runtime\/BoxedUnit', 'java\/lang\/Object', 'java\/lang\/Object', integer }     stack: { }   Bytecode:     0000000: 2c4e 2dc1 0033 9900 0904 3604 a700 0603     0000010: 3604 1504 9900 4d2c c700 0901 5701 a700     0000020: 102c c000 33b6 0036 57bb 0038 59bf 3a05     0000030: b200 1f57 b200 1fb2 001f 57b2 001f 3a06     0000040: 59c7 000c 5719 06c6 000e a700 0f19 06b6     0000050: 003c 9900 0704 a700 0403 9900 0704 a700     0000060: 0403 ac                                   Stackmap Table:     append_frame(@15,Object[#4])     append_frame(@18,Integer)     same_frame(@33)     same_locals_1_stack_item_frame(@46,Null)     full_frame(@77,{Object[#2],Object[#27],Object[#4],Object[#4],Integer,Null,Object[#27]},{Object[#27]})     same_frame(@85)     same_frame(@89)     same_locals_1_stack_item_frame(@90,Integer)     chop_frame(@97,2)     same_locals_1_stack_item_frame(@98,Integer)  \tat Infix2$.main(Infix.scala) <\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h4>8. \u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 it<\/h4>\n<p>  \u042d\u0442\u043e, \u0441\u043a\u043e\u0440\u0435\u0435, \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0434\u0433\u0430\u0434\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u043c. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u043f\u0438\u0448\u0438\u0442\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0438 \u0432 \u043d\u0435\u0439 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f  <\/p>\n<pre><code>fun applier(x: String, func: (String) -&gt; Unit){     func(x) } <\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0430\u0440\u043e\u0434 \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c:  <\/p>\n<pre><code>    applier (&quot;arg&quot;) {         println(it)     }     applier (&quot;no arg&quot;) {          println(&quot;ololo&quot;)     } <\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u044b. \u0410 \u043f\u043e\u0442\u043e\u043c \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u043c\u0435\u0442\u043e\u0434  <\/p>\n<pre><code>fun applier(x: String, func: () -&gt; Unit){     println(&quot;not applying $x&quot;)     func() } <\/code><\/pre>\n<p>  \u0418 \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0440\u0443\u0433\u0430\u043b\u0441\u044f, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u0435\u0437\u0434\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 it (\u0447\u0438\u0442\u0430\u0439: \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0443\u0447\u0443 \u043a\u043e\u0434\u0430):  <\/p>\n<pre><code>    applier (&quot;arg&quot;) { it -&gt; \/\/FIXED         println(it)     }     applier (&quot;no arg&quot;) { -&gt; \/\/yes, explicit!         println(&quot;ololo&quot;)     } <\/code><\/pre>\n<p>  \u0425\u043e\u0442\u044f, \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u043e\u0433 \u0431\u044b \u0438 \u0443\u0433\u0430\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c it, \u0442\u043e \u044d\u0442\u043e \u043b\u044f\u043c\u0431\u0434\u0430 \u0441 1 \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c. \u0414\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0441 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c \u044f\u0437\u044b\u043a\u0430 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0443\u043c\u043d\u0435\u0435\u0442, \u0438 \u044d\u0442\u043e\u0442 \u043f\u0443\u043d\u043a\u0442 \u2014 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0451 \u0442\u0430\u043c \u0432 Scala?<\/b><\/p>\n<div class=\"spoiler_text\">\u0411\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043b\u044f\u043c\u0431\u0434\u0430. \u0410 \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f.  <\/p>\n<pre><code class=\"scala\">object Its extends App{   def applier(x: String, func: (String) =&gt; Unit){     func(x)   }    def applier(x: String, func: () =&gt; Unit){     println(&quot;not applying $x&quot;)     func()   }    override def main(args: Array[String]) {     applier(&quot;arg&quot;, println(_))     applier(&quot;no arg&quot;, _ =&gt; println(&quot;ololo&quot;))   } } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h4>9. \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0434\u0443\u043c\u0430\u0442\u044c \u043e Nullable \u043a\u0430\u043a \u043e\u0431 Option<\/h4>\n<p>  \u041f\u0443\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0434\u043b\u044f \u043a\u044d\u0448\u0430:  <\/p>\n<pre><code>class Cache&lt;T&gt;(){     val elements: MutableMap&lt;String, T&gt; = HashMap()      fun put(key: String, elem: T) = elements.put(key, elem)      fun get(key: String) = elements[key] } <\/code><\/pre>\n<p>  \u0418 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f: <\/p>\n<pre><code>    val cache = Cache&lt;String&gt;()     cache.put(&quot;foo&quot;, &quot;bar&quot;)      fun getter(key: String) {         cache.get(key)?.let {             println(&quot;Got $key from cache: $it&quot;)         } ?: println(&quot;$key is not in cache!&quot;)     }      getter(&quot;foo&quot;)     getter(&quot;baz&quot;) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c<\/b><\/p>\n<div class=\"spoiler_text\">Got foo from cache: bar<br \/>  baz is not in cache!<\/div>\n<\/div>\n<p>  \u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0432\u0434\u0440\u0443\u0433 \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043a \u043a\u044d\u0448\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c Nullable&#8230;<\/p>\n<pre><code>    val cache = Cache&lt;String?&gt;()     cache.put(&quot;foo&quot;, &quot;bar&quot;)      fun getter(key: String) {         cache.get(key)?.let {             println(&quot;Got $key from cache: $it&quot;)         } ?: println(&quot;$key is not in cache!&quot;)     }      getter(&quot;foo&quot;)     getter(&quot;baz&quot;)      cache.put(&quot;IAmNull&quot;, null)     getter(&quot;IamNull&quot;) <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e<\/b><\/p>\n<div class=\"spoiler_text\">Got foo from cache: bar<br \/>  baz is not in cache!<br \/>  IamNull is not in cache!<\/div>\n<\/div>\n<p>  \u0417\u0430\u0447\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c null? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u0443\u0442 \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Option \u0438\u043b\u0438 Either, \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0438 \u0442\u043e\u0433\u043e, \u043d\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043d\u0435\u0442 (\u043d\u043e \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 <a href=\"https:\/\/github.com\/MarioAriasC\/funKTionale\/wiki\">funKTionale<\/a>). \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Either, \u044f \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b \u043d\u0430 \u0433\u0440\u0430\u0431\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e. \u0420\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u00ab\u0434\u0432\u043e\u0439\u043d\u044b\u043c Nullable\u00bb \u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c Pair \u0438\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e data class.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0451 \u0442\u0430\u043c \u0432 Scala?<\/b><\/p>\n<div class=\"spoiler_text\"> \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c Option \u043e\u0442 Option. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0442\u0430\u043a \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e. \u0414\u0430 \u0438 \u0441 null \u0442\u043e\u0436\u0435:  <\/p>\n<pre><code class=\"scala\">object doubleNull extends App{   class Cache[T]{     val elements =  mutable.Map.empty[String, T]      def put(key: String, elem: T) = elements.put(key, elem)      def get(key: String) = elements.get(key)   }    override def main(args: Array[String]) {     val cache = new Cache[String]()     cache.put(&quot;foo&quot;, &quot;bar&quot;)      def getter(key: String) {       cache.get(key) match {         case Some(value) =&gt; println(s&quot;Got $key from cache: $value&quot;)         case None =&gt; println(s&quot;$key is not in cache!&quot;)       }     }      getter(&quot;foo&quot;)     getter(&quot;baz&quot;)      cache.put(&quot;IAmNull&quot;, null)     getter(&quot;IAmNull&quot;)   } <\/code><\/pre>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e<\/b><\/p>\n<div class=\"spoiler_text\">Got foo from cache: bar<br \/>  baz is not in cache!<br \/>  Got IAmNull from cache: null<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h4>10. \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432<\/h4>\n<p>  \u0411\u043e\u043d\u0443\u0441 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043f\u0438\u0441\u0430\u043b \u043d\u0430 Scala. \u0421\u043f\u043e\u043d\u0441\u043e\u0440 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u2014  <a href=\"https:\/\/habrahabr.ru\/users\/lgorsl\/\" class=\"user_link\">lgorSL<\/a>.<br \/>  <a href=\"https:\/\/habrahabr.ru\/post\/277479\/#comment_8779645\">\u0426\u0438\u0442\u0438\u0440\u0443\u044e:<\/a>  <\/p>\n<blockquote><p>\u2026<br \/>  \u0418\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430:<br \/>  \u0412 scala: def methodName(&#8230;) = {&#8230;}<br \/>  \u0412 kotlin \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u2014 \u043a\u0430\u043a \u0432 scala (\u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c =) \u0438 \u043a\u0430\u043a \u0432 java (\u0431\u0435\u0437 \u043d\u0435\u0433\u043e), \u043d\u043e \u044d\u0442\u0438 \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043a\u0443\u0447\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u0442\u0430\u043a\u043e\u0439 \u00ab\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438\u00bb \u0432 \u043a\u043e\u0434\u0435.<br \/>  \u2026  <\/p><\/blockquote>\n<p>  <\/p>\n<blockquote><p>\u042f \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>  fun test(){ println(\u00abit works\u00bb) } <br \/>  fun test2() = println(\u00abit works too\u00bb)<br \/>  fun test3() = {println(\u00absurprise!\u00bb)}<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u00absurprise\u00bb, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c test3()(). \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 test3() \u0442\u043e\u0436\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u00ab\u043b\u0438\u0448\u043d\u0438\u0445\u00bb \u0441\u043a\u043e\u0431\u043e\u0447\u0435\u043a \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>  \u0418\u0437-\u0437\u0430 \u044d\u0442\u0438\u0445 \u0433\u0440\u0430\u0431\u043b\u0435\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0441\u043e \u0441\u043a\u0430\u043b\u044b \u043d\u0430 \u043a\u043e\u0442\u043b\u0438\u043d \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u2014 \u0438\u043d\u043e\u0433\u0434\u0430 \u00ab\u043f\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0435\u00bb \u0432 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u0438\u0448\u0443 \u0437\u043d\u0430\u043a \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438.<\/p><\/blockquote>\n<p>  <\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0435 \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043a\u0430\u043a \u0432\u044b \u0448\u043b\u0438 \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a\u2026 <br \/>  \u0423 \u044f\u0437\u044b\u043a\u0430 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0447\u0435\u0440\u0442, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 <a href=\"http:\/\/kotlinlang.org\/\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435<\/a>, \u0432 <a href=\"https:\/\/habrahabr.ru\/post\/277479\/\">\u0441\u0442\u0430\u0442\u044c\u044f\u0445<\/a> <a href=\"https:\/\/habrahabr.ru\/post\/268463\/\">\u043d\u0430<\/a> <a href=\"https:\/\/habrahabr.ru\/post\/274997\/\">\u0445\u0430\u0431\u0440\u0435<\/a> \u0438 \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u0433\u0434\u0435. \u041d\u043e \u043b\u0438\u0447\u043d\u043e \u044f \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 (\u043a\u043b\u0430\u0441\u0441\u044b final by default, java interop) \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044f\u0437\u044b\u043a\u0443 \u043d\u0435\u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044f, \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438. \u041a\u0440\u043e\u043c\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441 lateinit Int \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0435\u0449\u0435 \u0434\u0432\u0430. \u0412\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 let \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c it, \u0432\u043d\u0443\u0442\u0440\u0438 with \u2014 this, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 run, <a href=\"http:\/\/beust.com\/weblog\/2015\/10\/30\/exploring-the-kotlin-standard-library\/\">\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0435\u0439 let \u0438 this<\/a> \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c? \u0410 \u0443 \u043a\u043b\u0430\u0441\u0441\u0430 String! \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b isBlank(), isNotBlank(), isNullOrBlank(), \u0430 \u00ab\u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0435\u0433\u043e\u00bb \u043c\u0435\u0442\u043e\u0434\u0430 \u0432\u0440\u043e\u0434\u0435 isNotNullOrBlank \u043d\u0435\u0442:( \u041f\u043e\u0441\u043b\u0435 Scala \u043d\u0435\u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 \u2014 Option, Either, matching, \u043a\u0430\u0440\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u044f\u0437\u044b\u043a \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  P.S. \u0425\u0430\u0431\u0440\u043e\u0432\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 Kotlin \u0445\u0440\u043e\u043c\u0430\u0435\u0442, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f  <a href=\"https:\/\/habrahabr.ru\/users\/habrahabr\/\" class=\"user_link\">habrahabr<\/a> \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u2026        \t<\/p>\n<div class=\"polling\">\n<form action=\"\/json\/polling\/\" class=\"poll\" method=\"post\">\n<div class=\"poll_title\">\u041a\u0430\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0435\u0431\u0435 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c?<\/div>\n<p>  \t\t<input type=\"hidden\" name=\"post_id\" value=\"278169\"\/> \t\t<input type=\"hidden\" name=\"polling_question_id\" value=\"14667\"\/>  \t\t<\/p>\n<table class=\"answer\">\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv71663\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71663\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71663\">1. \u041f\u043e\u0441\u0442-\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0438 \u043f\u0440\u0435\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u043a\u0430\u043a \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv71665\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71665\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71665\">2. \u041e\u0434\u043e\u0431\u0440\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv71667\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71667\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71667\">3. \u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 invoke()<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv71669\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71669\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71669\">4. lateinit<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv71671\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71671\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71671\">5. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv71673\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71673\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71673\">6. \u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 Java<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv71675\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71675\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71675\">7. infix \u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0438 \u043b\u044f\u043c\u0431\u0434\u044b<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv71677\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71677\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71677\">8. \u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 it<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv71679\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71679\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71679\">9. \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0434\u0443\u043c\u0430\u0442\u044c \u043e Nullable \u043a\u0430\u043a \u043e\u0431 Option<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv71681\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"71681\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv71681\">10. \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432<\/label> \t\t\t\t<\/td>\n<\/tr>\n<\/table>\n<p class=\"total\">\u041d\u0438\u043a\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b. \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.<\/p>\n<\/p><\/form>\n<p class=\"for_users_only_msg\">\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a href=\"https:\/\/habrahabr.ru\/auth\/login\/\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<\/p><\/div>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/278169\/\"> https:\/\/habrahabr.ru\/post\/278169\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u0421\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u0448\u0435\u043b <a href=\"http:\/\/blog.jetbrains.com\/kotlin\/2016\/02\/kotlin-1-0-released-pragmatic-language-for-jvm-and-android\/\">\u0440\u0435\u043b\u0438\u0437<\/a> Kotlin, \u0430 \u0435\u0433\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b\u0430 <a href=\"https:\/\/habrahabr.ru\/company\/JetBrains\/blog\/277573\/\">\u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b<\/a> \u043f\u0440\u043e \u044f\u0437\u044b\u043a. \u041e\u043d \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430 \u0441\u043b\u0443\u0445\u0443 \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043c\u043d\u043e\u0433\u0438\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c. <br \/>  \u041f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u043d\u0430\u0437\u0430\u0434 \u0442\u0438\u043c\u043b\u0438\u0434 \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u041a\u043e\u0442\u043b\u0438\u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u043e. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u044b\u043b \u00ab\u0410 \u043a\u0430\u043a \u0432 \u041a\u043e\u0442\u043b\u0438\u043d\u0435 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443?\u00bb \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u044f.<\/p>\n<p>  Disclaimer:<br \/>  \u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u043a\u0430\u043a \u00abKotlin \u2014 \u043e\u0442\u0441\u0442\u043e\u0439\u00bb. \u0425\u043e\u0442\u044f \u044f \u043e\u0442\u043d\u043e\u0448\u0443\u0441\u044c \u0441\u043a\u043e\u0440\u0435\u0435 \u043a \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u0438 \u0441\u043e Scala \u0445\u043e\u0440\u043e\u0448\u043e, \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u044f\u0437\u044b\u043a \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439. <br \/>  \u0412\u0441\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u0441\u043f\u043e\u0440\u043d\u044b\u0435, \u043d\u043e \u0440\u0430\u0437 \u0432 \u0433\u043e\u0434 \u0438 \u043f\u0430\u043b\u043a\u0430 \u0441\u0442\u0440\u0435\u043b\u044f\u0435\u0442. \u041a\u043e\u0433\u0434\u0430-\u0442\u043e \u0432\u044b \u0441\u0435\u0431\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u0435 \u0437\u0430\u043e\u0434\u043d\u043e \u0438 \u0431\u0430\u0448\u043a\u0443, \u0430 \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0443 \u0432\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u043e\u043b\u043d\u043e\u0447\u044c \u043f\u043e\u043b\u043d\u043e\u043b\u0443\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u0435 \u0447\u0435\u0440\u043d\u044b\u0439 \u0440\u0438\u0442\u0443\u0430\u043b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043b\u043e\u0445\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 Scala, \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u043c\u0435\u043b\u044c\u0447\u0435 \u043d\u0430 Kotlin, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u043e Scala. \u042f \u0431\u0443\u0434\u0443 \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e Nullable \u0432 Kotlin \u2014 \u044d\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 Option, \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u0430\u043a, \u043d\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 Option, \u0431\u0443\u0434\u0443\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Nullable.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-275118","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/275118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=275118"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/275118\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=275118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=275118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=275118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}