{"id":255812,"date":"2015-04-22T17:55:02","date_gmt":"2015-04-22T13:55:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=255812"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=255812","title":{"rendered":"\u00ab\u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432\u00bb \u0432 Scala"},"content":{"rendered":"<p>     \t\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/\">\u044f \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u0443\u0440\u0441 \u043f\u043e Scala<\/a>. \u041e\u043d \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0438 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 MOOC-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 UDEMY \u2014 <a href=\"https:\/\/www.udemy.com\/scala-for-java-developers-ru\/?couponCode=HABR-OPERATOR\">\u00abScala for Java Developers\u00bb<\/a>. \u0411\u043e\u043b\u044c\u0448\u0435 \u043e \u043a\u0443\u0440\u0441\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#8\">\u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438<\/a>.<\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0442\u0435\u043c \u043a\u0443\u0440\u0441\u0430 \u2014 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 Scala.<\/p>\n<ul>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#0\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#1\">Infix operators<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#2\">\u00abPointless style\u00bb (infix notation) \u044d\u0442\u043e \u043d\u0435 \u00abpoint-free style\u00bb (tacit programming)<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#3\">\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#4\">\u0410\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#5\">Infix types<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#6\">Prefix operators<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#7\">Postfix operators<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#8\">\u041e \u043a\u0443\u0440\u0441\u0435<\/a><\/li>\n<\/ul>\n<p>  <a name=\"habracut\"><\/a><br \/>  <a name=\"0\"><\/a>  <\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0432 Scala \u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 (\u043a\u0430\u043a \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442 \u043c\u0435\u0442\u043e\u0434\u043e\u0432). \u0415\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 (\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u043c\u0438) \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0432\u0438\u0434\u0430 &#8216;+&#8217;, &#8216;\/&#8217;, &#8216;::&#8217;, &#8216;&lt;~&#8217; \u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u0430\u044f\/\u0438\u043d\u0444\u0438\u043a\u0441\u043d\u0430\u044f\/\u043f\u043e\u0441\u0444\u0438\u043a\u0441\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u044f \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0431\u0435\u0437 \u043a\u0430\u0432\u044b\u0447\u0435\u043a.<\/p>\n<p>  <a name=\"1\"><\/a>  <\/p>\n<h2>Infix operators<\/h2>\n<p>  \u0412 Scala \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 (<a href=\"http:\/\/www.scala-lang.org\/files\/archive\/spec\/2.11\/06-expressions.html#infix-operations\">infix operations<\/a>). \u0410 \u0438\u043c\u0435\u043d\u043d\u043e  <\/p>\n<ul>\n<li>\u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c<\/li>\n<li>\u0431\u0435\u0437 \u0441\u043a\u043e\u0431\u043e\u043a, \u043e\u0431\u0440\u0430\u043c\u043b\u044f\u044e\u0449\u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"scala\">object Demo {   \/\/ &quot;normal&quot; notation   val x0 = I(1).add(I(2))   \/\/ infix notation   val x1 = I(1) add I(2) }  case class I(k: Int) {   def add(that: I): I = I(this.k + that.k) } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c case-\u043a\u043b\u0430\u0441\u0441 I, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0431\u0443\u0434\u0443 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0434\u0435\u043b\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438. \u041e\u043d \u0441\u0434\u0435\u043b\u0430\u043d case \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044f \u043f\u043e primary constructor + \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f companion object \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c apply \u0441 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0439 primary constructor, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0447\u0435\u0440\u0435\u0437 I(k), \u0430 \u043d\u0435 new I(k). \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e I(k) \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e I.apply(k), \u0430 \u043c\u0435\u0442\u043e\u0434 apply \u0432 Scala \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c). \u041a\u043b\u0430\u0441\u0441 I \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u00ab\u043e\u0431\u0435\u0440\u0442\u043a\u0443\u00bb \u0432\u043e\u043a\u0440\u0443\u0433 \u043e\u0434\u043d\u043e\u0433\u043e Int \u0438 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u043e\u0432, \u043c\u0430\u0442\u0440\u0438\u0446.<\/p>\n<p>  \u0412\u0441\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435, \u0435\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u0443 \u0434\u0430\u0432\u0430\u0442\u044c \u00ab\u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0435\u00bb \/ \u00ab\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0435\u00bb \u0438\u043c\u044f  <\/p>\n<pre><code class=\"scala\">object Demo {   \/\/ &quot;normal&quot; notation   val x0 = I(1).+(I(2))   \/\/ infix notation   val x1 = I(1) + I(2) }  case class I(k: Int) {   def +(that: I): I = I(this.k + that.k) } <\/code><\/pre>\n<p>  JVM (class file format) \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u0430 \u0438\u0437 \u00ab\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\u00bb, \u043f\u043e\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u0430.<\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0443  <\/p>\n<pre><code class=\"scala\">class I {   def +(that: I): I = new I   def -(that: I): I = new I   def *(that: I): I = new I   def \/(that: I): I = new I   def \\(that: I): I = new I   def ::(that: I): I = new I   def -&gt;(that: I): I = new I   def &lt;~(that: I): I = new I } <\/code><\/pre>\n<p>  \u0434\u0436\u0430\u0432\u043e\u0432\u0441\u043a\u0443\u044e \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e  <\/p>\n<pre><code class=\"java\">import java.lang.reflect.Method;  public class Demo {     public static void main(String[] args) {         for (Method m: I.class.getDeclaredMethods()) {             System.out.println(m);         }     } }  &gt;&gt; public I.$plus(I) &gt;&gt; public I.$minus(I) &gt;&gt; public I.$times(I) &gt;&gt; public I.$div(I) &gt;&gt; public I.$bslash(I) &gt;&gt; public I.$colon$colon(I) &gt;&gt; public I.$minus$greater(I) &gt;&gt; public I.$less$tilde(I) <\/code><\/pre>\n<p>  \u0414\u0430, \u0438\u0437 Java \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0432\u0438\u0434\u043d\u044b \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 (\u043a\u0430\u043a \u0432 class file)  <\/p>\n<pre><code class=\"java\">public class Demo {     public static void main(String[] args) {         new I().$plus(new I());         new I().$minus(new I());         new I().$times(new I());         new I().$div(new I());         new I().$bslash(new I());         new I().$colon$colon(new I());         new I().$minus$greater(new I());         new I().$less$tilde(new I());     } } <\/code><\/pre>\n<p>  \u0412\u044b \u0436\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u043f\u0440\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u043e\u0434 JVM \u044f\u0437\u044b\u043a?<\/p>\n<p>  \u0414\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u00ab\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u043e\u043a\u0443\u0441\u043e\u0432\u00bb Scala \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0445 \u0441\u043c\u0435\u0441\u0438 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0438 implicid conversions.<\/p>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0440 #1<\/b>:  <\/p>\n<pre><code class=\"scala\">object Demo {   for (k &lt;- 1 to 10) {     println(k)   } } <\/code><\/pre>\n<p>  \u0418\u043d\u0444\u0438\u043a\u0441\u043d\u0430\u044f \u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0443\u044e  <\/p>\n<pre><code class=\"scala\">object Demo {   for (k &lt;- 1.to(10)) {     println(k)   } <\/code><\/pre>\n<p>  \u0423 Int \u043d\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 &#8216;to&#8217;, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0449\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0435 implicid conversion, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c Int \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0442\u0438\u043f \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c &#8216;to&#8217; \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439.<\/p>\n<p>  \u0418 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 Predef.scala (\u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 \u043d\u0435\u044f\u0432\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f java.lang.* + scala.* + Predef.*)<\/p>\n<pre><code class=\"scala\">\/\/ \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 Predef.scala package scala  object Predef extends LowPriorityImplicits with DeprecatedPredef {...}  private[scala] trait DeprecatedPredef {...}  private[scala] abstract class LowPriorityImplicits {   ...   @inline implicit def byteWrapper(x: Byte)       = new runtime.RichByte(x)   @inline implicit def shortWrapper(x: Short)     = new runtime.RichShort(x)   @inline implicit def intWrapper(x: Int)         = new runtime.RichInt(x)   @inline implicit def charWrapper(c: Char)       = new runtime.RichChar(c)   @inline implicit def longWrapper(x: Long)       = new runtime.RichLong(x)   @inline implicit def floatWrapper(x: Float)     = new runtime.RichFloat(x)   @inline implicit def doubleWrapper(x: Double)   = new runtime.RichDouble(x)   @inline implicit def booleanWrapper(x: Boolean) = new runtime.RichBoolean(x)      ... } <\/code><\/pre>\n<p>  \u0410 \u0432\u043e\u0442 \u0443 RichInt \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434 &#8216;to&#8217; \u0441 \u043e\u0434\u043d\u0438\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0442\u0438\u043f\u0430 Int.  <\/p>\n<pre><code class=\"scala\">\/\/ \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 scala.runtime.RichInt package scala.runtime  import scala.collection.immutable.Range  final class RichInt(val self: Int) ... {   ...    def to(end: Int): Range.Inclusive = Range.inclusive(self, end)   ... } <\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u00ab\u0440\u0430\u0441\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb \u0432 \u043d\u0435\u0447\u0442\u043e \u0442\u0438\u043f\u0430  <\/p>\n<pre><code class=\"scala\">import scala.runtime.RichInt  object Demo {   val tmp: Range = new RichInt(1).to(10)   for (k &lt;- tmp) {     println(k)   } } <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u00ab\u0440\u0430\u0441\u043a\u0440\u0443\u0442\u043a\u0438\u00bb for \u0432 map\/flatMap\/foreach \u0438\u043c\u0435\u0435\u043c  <\/p>\n<pre><code class=\"scala\">import scala.runtime.RichInt  object Demo {   val tmp: Range = new RichInt(1).to(10)   tmp.foreach(elem =&gt; println(elem)) } <\/code><\/pre>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0440 #2<\/b>:  <\/p>\n<pre><code class=\"scala\">object Demo {   var map = Map(&quot;France&quot; -&gt; &quot;Paris&quot;)   map += &quot;Japan&quot; -&gt; &quot;Tokyo&quot; } <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 &#8216;-&gt;&#8217; \u0438 &#8216;+&#8217; \u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439  <\/p>\n<pre><code class=\"scala\">object Demo {   var map = Map(&quot;France&quot;.-&gt;(&quot;Paris&quot;))   map = map.+(&quot;Japan&quot;.-&gt;(&quot;Tokyo&quot;)) } <\/code><\/pre>\n<p>  \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e implicid conversion String \u0434\u043e \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c &#8216;-&gt;&#8217; (\u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442 \u0432 Predef.scala) \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u00ab\u0434\u0435\u0441\u0430\u0445\u0430\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u00bb (String \u0432 Scala \u2014 \u044d\u0442\u043e, \u043f\u043e \u0441\u0443\u0442\u0438, java.lang.String \u0438 \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 &#8216;-&gt;&#8217;)  <\/p>\n<pre><code class=\"scala\">object Demo {   var map: Map[String, String] = Map.apply(new ArrowAssoc(&quot;France&quot;).-&gt;(&quot;Paris&quot;))   map = map.+((new ArrowAssoc(&quot;Japan&quot;).-&gt;(&quot;Tokyo&quot;))) } <\/code><\/pre>\n<p>  \u0418\u0437 \u0437\u0430\u0431\u0430\u0432\u043d\u043e\u0433\u043e: \u0432\u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 (\u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0439) \u043a\u043b\u0430\u0441\u0441\u0430 ArrowAssoc \u0438\u0437 Predef.scala  <\/p>\n<pre><code class=\"scala\">  implicit class ArrowAssoc[A](private val self: A) extends AnyVal {     def -&gt; [B](y: B): Tuple2[A, B] = Tuple2(self, y)   } <\/code><\/pre>\n<p>  \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f generics \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0435\u043b\u043a\u0443 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u041b\u042e\u0411\u042b\u0425 \u0414\u0412\u0423\u0425 \u0422\u0418\u041f\u041e\u0412! \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u0442\u0435 1 -&gt; true, \u0442\u043e type variable A \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442 \u0437\u0430 Int, \u0430 type variable B \u2014 \u0437\u0430 Boolean!<\/p>\n<p>  <a name=\"2\"><\/a>  <\/p>\n<h2>\u00abPointless style\u00bb (infix notation) \u044d\u0442\u043e \u043d\u0435 \u00abpoint-free style\u00bb (tacit programming)<\/h2>\n<p>  \u041d\u0435 \u043d\u0430\u0434\u043e \u043f\u0443\u0442\u0430\u0442\u044c pointless style (infix notation), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c, \u0441 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c <a href=\"https:\/\/wiki.haskell.org\/Pointfree\">point-free<\/a> \u0441\u0442\u0438\u043b\u0435\u043c \u0438\u043b\u0438 \u0436\u0435 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u2014 <a href=\"http:\/\/en.wikipedia.org\/wiki\/Tacit_programming\">tacit programming<\/a>.<\/p>\n<p>  Point-free \u0441\u0442\u0438\u043b\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u044b \u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u043d\u0435\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u044f\u0432\u043d\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043d\u0435 \u0432\u0432\u043e\u0434\u044f \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0438\u0437 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0438, \u0433\u0434\u0435 \u0447\u0430\u0441\u0442\u043e \u0432\u0435\u0434\u0443\u0442 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0435\u0439 \u0430 \u043d\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a.<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0444\u0443\u043d\u043a\u0446\u0438\u044f Int =&gt; Int, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 1.<\/p>\n<p>  \u0412\u043e\u0442 \u041d\u0415 pointless \u0438 \u041d\u0415 point-free \u0441\u0442\u0438\u043b\u044c  <\/p>\n<pre><code class=\"scala\">object Demo {   val f: Int =&gt; Int = x =&gt; 1.+(x) } <\/code><\/pre>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432 Scala &#8216;+&#8217; \u2014 \u044d\u0442\u043e \u043c\u0435\u0442\u043e\u0434, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0442\u0438\u043f\u0443 Int, \u0430 \u043d\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440. \u0425\u043e\u0442\u044f \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 JVM \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;+&#8217; \u043d\u0430\u0434 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u043c int.<\/p>\n<p>  \u0412\u043e\u0442 pointless \u0438 \u041d\u0415 point-free \u0441\u0442\u0438\u043b\u044c  <\/p>\n<pre><code class=\"scala\">object Demo {   val f: Int =&gt; Int = x =&gt; 1 + x } <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u041d\u0415 pointless \u0438 point-free \u0441\u0442\u0438\u043b\u044c (f \u2014 \u0441 placeholder, g \u2014 \u0431\u0435\u0437 placeholder)  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   val f: Int =&gt; Int = 1.+(_)   val g: Int =&gt; Int = 1.+ } <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0438 pointless \u0438 \u0438 point-free \u0441\u0442\u0438\u043b\u044c (f \u2014 \u0441 placeholder, g \u2014 \u0431\u0435\u0437 placeholder)  <\/p>\n<pre><code class=\"scala\">object Demo {   val f: Int =&gt; Int = 1 + _   val g: Int =&gt; Int = 1 + } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c point-free\/tacit-programming, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  <a name=\"3\"><\/a>  <\/p>\n<h2>\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432<\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0438 \u00ab\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b\u00bb, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   println(I(1) add I(2) mul I(3)) }  case class I(k: Int) {   def add(that: I): I = I(this.k + that.k)   def mul(that: I): I = I(this.k * that.k) }  &gt;&gt; 9 <\/code><\/pre>\n<p>  \u043c\u044b \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u0438, \u0447\u0442\u043e \u0431\u044b \u0443 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f (mul) \u0431\u044b\u043b \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u0435\u0440\u0435\u0434 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c (add) (\u0442\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0445\u043e\u0442\u0438\u043c 1 + (2 * 3) = 7, \u0430 \u043d\u0435 (1 + 2) * 3 = 9). \u041e\u0434\u043d\u0430\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u0438\u0434\u0430  <\/p>\n<pre><code class=\"scala\">I(1) add I(2) mul I(3) <\/code><\/pre>\n<p>  \u042d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439  <\/p>\n<pre><code class=\"scala\">I(1).add.(I(2)).mul(I(3)) <\/code><\/pre>\n<p>  \u041a\u043e\u0442\u043e\u0440\u0430\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u0430 \u0442\u0430\u043a\u043e\u0439  <\/p>\n<pre><code class=\"scala\">( I(1).add.(I(2)) ).mul(I(3)) <\/code><\/pre>\n<p>  \u0410 \u043d\u0435  <\/p>\n<pre><code class=\"scala\">I(1).add( I(2).mul(I(3)) ) <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a <b>\u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 \u2014 \u044d\u0442\u043e \u043b\u0435\u0432\u043e-\u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<\/b>, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u043a\u043e\u0431\u043e\u043a (\u0441\u0432\u0435\u0440\u0442\u043a\u0430) \u0441\u043b\u0435\u0432\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e.<\/p>\n<p>  \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044f\u0432\u043d\u043e\u0439 \u0440\u0430\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0441\u043a\u043e\u0431\u043e\u043a  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   println(I(1) add ( I(2) mul I(3) )) } case class I(k: Int) {   def add(that: I): I = I(this.k + that.k)   def mul(that: I): I = I(this.k * that.k) }  &gt;&gt; 7 <\/code><\/pre>\n<p>  \u043b\u0438\u0431\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c <b>\u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043f\u0435\u0440\u0435\u0434 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u044b\u043c\u0438<\/b> (\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0441\u0442\u0438\u043b\u044c, \u043d\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0439\u0442\u0435 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u0443\u044e \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0441\u043a\u043e\u0431\u043a\u0438 \u2014 \u043b\u0443\u0447\u0448\u0435)  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   println(I(1) add I(2).mul(I(3))) } case class I(k: Int) {   def add(that: I): I = I(this.k + that.k)   def mul(that: I): I = I(this.k * that.k) }  &gt;&gt; 7 <\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u044b (&#8216;mul&#8217; -&gt; &#8216;*&#8217;, &#8216;add&#8217; -&gt; &#8216;+&#8217;), \u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043c\u0430\u0433\u0438\u0438 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 &#8216;*&#8217; \u043d\u0430\u0434 &#8216;+&#8217;!  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   println(I(1) + I(2) * I(3)) }  case class I(k: Int) {   def +(that: I): I = I(this.k + that.k)   def *(that: I): I = I(this.k * that.k) }  &gt;&gt; 7 <\/code><\/pre>\n<p>  \u041e\u0442\u043a\u0440\u043e\u0435\u043c <a href=\"http:\/\/www.scala-lang.org\/files\/archive\/spec\/2.11\/\">\u0421\u0432\u044f\u0449\u0435\u043d\u043d\u0443\u044e \u041a\u043d\u0438\u0433\u0443<\/a> \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <a href=\"http:\/\/Infix Operations\">\u00ab6.12.3 Infix Operations\u00bb<\/a> \u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u043c:  <\/p>\n<blockquote><p>The precedence of an infix operator is determined by the operator&#8217;s first character. Characters are listed below in increasing order of precedence, with characters on the same line having the same precedence.  <\/p>\n<pre> (all letters) | ^ & = ! &lt; &gt; : + - * \/ % (all other special characters) <\/pre>\n<p>  <\/p><\/blockquote>\n<p>  \u0418\u0442\u0430\u043a, \u0435\u0441\u043b\u0438 \u043d\u0430\u0448 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 &#8216;*&#8217;, \u0442\u043e \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0430\u0434 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u0441 &#8216;+&#8217;. \u041a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0430\u0434 \u043b\u044e\u0431\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u0441 \u00ab\u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0431\u0443\u043a\u0432\u044b\u00bb. <\/p>\n<p>  \u0417\u043d\u0430\u0447\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c (\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0441\u0445\u043e\u0436\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b (\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435, \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435) \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c\u0438 \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438)  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   println(I(1) add I(2) * I(3)) }  case class I(k: Int) {   def add(that: I): I = I(this.k + that.k)   def *(that: I): I = I(this.k * that.k) }  &gt;&gt; 7 <\/code><\/pre>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435: 1 * 2 * 3 + 4 * 5 * 6 + 7 * 8 * 9.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u00ab\u0441\u043b\u043e\u0436\u0438\u0442\u044c\u00bb \u0438 \u00ab\u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c\u00bb \u0434\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 add \u0438 mul  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   println(I(1) mul I(2) mul I(3) add I(4) mul I(5) mul I(6) add I(7) mul I(8) mul I(9)) }  case class I(k: Int) {   def add(that: I): I = I(this.k + that.k)   def mul(that: I): I = I(this.k * that.k) } <\/code><\/pre>\n<p>  \u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u043d\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0442\u043a\u0435 \u0441\u043b\u0435\u0432\u0430<br \/>  1 * 2 * 3 + 4 * 5 * 6 + 7 * 8 * 9 -&gt; (((((((1 * 2) * 3) + 4) * 5) * 6) + 7) * 8) * 9<\/p>\n<p>  \u041d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043c\u0435\u043d &#8216;+&#8217; \u0438 &#8216;*&#8217;  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   println(I(1) * I(2) * I(3) + I(4) * I(5) * I(6) + I(7) * I(8) * I(9)) }  case class I(k: Int) {   def +(that: I): I = I(this.k + that.k)   def *(that: I): I = I(this.k * that.k) } <\/code><\/pre>\n<p>  \u0441\u0442\u0440\u043e\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0442\u0430 \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e \u0440\u0430\u0432\u043d\u044b\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430\u043c  <\/p>\n<pre> 1 * 2 * 3 + 4 * 5 * 6 + 7 * 8 * 9 -&gt;  (1 * 2 * 3) + (4 * 5 * 6) + (7 * 8 * 9) <\/pre>\n<p>  \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b (\u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e) \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u0435\u0440\u0442\u043a\u0430 \u0441\u043b\u0435\u0432\u0430-\u043d\u0430\u043f\u0440\u0430\u0432\u043e  <\/p>\n<pre> (1 * 2 * 3) + (4 * 5 * 6) + (7 * 8 * 9) -&gt; ((1 * 2) * 3) + ((4 * 5) * 6) + ((7 * 8) * 9) <\/pre>\n<p>  \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044b \u0441\u043b\u0435\u0432\u0430-\u043d\u0430\u043f\u0440\u0430\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u044b \u043f\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044e  <\/p>\n<pre> ((1 * 2) * 3) + ((4 * 5) * 6) + ((7 * 8) * 9) -&gt; (((1 * 2) * 3) + ((4 * 5) * 6)) + ((7 * 8) * 9) <\/pre>\n<p>  <a name=\"4\"><\/a>  <\/p>\n<h2>\u0410\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432<\/h2>\n<p>  \u0427\u0438\u0442\u0430\u0435\u043c <a href=\"http:\/\/www.scala-lang.org\/files\/archive\/spec\/2.11\/\">\u0421\u0432\u044f\u0449\u0435\u043d\u043d\u0443\u044e \u041a\u043d\u0438\u0433\u0443<\/a>, \u0440\u0430\u0434\u0435\u043b <a href=\"http:\/\/Infix Operations\">\u00ab6.12.3 Infix Operations\u00bb<\/a> \u0434\u0430\u043b\u044c\u0448\u0435:  <\/p>\n<blockquote><p>The associativity of an operator is determined by the operator&#8217;s last character. Operators ending in a colon `:&#8217; are right-associative. All other operators are left-associative.<br \/>  \u2026<br \/>  The right-hand operand of a left-associative operator may consist of several arguments enclosed in parentheses, e.g. e;op;(e1,\u2026,en). This expression is then interpreted as e.op(e1,\u2026,en).<\/p>\n<p>  A left-associative binary operation e1;op;e2 is interpreted as e1.op(e2). If op is right-associative, the same operation is interpreted as { val x=e1; e2.op(x) }, where x is a fresh name.  <\/p><\/blockquote>\n<p>  \u0427\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438? \u0417\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043b\u0435\u0432\u043e\u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u0435\u0440\u0442\u043e\u043a \u0441\u0442\u043e\u0438\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043d\u043e \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435, \u043e\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043d\u0430 \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u2014 \u043f\u0440\u0430\u0432\u043e\u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u0430\u043c\u0438.<\/p>\n<p>  \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043a\u043e\u0434\u0435  <\/p>\n<pre><code class=\"scala\">object Demo {   println(I(1) ++ I(2) ++ I(3) ++ I(4))   println(I(1) +: I(2) +: I(3) +: I(4)) }  case class I(k: Int) {   def ++(that: I): I = I(this.k + that.k)   def +:(that: I): I = I(this.k + that.k) } <\/code><\/pre>\n<p>  \u0441\u0442\u0440\u043e\u043a\u0430  <\/p>\n<pre> I(1) ++ I(2) ++ I(3) ++ I(4) <\/pre>\n<p>  \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e (\u043b\u0435\u0432\u043e\u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c)  <\/p>\n<pre> ((I(1) ++ I(2)) ++ I(3)) ++ I(4) <\/pre>\n<p>  \u0438 \u043f\u043e\u0442\u043e\u043c \u0434\u043e  <\/p>\n<pre> (((I(1).++(I(2))).++(I(3)) ++ I(4) <\/pre>\n<p>  \u0430 \u0441\u0442\u0440\u043e\u043a\u0430  <\/p>\n<pre> I(1) +: I(2) +: I(3) +: I(4) <\/pre>\n<p>  \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e (\u043f\u0440\u0430\u0432\u043e\u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c)  <\/p>\n<pre> I(1) +: (I(2) +: (I(3) +: I(4))) <\/pre>\n<p>  \u0438 <b>\u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043e\u0442 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u043a \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/b> (\u043c\u0430\u0433\u0438\u044f &#8216;:&#8217; \u0432 \u043a\u043e\u043d\u0446\u0435 \u0438\u043c\u0435\u043d\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430)  <\/p>\n<pre> I(1) +: (I(2) +: (I(3) +: I(4))) -&gt;  I(1) +: (I(2) +: (I(4).+:(I(3)))) -&gt; I(1) +: ((I(4).+:(I(3))).+:(I(2))) -&gt; ((I(4).+:(I(3))).+:(I(2))).+:(I(1)) <\/pre>\n<p>  \u0412\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a\u043e\u043c\u0443 \u0431\u043e\u043b\u044c\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u0443\u043c\u0443 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e?<\/p>\n<p>  \u041d\u0443\u2026 \u0432\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 List)  <\/p>\n<pre><code class=\"scala\">object Demo {   val list =   0 ::  1 ::  2 ::  Nil } <\/code><\/pre>\n<p>  \u0412\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u044d\u0442\u0430 \u043c\u0430\u0433\u0438\u044f? \u0418 \u043f\u043e\u0447\u0435\u043c\u0443 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a Nil?<br \/>  \u0412\u0441\u0435 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e: &#8216;::&#8217; \u2014 \u044d\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 List! \u0421 \u043f\u0440\u0430\u0432\u043e\u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0440\u0435\u0432\u0435\u0440\u0441\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u0432.<\/p>\n<p>  List \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a (\u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u0430\u044f \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f)  <\/p>\n<pre><code class=\"scala\">sealed abstract class List[+A] {   def head: A   def tail: MyList[A]   def isEmpty: Boolean   def ::[B &gt;: A](x: B): List[B] = new Node(x, this) }  final case class Node[A](head: A, tail: List[A]) extends List[A] {   override def isEmpty: Boolean = false } object Nil extends List[Nothing] {   override def head: Nothing = throw new Error   override def tail: MyList[Nothing] = throw new Error   override def isEmpty: Boolean = true } <\/code><\/pre>\n<p>  \u0418 \u043a\u043e\u0434   <\/p>\n<pre><code class=\"scala\">object Demo {   val list =   0 ::  1 ::  2 ::  Nil } <\/code><\/pre>\n<p>  \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u0432  <\/p>\n<pre><code class=\"scala\">object Demo {   val list =  ( ( Nil.::(2) ).::(1) ).::(1) } <\/code><\/pre>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u0438\u0432\u0430\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043e\u0434\u043d\u043e\u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a (\u0441\u0442\u0435\u043a) \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (Nil). <\/p>\n<p>  <a name=\"5\"><\/a>  <\/p>\n<h2>Infix types<\/h2>\n<p>  <a href=\"http:\/\/www.scala-lang.org\/files\/archive\/spec\/2.11\/03-types.html#infix-types\">\u0418\u043d\u0444\u0438\u043a\u0441\u043d\u044b\u0435 \u0442\u0438\u043f\u044b (infix types)<\/a> \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044c type constructors \u043e\u0442 \u0434\u0432\u0443\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 type constcructor \u043e\u0442 \u0434\u0432\u0443\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432? \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e generic class\/trait \u0441 \u0434\u0432\u0443\u043c\u044f type variable. \u0418\u043c\u0435\u044f \u0442\u0430\u043a\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 (\u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e &#8216;ab&#8217;), \u0434\u0430\u0435\u043c \u0435\u043c\u0443 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Int \u0438 String \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c (\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u0435\u043c) \u0442\u0438\u043f ab[Int, String] <\/p>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u043c  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   val x0: ab[Int, String] = null   val x1: Int ab String = null }  case class ab[A, B](a: A, b: B) <\/code><\/pre>\n<p>  \u0422\u0438\u043f ab[Int, String] \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u043a\u0430\u043a Int ab String.<\/p>\n<p>  \u0412\u0441\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0435\u0441\u0435\u043b\u0435\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b type constructor \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0435 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e &#8216;ab&#8217; \u0430 \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 &#8216;++&#8217;.  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   val x0: ++[Int, String] = null    val x1: Int ++ String = null    val x2: List[Int ++ String] = null    val f: Int ++ String =&gt; String ++ Int = null } case class ++[A, B](a: A, b: B) <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0412\u044b \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0435 \u0433\u0434\u0435-\u0442\u043e \u043c\u0430\u0433\u0438\u044e \u0432\u0438\u0434\u0430  <\/p>\n<pre><code class=\"scala\">def f[A, B](x: A &lt;:&lt; B) <\/code><\/pre>\n<p>  \u0438\u043b\u0438  <\/p>\n<pre><code class=\"scala\">def f[A, B](x: A =:= B) <\/code><\/pre>\n<p>  \u0422\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u043d\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u0432 Predef.scala \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 &#8216;=:=&#8217; \u0438 &#8216;&lt;:&lt;&#8216;  <\/p>\n<pre><code class=\"scala\">object Predef extends ... {   ..   ... class &lt;:&lt;[-From, +To] extends ...   ... class =:=[From, To] extends ...   .. } <\/code><\/pre>\n<p>  <a name=\"6\"><\/a>  <\/p>\n<h2>Prefix operators<\/h2>\n<p>  \u0418\u0437 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Scala  <\/p>\n<blockquote><p>A prefix operation op;e consists of a prefix operator op, which must be one of the identifiers \u2018+\u2019, \u2018-\u2019, \u2018!\u2019 or \u2018~\u2019. The expression op;e is equivalent to the postfix method application e.unary_op.<\/p>\n<p>  Prefix operators are different from normal function applications in that their operand expression need not be atomic. For instance, the input sequence -sin(x) is read as -(sin(x)), whereas the function application negate sin(x) would be parsed as the application of the infix operator sin to the operands negate and (x).<\/p><\/blockquote>\n<p>  \u0412 Scala \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 4 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 &#8216;+&#8217;, &#8216;-&#8216;, &#8216;!&#8217;, &#8216;~&#8217;. \u041e\u043d\u0438 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 &#8216;unary_+&#8217;, &#8216;unary_-&#8216;, &#8216;unary_!&#8217;, &#8216;unary_~&#8217;.<\/p>\n<pre><code class=\"scala\">object Demo {   val x0 = +I(0)   val x1 = -I(0)   val x2 = !I(0)   val x3 = ~I(0) }  case class I(k: Int) {   \/\/ \u043d\u0435 \u0438\u0449\u0438\u0442\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438   def unary_+(): I = I(2 * this.k)    def unary_-(): I = I(3 * this.k)   def unary_!(): I = I(4 * this.k)   def unary_~(): I = I(5 * this.k) } <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Java Redflection API, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0432\u043e \u0447\u0442\u043e \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f  <\/p>\n<pre><code class=\"java\">import java.lang.reflect.Method;  public class Demo {     public static void main(String[] args) {         Class clazz = I.class;         for (Method m : clazz.getDeclaredMethods()) {             System.out.println(m);         }     } }  &gt;&gt; public I I.unary_$plus() &gt;&gt; public I I.unary_$minus() &gt;&gt; public I I.unary_$bang() &gt;&gt; public I I.unary_$tilde() ... <\/code><\/pre>\n<p>  \u041d\u0430\u0434\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0441\u044c \u0438 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f (\u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0430 &#8216;+&#8217;\/&#8217;-&#8216;\/&#8217;!&#8217;\/&#8217;~&#8217; \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0430\u0445\u0430\u0440 \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u043b\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 &#8216;unary_+&#8217;\/&#8217;unary_-&#8216;\/&#8217;unary_!&#8217;\/&#8217;unary_~&#8217;)  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   val x0 = +I(0)   val x1 = -I(0)   val x2 = !I(0)   val x3 = ~I(0)    \/\/ \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430   val y0 = I(0).unary_+()   val y1 = I(0).unary_-()   val y2 = I(0).unary_!()   val y3 = I(0).unary_~() }  case class I(k: Int) {   \/\/ \u043d\u0435 \u0438\u0449\u0438\u0442\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438   def unary_+(): I = I(2 * this.k)   def unary_-(): I = I(3 * this.k)   def unary_!(): I = I(4 * this.k)   def unary_~(): I = I(5 * this.k) } <\/code><\/pre>\n<p>  <a name=\"7\"><\/a>  <\/p>\n<h2>Postfix operators<\/h2>\n<p>  \u041c\u0435\u0442\u043e\u0434\u044b \u0432 \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u2014 \u044d\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u0432\u0430\u043b\u0438 \u0431\u0435\u0437 \u0442\u043e\u0447\u043a\u0438. \u041f\u043e \u0440\u044f\u0434\u0443 \u043f\u0440\u0438\u0447\u0438\u043d \u043c\u0435\u0442\u043e\u0434\u044b \u0432 \u043f\u043e\u0441\u0444\u0438\u043a\u0441\u043d\u043e\u0439 \u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043e\u0448\u0438\u0431\u043e\u043a (\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 <a href=\"http:\/\/docs.scala-lang.org\/style\/method-invocation.html#suffix_notation\">\u0442\u0443\u0442<\/a> \u0438 <a href=\"http:\/\/stackoverflow.com\/questions\/13011204\/scalas-postfix-ops\">\u0442\u0443\u0442<\/a>).  <\/p>\n<pre><code class=\"scala\">object Demo {   val tailList0 = List(0, 1, 2).tail \/\/ &quot;normal&quot; notation   val tailList1 = List(0, 1, 2) tail \/\/ postfix\/suffix notation } <\/code><\/pre>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u043d\u0430 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u043b\u0430\u0445 (def !).<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 100500 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0432 Scala  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   val a = I(0).!()   val b = I(0).!   val c = I(0) !()   val d = I(0) !   \/\/ postfix notation }  case class I(k: Int) {   def !(): I = I(2 * this.k) \/\/ \u043d\u0435 \u0438\u0449\u0438\u0442\u0435 \u0442\u0443\u0442 \u043b\u043e\u0433\u0438\u043a\u0438, \u0435\u0435 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 } <\/code><\/pre>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 &#8216;!&#8217; \u043d\u0430 \u043a\u043b\u0430\u0441\u0441\u0435-\u043e\u0431\u0435\u0440\u0442\u043a\u0435  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   val x: I = I(5)!;   println(x) }  case class I(k: Int) {   def !(): I = if (k == 0) I(1) else I(k) * (I(k - 1)!)   def *(that: I): I = I(this.k * that.k) }  &gt;&gt; I(120) <\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0442\u043e\u0447\u043a\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438, \u0438\u043d\u0430\u0447\u0435 \u2014 \u041d\u0415 \u041a\u041e\u041c\u041f\u0418\u041b\u0418\u0420\u0423\u0415\u0422\u0421\u042f (\u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441 \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u044c, \u0434\u0430)!<\/p>\n<p>  \u0421\u043f\u0440\u044f\u0447\u0435\u043c \u044f\u0432\u043d\u043e\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430-\u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043f\u043e\u0434 implicit-\u0430\u043c\u0438 (Int -&gt; I, I -&gt; Int)  <\/p>\n<pre><code class=\"scala\">object Demo extends App {    implicit class I(val k: Int) {     def !(): I = if (k == 0) I(1) else I(k) * (I(k - 1)!)     def *(that: I): I = I(this.k * that.k)   }    implicit def toInt(x: I): Int = x.k    val x: Int = 5!;   println(x) }  &gt;&gt; 120 <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043f\u0440\u044f\u0447\u0435\u043c \u0438 \u0441\u0430\u043c\u0438 implicit-\u044b  <\/p>\n<pre><code class=\"scala\">object Demo extends App {   import MathLib._    val x: Int = 5!;   println(x) }  object MathLib {    implicit class I(val k: Int) {     def !(): I = if (k == 0) I(1) else I(k) * (I(k - 1)!)     def *(that: I): I = I(this.k * that.k)   }    implicit def toInt(x: I): Int = x.k }  &gt;&gt; 120 <\/code><\/pre>\n<p>  <a name=\"8\"><\/a>  <\/p>\n<h2>\u041e \u043a\u0443\u0440\u0441\u0435<\/h2>\n<p>  \u0410\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/\">\u043a\u0443\u0440\u0441 \u043f\u043e Scala<\/a> \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 MOOC-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 UDEMY \u2014 <a href=\"https:\/\/www.udemy.com\/scala-for-java-developers-ru\/?couponCode=HABR-OPERATOR\">\u00abScala for Java Developers\u00bb<\/a>. \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435\u043e\u0431\u044a\u0435\u043c\u043b\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0432\u0441\u0435\u043c \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u043c \u044f\u0437\u044b\u043a\u0430 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u00abtype acrobatic\u00bb \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c (scalaz, shapeless) \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0430\u0441\u044c, \u043d\u043e \u043f\u0440\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<br \/>  \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 32-\u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u043a\u0443\u0440\u0441 \u0437\u0430 399$ \u0440\u0435\u0448\u0435\u043d\u043e \u00ab\u0440\u0430\u0437\u0440\u0435\u0437\u0430\u0442\u044c\u00bb \u043d\u0430 \u0434\u0432\u0430 16-\u0447\u0430\u0441\u043e\u0432\u044b\u0445 \u043a\u0443\u0440\u0441\u0430 \u043f\u043e 199$ (\u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0432\u0435\u0434\u0435\u0442\u0435 \u043d\u0430 UDEMY \u043a\u043e\u0434 \u043a\u0443\u043f\u043e\u043d\u0430 HABR-OPERATOR \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0439\u0434\u0435\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <a href=\"https:\/\/www.udemy.com\/scala-for-java-developers-ru\/?couponCode=HABR-OPERATOR\">udemy.com\/scala-for-java-developers-ru\/?couponCode=HABR-OPERATOR<\/a>, \u0442\u043e \u0446\u0435\u043d\u0430 \u0441\u043e \u0441\u043a\u0438\u0434\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 179$, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u0441\u0440\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043a\u0438\u0434\u043e\u0447\u043d\u044b\u0445 \u043a\u0443\u043f\u043e\u043d\u043e\u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e). \u0420\u0435\u0448\u0435\u043d\u043e \u043d\u0430\u0441\u044b\u0442\u0438\u0442\u044c \u043a\u0443\u0440\u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 (\u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 50 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e 5-15 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043a\u0443\u0440\u0441\u0430). <br \/>  \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u0443\u0440\u0441 \u0441\u043d\u044f\u0442 \u043d\u0430 75% (12 \u0447\u0430\u0441\u043e\u0432 \u0438\u0437 16) \u0438 \u0432\u044b\u043b\u043e\u0436\u0435\u043d \u043d\u0430 UDEMY \u043d\u0430 50% (8 \u0447\u0430\u0441\u043e\u0432 \u0438\u0437 16), \u0442\u0430\u043a \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435.<\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0442 \u0442\u0430\u043a\u0438\u0435 \u0442\u0435\u043c\u044b  <\/p>\n<ul>\n<li><b>\u00abIntro\u00bb<\/b><\/li>\n<li><b>\u00abOOP \u2014 I: class, object, trait, case class\u00bb<\/b><\/li>\n<li><b>\u00abOOP \u2014 II: operator overloading\u00bb<\/b><\/li>\n<li><b>\u00abType \u2014 I: Scala Type Hierarchy\u00bb<\/b><\/li>\n<li><b>\u00abGenerics \u2014 I: covariance\/contravariance, Scala vs Java\u00bb<\/b><\/li>\n<li><b>\u00abCollections: Lists\u00bb<\/b><\/li>\n<li><b>\u00abImplicits\u00bb<\/b><\/li>\n<li><b>\u00abFunctional Programming \u2014 I: functional literals, closures, eta-expansions\u00bb<\/b><\/li>\n<li><b>\u00abLazyness: call-by-name, keyword &#8216;lazy&#8217;, trait DelayedInit\u00bb<\/b><\/li>\n<li><b>\u00abBuild-in control structures, expression-oriented programming: if, while, for, case\u00bb<\/b><\/li>\n<li><b>\u00abCustom control flow constructions\u00bb<\/b><\/li>\n<li><b>\u00abPattern matching: case classes, extractors\u00bb<\/b><\/li>\n<li><b>\u00abList-comprehentions\u00bb<\/b><\/li>\n<li><b>\u00ab\u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u0438\u043a\u0430: \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f, \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0434\u0435\u0440\u0435\u0432\u044c\u044f)\u00bb<\/b><\/li>\n<li><b>\u00abTuples\u00bb<\/b><\/li>\n<li><b>\u00ab\u0410\u043b\u0433\u0435\u0431\u0440\u0430: \u043c\u0430\u0433\u043c\u0430, \u043f\u043e\u043b\u0443\u0433\u0440\u0443\u043f\u043f\u0430, \u043c\u043e\u043d\u043e\u0438\u0434, \u0433\u0440\u0443\u043f\u043f\u0430\u00bb<\/b><\/li>\n<li><b>\u00ab\u0422\u0435\u043e\u0440\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432: \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u00bb<\/b><\/li>\n<li><b>\u00ab\u0422\u0435\u043e\u0440\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432: \u043c\u043e\u0440\u0444\u0438\u0437\u043c\u044b\u00bb<\/b><\/li>\n<\/ul>\n<p>  <b>\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 #1<\/b>: \u0440\u044f\u0434 \u0442\u0435\u043c (OOP, Generics, Scala types, &#8230;) \u0440\u0435\u0448\u0435\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 2 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 3 \u0447\u0430\u0441\u0442\u0438 \u0432 \u0432\u0438\u0434\u0443 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 (\u043f\u0435\u0440\u0432\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u0443\u0440\u0441\u0430, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u2014 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u0443\u0440\u0441\u0430 (\u00abOOP-III: \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, Cake Pattern\u00bb, \u00abGenerics-II: existential types, higher-king types\u00bb, &#8230;)).<\/p>\n<p>  <b>\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 #2<\/b>: \u0432 \u0432\u0438\u0434\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u0435\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0439 (\u0443\u0447\u0438\u043c 3 \u0441\u0435\u043c\u0435\u0441\u0442\u0440\u0430 \u00ab\u043c\u0430\u0442\u0430\u043d\u00bb, \u043d\u043e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u00ab\u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u044b\u00bb \u2014 \u0442\u0435\u043e\u0440\u0438\u044e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432, \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443, \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443, \u0430\u043b\u0433\u0435\u0431\u0440\u0443, \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u0438\u043a\u0443, \u0442\u0435\u043e\u0440\u0438\u044e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439, \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438\/\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438, &#8230;) \u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0439, \u0432 \u043a\u0443\u0440\u0441 \u0432\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 (\u0432\u0441\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u00ab\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 Scala\u00bb, \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u0435\u0437 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0441\u043a\u0438\u0445 \u00ab\u0441\u0444\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u043d\u0435\u0439 \u0432 \u0432\u0430\u043a\u0443\u0443\u043c\u0435\u00bb).<\/p>\n<p>  P.S. \u041d\u0430 \u0432\u0441\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043e\u0442\u0432\u0435\u0447\u0443 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \/ \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445 \u0432 \u00ab\u043b\u0438\u0447\u043a\u0443\u00bb \u0438\u043b\u0438 \u043f\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c<br \/>  skype: GolovachCourses<br \/>  email: GolovachCourses@gmail.com<\/p>\n<p>  P.P.S \u041e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043a\u0443\u0440\u0441\u0430 \u043f\u043e Scala \u0430\u0432\u0442\u043e\u0440 \u0432\u0435\u0434\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0442\u0440\u0435\u043d\u0438\u043d\u0433\u0438 \u043f\u043e Scala \u0432 IT-\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445, <a href=\"http:\/\/jeeconf.com\/program\/quick-dive-into-scala\/\">\u0442\u0440\u0435\u043d\u0438\u043d\u0433\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0439<\/a>, \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u043e\u043a\u043b\u0430\u0434\u044b \u043f\u043e Scala \u0438 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0443\u0441\u043b\u0443\u0433\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 Java \u043d\u0430 Scala.   \t\t\t\t<\/p>\n<div class=\"polling\">\n<form action=\"\/json\/polling\/\" class=\"poll\" method=\"post\">\n<div class=\"poll_title\">\u0421 \u043a\u0430\u043a\u0438\u043c \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0412\u044b \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u044b \u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043c\u0435\u0440\u0435?<\/div>\n<p>  \t\t<input type=\"hidden\" name=\"post_id\" value=\"255631\"\/> \t\t<input type=\"hidden\" name=\"polling_question_id\" value=\"13473\"\/>  \t\t<\/p>\n<table class=\"answer\">\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv66539\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"66539\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv66539\">Scala \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0438 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u044f\u0437\u044b\u043a, \u043d\u0438\u0447\u0442\u043e \u043d\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u043e\u0441\u0442\u0438<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv66541\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"66541\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv66541\">Scala \u0441\u043b\u043e\u0436\u043d\u044b\u0439, \u043d\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0442\u0440\u043e\u0439\u043d\u044b\u0439 \u044f\u0437\u044b\u043a<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv66543\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"66543\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv66543\">Scala \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u044f\u0437\u044b\u043a \u0432 \u0432\u0438\u0434\u0443 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0440\u043e\u0439\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u0445\u043e\u0442\u044f \u0438 \u00ab\u043e\u0431\u044a\u0435\u043c\u043d\u044b\u0439\u00bb \u043f\u043e \u00ab\u0444\u0438\u0447\u0430\u043c\u00bb)<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv66545\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"66545\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv66545\">Scala \u2014 \u0447\u0442\u043e \u044d\u0442\u043e???<\/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<form action=\"\/json\/polling\/\" class=\"poll\" method=\"post\">\n<div class=\"poll_title\">\u041a\u0430\u043a\u043e\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043c\u0435\u0440\u0435 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u0430\u0448\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a \u0424\u041f?<\/div>\n<p>  \t\t<input type=\"hidden\" name=\"post_id\" value=\"255631\"\/> \t\t<input type=\"hidden\" name=\"polling_question_id\" value=\"13475\"\/>  \t\t<\/p>\n<table class=\"answer\">\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv66547\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"66547\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv66547\">\u042f \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u0438 \u043d\u0435 \u0445\u043e\u0447\u0443, \u043c\u043d\u0435 \u0443\u044e\u0442\u043d\u0435\u043d\u044c\u043a\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043c\u043e\u0435\u0439 Java (C#, PHP, &#8230;)<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv66549\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"66549\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv66549\">\u042f \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043d\u043e \u0445\u043e\u0447\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442 \u043a\u0440\u0443\u0433\u043e\u0437\u043e\u0440\/\u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv66551\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"66551\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv66551\">\u042f \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043d\u043e \u0445\u043e\u0447\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0440\u044c\u0435\u0440\u044b (\u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430, \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u0437\u0430 \u0440\u0443\u0431\u0435\u0436)<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv66553\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"66553\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv66553\">\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430 Scala \u0438 \u0434\u043e\u0432\u043e\u043b\u0435\u043d<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv66555\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"66555\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv66555\">\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430 Scala \u0438 \u043d\u0435\u0434\u043e\u0432\u043e\u043b\u0435\u043d<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv66557\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"66557\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv66557\">\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u0438 \u0434\u043e\u0432\u043e\u043b\u0435\u043d<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"checkbox\" id=\"vv66559\" \t\t\t\t\t\tclass=\"checkbox js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"66559\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv66559\">\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u0438 \u043d\u0435\u0434\u043e\u0432\u043e\u043b\u0435\u043d<\/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=\"http:\/\/habrahabr.ru\/post\/255631\/\"> http:\/\/habrahabr.ru\/post\/255631\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/251239\/\">\u044f \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u0443\u0440\u0441 \u043f\u043e Scala<\/a>. \u041e\u043d \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0438 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 MOOC-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 UDEMY \u2014 <a href=\"https:\/\/www.udemy.com\/scala-for-java-developers-ru\/?couponCode=HABR-OPERATOR\">\u00abScala for Java Developers\u00bb<\/a>. \u0411\u043e\u043b\u044c\u0448\u0435 \u043e \u043a\u0443\u0440\u0441\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#8\">\u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438<\/a>.<\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0442\u0435\u043c \u043a\u0443\u0440\u0441\u0430 \u2014 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 Scala.<\/p>\n<ul>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#0\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#1\">Infix operators<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#2\">\u00abPointless style\u00bb (infix notation) \u044d\u0442\u043e \u043d\u0435 \u00abpoint-free style\u00bb (tacit programming)<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#3\">\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#4\">\u0410\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#5\">Infix types<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#6\">Prefix operators<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#7\">Postfix operators<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/company\/golovachcourses\/blog\/255631\/#8\">\u041e \u043a\u0443\u0440\u0441\u0435<\/a><\/li>\n<\/ul>\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-255812","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/255812","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=255812"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/255812\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=255812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=255812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=255812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}