{"id":737,"date":"2019-02-01T17:51:27","date_gmt":"2019-02-01T17:51:27","guid":{"rendered":"http:\/\/www.bestkora.com\/SwiftLearning\/?p=737"},"modified":"2019-02-13T16:02:38","modified_gmt":"2019-02-13T16:02:38","slug":"pobochnye-effekty-side-effects","status":"publish","type":"post","link":"https:\/\/www.bestkora.com\/SwiftLearning\/pobochnye-effekty-side-effects\/","title":{"rendered":"\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b (Side Effects)."},"content":{"rendered":"<p><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438-\u044d\u043f\u0438\u0437\u043e\u0434\u0430\u00a0<strong><a href=\"https:\/\/www.pointfree.co\/episodes\/ep1-functions\">&#8220;Side Effects&#8221;<\/a><\/strong>, \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435\u00a0<strong><a href=\"https:\/\/www.pointfree.co\/\">pointfree.co<\/a><\/strong>.<br \/>\n\u041a\u043e\u0434 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/pointfreeco\/episode-code-samples\/tree\/master\/0002-side-effects\"><strong>\u0437\u0434\u0435\u0441\u044c<\/strong><\/a>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">&#8220;\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221; &#8211; \u044d\u0442\u043e \u0442\u043e, \u0431\u0435\u0437 \u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0436\u0438\u0442\u044c; \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u043e\u0434\u0430 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221;, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u043a\u043e\u0434 \u0442\u0440\u0443\u0434\u043d\u044b\u043c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u043a\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438, \u043d\u0435 \u0442\u0435\u0440\u044f\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221; (<strong>composition<\/strong>).<\/span><\/p>\n<h1>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h1>\n<p><span style=\"font-weight: 400;\">\u0423 \u043d\u0430\u0441 \u0431\u044b\u043b \u0446\u0435\u043b\u044b\u0439 <strong><a href=\"https:\/\/www.bestkora.com\/SwiftLearning\/funktsii\/\">\u044d\u043f\u0438\u0437\u043e\u0434<\/a>,<\/strong> \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u044b\u0439 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0430\u043a\u0446\u0435\u043d\u0442 \u043d\u0430 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0422\u0418\u041f\u041e\u0412 \u0432\u0445\u043e\u0434\u043e\u0432 \u0438 \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a \u043d\u0438\u043c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; (<strong>compose<\/strong>). \u041d\u043e \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f &#8220;\u043f\u043e\u0439\u043c\u0430\u0442\u044c&#8221; \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439. \u042d\u0442\u0438 \u0432\u0435\u0449\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221; (\u201c<strong>side effects<\/strong>&#8220;).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">&#8220;\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221; &#8211; \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u0438 \u0445\u0443\u0436\u0435 \u0442\u043e\u0433\u043e, \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u044e\u0442 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0418\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u044d\u043f\u0438\u0437\u043e\u0434\u0430 \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0438\u0437 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u043e &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221; &#8220;\u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u0430\u043c \u043f\u0430\u043b\u043a\u0443 \u0432 \u043a\u043e\u043b\u0435\u0441\u0430&#8221; \u0432 \u044d\u0442\u043e\u043c.<br \/>\n\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u043f\u0438\u0437\u043e\u0434\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0438\u043f\u044b &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432&#8221;, \u043f\u043e\u043a\u0430\u0436\u0435\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0442\u0440\u0443\u0434\u043d\u043e \u0438\u0445 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043c\u0435\u0448\u0430\u044e\u0442 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221; \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/span><\/p>\n<p><!--more--><\/p>\n<p><span style=\"font-weight: 400;\">&#8220;\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221; &#8211; \u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u0438\u043d, \u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432&#8221;:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func compute(_ x: Int) -&gt; Int {\r\n  return x * x + 1\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0415\u0441\u043b\u0438 \u043c\u044b \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">compute(2) \/\/ 5<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0435\u0437 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430&#8221; \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 \u0432\u0445\u043e\u0434\u043e\u043c, \u043c\u044b \u0412\u0421\u0415\u0413\u0414\u0410 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u044b\u0445\u043e\u0434:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">compute(2) \/\/ 5\r\ncompute(2) \/\/ 5\r\ncompute(2) \/\/ 5<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0422\u0430\u043a\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u043d\u0438\u0445.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">assertEqual(5, compute(2))<\/code><\/pre>\n<p>\u2705<br \/>\n<span style=\"font-weight: 400;\">\u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442 \u0441 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0438\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u0445\u043e\u0434 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c, \u0442\u043e \u043e\u0431\u0430 \u0442\u0435\u0441\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">assertEqual(4, compute(2))<\/code><\/pre>\n<p>\u274c<\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">assertEqual(5, compute(3))<\/code><\/pre>\n<p>\u274c<br \/>\n<span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221; \u0432 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/span><\/p>\n<pre class=\"line-numbers\" data-line=\"3\"><code class=\"language-swift\">func computeWithEffect(_ x: Int) -&gt; Int {\r\n  let computation = x * x + 1\r\n  print(\"Computed \\(computation)\")\r\n  return computation<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <strong><span style=\"color: #0000ff;\">print<\/span><\/strong> \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0443.<\/span><br \/>\n<span style=\"font-weight: 400;\">\u0415\u0441\u043b\u0438 \u043c\u044b \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong><span style=\"color: #0000ff;\">computeWithEffect<\/span> <\/strong>\u0441 \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 \u0432\u0445\u043e\u0434\u043e\u043c, \u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u0432\u044b\u0445\u043e\u0434:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">computeWithEffect(2) \/\/ 5<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043d\u0430\u0448\u0443 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u0442\u0430\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">Computed 5<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0415\u0441\u043b\u0438 \u043c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong><span style=\"color: #0000ff;\">computeWithEffect<\/span><\/strong> \u0441 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong><span style=\"color: #0000ff;\">compute<\/span><\/strong>, \u0442\u043e \u043e\u043d\u0430 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439, \u043d\u043e \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong><span style=\"color: #0000ff;\">print<\/span><\/strong> \u0432\u044b\u0448\u043b\u0430 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u041c\u0418\u0420 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u043b\u0430 \u0442\u0430\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u043b\u0430 \u0447\u0442\u043e-\u0442\u043e \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u0438. &#8220;\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221; \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/span><br \/>\n<span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">assertEqual(5, computeWithEffect(2))<\/code><\/pre>\n<p>\u2705<br \/>\n<span style=\"font-weight: 400;\">\u0422\u0435\u0441\u0442 \u043f\u0440\u043e\u0448\u0435\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e! \u041d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">Computed 5\r\nComputed 5<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e &#8220;\u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435&#8221;, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u0430, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0438 \u044d\u0442\u043e, \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u0432\u0430\u0436\u043d\u043e, \u043d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0447\u0430\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0439 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221;, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430 \u0434\u0438\u0441\u043a \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u00a0<strong>API<\/strong> \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u043b\u0438 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443, \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u043e\u0431 \u044d\u0442\u043e\u043c &#8220;\u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438&#8221; \u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">&#8220;\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221; \u043c\u043e\u0433\u0443\u0442 \u0442\u0430\u043a\u0436\u0435 \u0441\u043b\u043e\u043c\u0430\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u0443\u044e&#8221; \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0412 \u043d\u0430\u0448\u0435\u043c \u044d\u043f\u0438\u0437\u043e\u0434\u0435, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c, \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <strong><span style=\"color: #0000ff;\">map<\/span><\/strong> \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u0441 \u0434\u0432\u0443\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 &#8211; \u044d\u0442\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <strong><span style=\"color: #0000ff;\">map<\/span><\/strong> \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0441 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439&#8221; \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">[2, 10].map(compute).map(compute) \/\/ [26, 10202]\r\n[2, 10].map(compute &gt;&gt;&gt; compute)  \/\/ [26, 10202]<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f <strong><span style=\"color: #0000ff;\">computeWithEffect<\/span><\/strong>:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">[2, 10].map(computeWithEffect).map(computeWithEffect)\r\n\/\/ [26, 10202]\r\n[2, 10].map(computeWithEffect &gt;&gt;&gt; computeWithEffect)\r\n\/\/ [26, 10202]<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442, \u043d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0442\u043e \u044d\u0442\u0438 &#8220;\u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f&#8221; \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442!<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">Computed 5\r\nComputed 101\r\nComputed 26\r\nComputed 10202\r\n--\r\nComputed 5\r\nComputed 26\r\nComputed 101\r\nComputed 10202<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0431\u0435\u0437 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044f &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432&#8221;. \u041d\u0430\u0448\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 &#8211; \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438: \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430\u0448 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0432\u0430\u0436\u0434\u044b, \u043c\u044b \u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043c\u0435\u0435\u0442 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221;, \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c\u0438 \u043e\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439! \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 \u041c\u0418\u0420\u0415 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432&#8221; \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u0440\u0443\u0448\u0438\u0442\u044c \u0432\u0430\u0448 \u043a\u043e\u0434!<\/span><\/p>\n<h1>\u0421\u043a\u0440\u044b\u0442\u044b\u0435 \u0432\u044b\u0445\u043e\u0434\u044b<\/h1>\n<p><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u043c &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c&#8221;. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221; \u0432 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u0449\u0435\u0439, \u0442\u043e\u043a \u0447\u0442\u043e \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0441\u0442\u0440\u043e\u043a <strong><span style=\"color: #0000ff;\">[String]<\/span><\/strong>.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func computeAndPrint(_ x: Int) -&gt; (Int, [String]) {\r\n   let computation = x * x + 1\r\n   return (computation, [\"Computed \\(computation)\"])\r\n}\r\n\r\ncomputeAndPrint(2) \/\/ (5, [\"Computed 5\"])<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u043d\u043e \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u043b\u043e\u0433\u043e\u0432 (<strong>logs<\/strong>), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c.<br \/>\n\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">assertEqual(\r\n  (5, [\"Computed 5\"]),\r\n  computeAndPrint(2)\r\n)<\/code><\/pre>\n<p>\u2705<br \/>\n<span style=\"font-weight: 400;\">\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043d\u043e \u0438 \u0441\u0430\u043c &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c! \u041d\u0430\u0448 \u0442\u0435\u0441\u0442 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221; \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0443:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">assertEqual(\r\n  (5, [\"Computed 3\"]),\r\n  computeAndPrint(2)\r\n)<\/code><\/pre>\n<p>\u274c<br \/>\n<span style=\"font-weight: 400;\">\u0417\u0434\u0435\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0435, \u043d\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0441\u043b\u043e\u0436\u0435\u0435, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044f <strong>API<\/strong> \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438, \u0438 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <strong><span style=\"color: #0000ff;\">assertions<\/span><\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442 \u044d\u0442\u043e\u0442 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221; \u043a \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u043e\u0442 \u043d\u0435\u0433\u043e.<\/span><br \/>\n<span style=\"font-weight: 400;\">\u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221;, \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u041c\u0418\u0420\u0415, \u0435\u0441\u0442\u044c \u043d\u0438\u0447\u0442\u043e \u0438\u043d\u043e\u0435, \u043a\u0430\u043a <strong>\u0441\u043a\u0440\u044b\u0442\u044b\u0439 \u043d\u0435\u044f\u0432\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434<\/strong> \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. <strong>\u041d\u0435\u044f\u0432\u043d\u043e\u0441\u0442\u044c<\/strong> &#8211; \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0432\u0435\u0449\u044c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/span><br \/>\n<span style=\"font-weight: 400;\">\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c: \u201c\u041d\u0443 \u0445\u043e\u0440\u043e\u0448\u043e, \u0430 \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u044d\u0442\u043e\u0442 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221;?\u201d \u0412\u044b\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044f &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221; \u043d\u0430\u0440\u0443\u0436\u0443 \u0432 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0422\u0418\u041f, \u043c\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u044d\u0442\u043e\u0442 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221; \u043d\u0430 \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<br \/>\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">let (computation, logs) = computeAndPrint(2)\r\nlogs.forEach { print($0) }<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u0441 \u044d\u0442\u0438\u043c\u0438 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u043c\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c\u0438&#8221; \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0438\u0445 \u0434\u0430\u043b\u044c\u0448\u0435. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u0434\u0435\u043b\u043e \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435! \u042d\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043d\u0435\u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043d\u043e \u0435\u0441\u0442\u044c \u0440\u044f\u0434 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0435\u0435 \u0440\u0435\u0448\u0438\u0442\u044c, \u0445\u043e\u0442\u044f \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0435\u0435.<br \/>\n\u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432&#8221;, \u043d\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u0430 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0418, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u043b\u043e\u043c\u0430\u043b\u0438 \u043e\u0434\u043d\u0443 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439: \u0438\u0445 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; (<strong>composition<\/strong>).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong><span style=\"color: #0000ff;\">compute<\/span><\/strong> &#8211; \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c &#8220;\u043f\u0440\u044f\u043c\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; (<strong>forward-composition<\/strong>) \u0441\u0430\u043c\u0430 \u0441 \u0441\u043e\u0431\u043e\u0439.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">compute &gt;&gt;&gt; compute \/\/ (Int) -&gt; Int<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0418 \u0434\u0440\u0443\u0433\u0430\u044f \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong><span style=\"color: #0000ff;\">computeWithEffect<\/span><\/strong><span style=\"color: #000000;\">&#8211;\u00a0<\/span>\u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c &#8220;\u043f\u0440\u044f\u043c\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; (<strong>forward-composition<\/strong>) \u0441\u0430\u043c\u0430 \u0441 \u0441\u043e\u0431\u043e\u0439.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">computeWithEffect &gt;&gt;&gt; computeWithEffect \/\/ (Int) -&gt; In<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u043c\u043e\u0436\u0435\u043c &#8220;\u043f\u0440\u043e\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c&#8221; \u0432 \u043d\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 &#8220;\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0439&#8221; \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440<strong><span style=\"color: #0000ff;\"> |&gt;<\/span><\/strong> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">2 |&gt; compute &gt;&gt;&gt; compute \/\/ 26\r\n2 |&gt; computeWithEffect &gt;&gt;&gt; computeWithEffect \/\/ 26<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043e\u043f\u044f\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong><span style=\"color: #0000ff;\">computeWithEffect<\/span><\/strong> \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">Computed 5\r\nComputed 26<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u0435\u0436\u0434\u0435 \u0442\u0435\u043c, \u043d\u0430\u0448\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong><span style=\"color: #0000ff;\">computeAndPrint<\/span> <\/strong>\u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221;.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">computeAndPrint &gt;&gt;&gt; computeAndPrint\r\n\/\/ Cannot convert value of type '(Int) -&gt; (Int, [String])' \r\n\/\/ to expected argument type '((Int, [String])) -&gt; (Int, [String])'\r\n\r\n\/\/ (\u043d\u0435\u00a0\u043c\u043e\u0433\u0443\u00a0\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0\u0422\u0418\u041f\u0410\u00a0'(Int) -&gt; (Int, [String])'\r\n\/\/\u00a0\u0432\u00a0\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439\u00a0\u0422\u0418\u041f\u00a0\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u00a0'((Int, [String])) -&gt; (Int, [String])'<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0412\u044b\u0445\u043e\u0434\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong><span style=\"color: #0000ff;\">computeAndPrint<\/span><\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0442\u0435\u0436 (<strong>tuple<\/strong>) <strong><span style=\"color: #0000ff;\">(Int, [String])<\/span><\/strong>, \u0430 \u0432\u0445\u043e\u0434\u043e\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e\u00a0<strong><span style=\"color: #0000ff;\">Int<\/span><\/strong>.<\/span><br \/>\n<span style=\"font-weight: 400;\">\u041c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0438 \u0432\u0438\u0434\u0438\u043c \u043e\u043f\u044f\u0442\u044c: \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221;, \u043c\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0422\u0418\u041f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0438\u0441\u0430\u0442\u044c &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221;, \u0438 \u043c\u044b &#8220;\u0440\u0430\u0437\u0440\u044b\u0432\u0430\u0435\u043c&#8221; \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0441\u0438\u043b\u0435\u043d\u0438\u044f &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u0438&#8221; \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/span><br \/>\n<span style=\"font-weight: 400;\">\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u0440\u0442\u0435\u0436 (<strong>tuple<\/strong>), \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c&#8221; \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0438 \u0432 \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong><span style=\"color: #0000ff;\">computeAndPrint.<\/span><\/strong> \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong><span style=\"color: #0000ff;\">compose<\/span><\/strong>, \u0447\u044c\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func compose&lt;A, B, C&gt;(\r\n  _ f: @escaping (A) -&gt; (B, [String]),\r\n  _ g: @escaping (B) -&gt; (C, [String])\r\n  ) -&gt; (A) -&gt; (C, [String]) {\r\n  \/\/ \u2026\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u0437\u043d\u0430\u043a\u043e\u043c\u043e. \u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<strong><span style=\"color: #0000ff;\"> &gt;&gt;&gt;<\/span><\/strong> : \u043c\u044b \u0438\u043c\u0435\u0435\u043c <strong><span style=\"color: #0000ff;\">(A) -&gt; B<\/span><\/strong>, <strong><span style=\"color: #0000ff;\">(B) -&gt; C<\/span><\/strong> \u0438 <strong><span style=\"color: #0000ff;\">(A) -&gt; C<\/span><\/strong>, \u043d\u043e \u0442\u0430\u043c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0435\u0449\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.<br \/>\n\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0422\u0418\u041f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0432 \u043d\u0430\u0448\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0436\u0435\u043d\u0438\u0438.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func compose&lt;A, B, C&gt;(\r\n  _ f: @escaping (A) -&gt; (B, [String]),\r\n  _ g: @escaping (B) -&gt; (C, [String])\r\n  ) -&gt; (A) -&gt; (C, [String]) {\r\n  return { a in\r\n    let (b, logs) = f(a)\r\n    let (c, moreLogs) = g(b)\r\n    return (c, logs + moreLogs)\r\n  }<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0438\u0433\u0443\u0440\u043d\u0443\u044e \u0441\u043a\u043e\u0431\u043a\u0443 \u0438 &#8220;\u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c&#8221; <strong><span style=\"color: #0000ff;\">a<\/span><\/strong>. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong><span style=\"color: #0000ff;\">f<\/span><\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 <span style=\"color: #0000ff;\"><strong>A<\/strong><\/span>s, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0435\u0439 <strong><span style=\"color: #0000ff;\">a<\/span><\/strong> \u0438 \u00a0&#8220;\u043f\u0440\u0438\u0432\u044f\u0436\u0435\u043c&#8221; \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 <strong><span style=\"color: #0000ff;\">b<\/span><\/strong> \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432\u00a0<span style=\"color: #0000ff;\"><span style=\"color: #000000;\">\u0441\u0442\u0440\u043e\u043a<\/span><\/span> <strong><span style=\"color: #0000ff;\">logs<\/span><\/strong>. \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c <strong><span style=\"color: #0000ff;\">b<\/span><\/strong>, \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e<strong><span style=\"color: #0000ff;\"> g<\/span><\/strong>, \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c <strong><span style=\"color: #0000ff;\">c<\/span><\/strong> \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u043a <strong><span style=\"color: #0000ff;\">moreLogs<\/span><\/strong>. \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c <span style=\"color: #0000ff;\"><strong>c<\/strong><\/span>, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0440\u044f\u0434\u0443 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0441\u0442\u0440\u043e\u043a <strong><span style=\"color: #0000ff;\">logs<\/span><\/strong>. \u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c <strong><span style=\"color: #0000ff;\">logs<\/span><\/strong> \u0438\u043b\u0438 <strong><span style=\"color: #0000ff;\">moreLogs<\/span><\/strong>, \u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044e \u043e\u0431\u043e\u0438\u0445.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0422\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; \u043d\u0430\u0448\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439!<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">compose(computeAndPrint, computeAndPrint)\r\n\/\/ (Int) -&gt; (Int, [String])<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <strong><span style=\"color: #0000ff;\">computeAndPrint<\/span> <\/strong>\u0434\u0432\u0430\u0436\u0434\u044b. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0430\u0434\u0438\u0442\u0435 \u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u043d\u043e \u0438 <strong><span style=\"color: #0000ff;\">logs<\/span><\/strong> \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430 \u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">2 |&gt; compose(computeAndPrint, computeAndPrint)\r\n\/\/ (26, [\"Computed 5\", \"Computed 26\"])<\/code><\/pre>\n<h1>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <span style=\"color: #0000ff;\">&gt;=&gt;<\/span><\/h1>\n<p><span style=\"font-weight: 400;\">\u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043b\u0438 \u0432\u0441\u0435 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435&#8221; \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043d\u043e \u0432\u0441\u0435 \u043e\u043f\u044f\u0442\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0437\u0430\u043f\u0443\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u0435\u043c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221; \u0431\u043e\u043b\u0435\u0435, \u0447\u0435\u043c 2 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">2 |&gt; compose(compose(computeAndPrint, computeAndPrint), computeAndPrint)<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0415\u0449\u0435 \u0445\u0443\u0436\u0435 \u0442\u043e, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0432\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221; \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">2 |&gt; compose(compose(computeAndPrint, computeAndPrint), computeAndPrint)\r\n2 |&gt; compose(computeAndPrint, compose(computeAndPrint, computeAndPrint))<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 &#8211; \u0432\u0441\u0435\u0433\u0434\u0430 &#8220;\u0432\u0440\u0430\u0433\u0438&#8221; &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221;.<br \/>\n\u0410 \u043a\u0442\u043e &#8220;\u0432\u0440\u0430\u0433\u0438&#8221; \u043a\u0440\u0443\u0433\u043b\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u043a?<br \/>\n\u0418\u043d\u0444\u0438\u043a\u0441\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e &#8220;\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e\u0433\u043e&#8221; \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430<strong><span style=\"color: #0000ff;\"> |&gt;<\/span><\/strong> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 <strong><span style=\"color: #0000ff;\">precedencegroup<\/span><\/strong> \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c \u0432\u044b\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 &#8220;\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e\u0433\u043e&#8221; \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430<strong><span style=\"color: #0000ff;\"> |&gt;<\/span><\/strong>.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">precedencegroup EffectfulComposition {\r\n  associativity: left\r\n  higherThan: ForwardApplication\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u043d\u0444\u0438\u043a\u0441\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong><span style=\"color: #0000ff;\">&gt;=&gt;<\/span><\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">infix operator &gt;=&gt;: EffectfulComposition<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u042d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u00a0<strong><span style=\"color: #0000ff;\">&gt;&gt;&gt;<\/span><\/strong>, \u043d\u043e \u043c\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u0435\u043b\u043a\u0443 &#8220;<strong><span style=\"color: #0000ff;\">&gt;<\/span><\/strong>&#8221; \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430 &#8220;<strong><span style=\"color: #0000ff;\">=<\/span><\/strong>&#8220;, \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0449\u0438\u0439 &#8220;\u0442\u0440\u0443\u0431\u0443&#8221;. \u042d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u201c<strong>fish<\/strong>\u201d (\u0440\u044b\u0431\u0430).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong><span style=\"color: #0000ff;\">compose<\/span> <\/strong>\u0438 &#8220;\u0441\u043a\u043b\u0435\u0438\u0442\u044c&#8221; \u043d\u0430\u0448\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u043c\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c\u0438&#8221; \u0432\u043c\u0435\u0441\u0442\u0435 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e &#8220;\u0448\u0443\u043c\u0430&#8221; \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u0443\u043c\u0430\u0442\u044c \u043e \u043a\u0440\u0443\u0433\u043b\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func &gt;=&gt; &lt;A, B, C&gt; (\r\n  _ f: @escaping (A) -&gt; (B, [String]),\r\n  _ g: @escaping (B) -&gt; (C, [String])\r\n  ) -&gt; (A) -&gt; (C, [String]) {\r\n  return { a in\r\n    let (b, logs) = f(a)\r\n    let (c, moreLogs) = g(b)    return (c, logs + moreLogs)\r\n\r\n  }\r\n}\r\n\r\ncomputeAndPrint &gt;=&gt; computeAndPrint &gt;=&gt; computeAndPrint \/\/ (Int) -&gt; (Int, [String])<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440<strong><span style=\"color: #0000ff;\"> |&gt;<\/span><\/strong> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u0443 \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u043e\u043a\u043e\u0432\u0443\u044e &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c &#8220;\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u0443\u044e&#8221; \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0440\u0445\u0443 \u0434\u043e\u043d\u0438\u0437\u0443.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">2\r\n  |&gt; computeAndPrint\r\n  &gt;=&gt; computeAndPrint\r\n  &gt;=&gt; computeAndPrint<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0414\u0440\u0443\u0433\u0430\u044f \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0449\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 \u043d\u0430\u0448\u0443 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; \u0432 \u041c\u0418\u0420 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong><span style=\"color: #0000ff;\">&gt;=&gt;<\/span> <\/strong>\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 <strong><span style=\"color: #0000ff;\">&gt;&gt;&gt;<\/span><\/strong>.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">2\r\n  |&gt; computeAndPrint\r\n  &gt;=&gt; (incr &gt;&gt;&gt; computeAndPrint)\r\n  &gt;=&gt; (square &gt;&gt;&gt; computeAndPrint)<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0437\u044f\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u043c\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c\u0438&#8221; \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0445 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432&#8221;, \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221;. \u0423 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043a\u0440\u0443\u0433\u043b\u044b\u043c\u0438 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438, \u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c! \u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 <strong><span style=\"color: #0000ff;\">Forward\u0421omposition<\/span><\/strong>, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0441\u0438\u043b\u044c\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u043a \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u043a\u0440\u0443\u0433\u043b\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u043a, \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0442\u0438\u043f\u044b. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u043c\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043c \u043a \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e, \u0447\u0442\u043e \u0433\u0440\u0443\u043f\u043f\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 <strong><span style=\"color: #0000ff;\">Forward<\/span><\/strong><strong><span style=\"color: #0000ff;\">\u0421omposition<\/span><\/strong> \u0412\u0421\u0415\u0413\u0414\u0410 \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 <strong><span style=\"color: #0000ff;\">EffectfulComposition<\/span><\/strong>.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">precedencegroup EffectfulComposition {\r\n  associativity: left\r\n  higherThan: ForwardApplication\r\n  lowerThan: ForwardComposition\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0423 \u043d\u0430\u0441 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e &#8220;\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443&#8221; (<strong>pipeline<\/strong>) \u043d\u0430\u0448\u0443 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221;.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">2\r\n  |&gt; computeAndPrint\r\n  &gt;=&gt; incr\r\n  &gt;&gt;&gt; computeAndPrint\r\n  &gt;=&gt; square\r\n  &gt;&gt;&gt; computeAndPrint<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u044d\u0442\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0434\u0430\u0435\u0442 \u0435\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0421\u0442\u0440\u043e\u043a\u0438 \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c <strong><span style=\"color: #0000ff;\">&gt;&gt;&gt;<\/span><\/strong> \u0438\u043c\u0435\u044e\u0442 \u0434\u0435\u043b\u043e \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432&#8221;, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c <strong><span style=\"color: #0000ff;\">&gt;=&gt;<\/span><\/strong> \u0438\u043c\u0435\u044e\u0442 \u0434\u0435\u043b\u043e \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221;.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0418\u0442\u0430\u043a, \u043c\u044b \u0432\u0432\u0435\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong><span style=\"color: #0000ff;\">&gt;=&gt;<\/span><\/strong>, \u0438 \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u0430\u043a\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043d\u0430\u0448 \u043a\u043e\u0434.<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400;\">\u042d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 <strong>Swift<\/strong>? \u041d\u0435\u0442. \u041d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0448\u0430\u043d\u0441\u0430 &#8220;\u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044c&#8221; (<strong>overload<\/strong>) \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">\u0415\u0441\u0442\u044c \u043b\u0438 \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f &#8211; \u041f\u0420\u041e\u0422\u041e\u0422\u0418\u041f\u041e\u0412 \u0438 \u0438\u043c\u0435\u0435\u0442 \u043b\u0438 \u043e\u043d \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443? \u0414\u0430! \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8220;<strong>fish<\/strong>&#8221; \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 <strong>Haskell<\/strong> \u0438 <strong>PureScript<\/strong>, \u0430 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438 \u0432\u0432\u0435\u043b\u0438 \u0435\u0433\u043e \u0432 \u0441\u0432\u043e\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0424\u043e\u0440\u043c\u0430 <strong><span style=\"color: #0000ff;\">&gt;=&gt;<\/span><\/strong> \u044d\u0442\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u00a0<strong><span style=\"color: #0000ff;\">&gt;&gt;&gt;<\/span><\/strong>. \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong><span style=\"color: #0000ff;\">&gt;=&gt;<\/span><\/strong>\u00a0\u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <strong><span style=\"color: #0000ff;\">&gt;&gt;&gt;<\/span><\/strong>, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0435 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">\u042f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0438 \u0438\u043b\u0438 \u043e\u043d \u0441\u043b\u0443\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0446\u0435\u043b\u044f\u043c? \u0421\u043f\u043e\u0441\u043e\u0431, \u043a\u0430\u043a\u0438\u043c \u043c\u044b \u0435\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043a\u043e\u0440\u0442\u0435\u0436\u0430\u0445 (<strong>tuples<\/strong>), \u043d\u043e \u0444\u043e\u0440\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u0430\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430 \u043f\u0430\u0440\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0422\u0418\u041f\u041e\u0412 <strong>Swift<\/strong>:<\/span><\/li>\n<\/ol>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func &gt;=&gt; &lt;A, B, C&gt;(\r\n  _ f: @escaping (A) -&gt; B?,\r\n  _ g: @escaping (B) -&gt; C?\r\n  ) -&gt; ((A) -&gt; C?) {\r\n\r\n  return { a in\r\n    fatalError() \/\/ \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\r\n  }\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043d\u0430\u0448\u0438 \u043a\u043e\u0440\u0442\u0435\u0436\u0438 (<strong>tuples<\/strong>) \u00a0<strong><span style=\"color: #0000ff;\">Optionals<\/span><\/strong>\u00a0\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <strong><span style=\"color: #0000ff;\">Optionals<\/span><\/strong>. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0438\u0437 \u043f\u0430\u0440\u044b &#8220;\u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0445\u0441\u044f&#8221; (<strong>failable<\/strong>) \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u0432\u043c\u0435\u0441\u0442\u0435:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">String.init(utf8String:) &gt;=&gt; URL.init(string:)\r\n\/\/ (UnsafePointer&lt;Int8&gt;) -&gt; URL?<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u044b\u0439 &#8220;\u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f&#8221; \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0443\u0441\u0438\u043b\u0438\u0439!<br \/>\n\u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0445&#8221; \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u00a0<strong><span style=\"color: #0000ff;\">Array<\/span><\/strong>:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func &gt;=&gt; &lt;A, B, C&gt;(\r\n  _ f: @escaping (A) -&gt; [B],\r\n  _ g: @escaping (B) -&gt; [C]\r\n  ) -&gt; ((A) -&gt; [C]) {\r\n\r\n  return { a in\r\n    fatalError() \/\/ \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\r\n  }\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0418 \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0422\u0418\u041f\u042b <strong><span style=\"color: #0000ff;\">Promise<\/span><\/strong> \u0438\u043b\u0438<strong><span style=\"color: #0000ff;\"> Future<\/span><\/strong>, \u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <strong><span style=\"color: #0000ff;\">Promise<\/span><\/strong>:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func &gt;=&gt; &lt;A, B, C&gt;(\r\n  _ f: @escaping (A) -&gt; Promise&lt;B&gt;,\r\n  _ g: @escaping (B) -&gt; Promise&lt;C&gt;\r\n  ) -&gt; ((A) -&gt; Promise&lt;C&gt;) {\r\n\r\n  return { a in\r\n    fatalError() \/\/ an exercise for the viewer\r\n  }\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u0432\u0438\u0434\u0438\u043c \u044d\u0442\u0443 \u0444\u043e\u0440\u043c\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u0441 \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0422\u0418\u041f\u041e\u0412 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e. <strong>Swift<\/strong> \u043f\u043e\u043a\u0430 \u0435\u0449\u0435 \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043d\u043e\u0432\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u043e\u0432\u044b\u0445 \u0422\u0418\u041f\u041e\u0412. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0422\u0418\u041f\u041e\u0412. \u0415\u0441\u043b\u0438 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong><span style=\"color: #0000ff;\">&gt;=&gt;<\/span><\/strong>, \u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u043e\u0434\u0430 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432&#8221;.<\/span><\/p>\n<h1>\u0421\u043a\u0440\u044b\u0442\u044b\u0435 \u0432\u0445\u043e\u0434\u044b.<\/h1>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u0432\u044b\u0445\u043e\u0434\u0443 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438, \u043a\u0430\u043a \u044d\u0442\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u044b\u0445\u043e\u0434 \u044f\u0432\u043d\u044b\u043c \u0432 \u043d\u0430\u0448\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0445 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c&#8221;. \u0415\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0440\u043e\u0434\u0430 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0445\u0438\u0442\u0440\u043e\u0443\u043c\u043d\u044b\u043c.<br \/>\n\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func greetWithEffect(_ name: String) -&gt; String {\r\n  let seconds = Int(Date().timeIntervalSince1970) % 60\r\n  return \"Hello \\(name)! It's \\(seconds) seconds past the minute.\"\r\n}\r\n\r\ngreetWithEffect(\"Blob\")\r\n\/\/ \"Hello Blob! It's 14 seconds past the minute.\"<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0435\u0449\u0435 \u0440\u0430\u0437, \u0442\u043e \u043c\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u0440\u0443\u0433\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0439 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u0441 <strong><span style=\"color: #0000ff;\">compute<\/span> <\/strong>\u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439.<br \/>\n\u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442, \u0442\u043e \u043e\u043d \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">assertEqual(\r\n  \"Hello Blob! It's 32 seconds past the minute.\",\r\n  greetWithEffect(\"Blob\")\r\n)<\/code><\/pre>\n<p>\u274c<br \/>\n<span style=\"font-weight: 400;\">\u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043b\u043e\u0445\u043e\u0439 &#8220;\u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221;. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f <strong><span style=\"color: #0000ff;\">assertions<\/span><\/strong> \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0445\u043e\u0442\u044c \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0432\u044b\u0445\u043e\u0434\u043e\u0432, \u0445\u043e\u0442\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u044b \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u0441\u0435. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u044b\u0445\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041d\u0430\u0448\u0438\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u043c \u044d\u0444\u0435\u043a\u0442\u043e\u043c&#8221; \u0431\u044b\u043b\u0430 \u043f\u0435\u0447\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong><span style=\"color: #0000ff;\">print<\/span><\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0435\u0440\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0445\u043e\u0434 \u0438 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f<strong><span style=\"color: #0000ff;\"> Date<\/span><\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u043d\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 <strong><span style=\"color: #0000ff;\">print<\/span><\/strong> \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u0435 \u0431\u0435\u0440\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0430 \u0432\u0445\u043e\u0434\u0435.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0441\u043c\u043e\u0436\u0435\u043c \u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430&#8221;. \u0420\u0430\u043d\u0435\u0435 \u043c\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0438 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221; <strong><span style=\"color: #0000ff;\">print<\/span> <\/strong>\u0432 \u042f\u0412\u041d\u041e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong><span style=\"color: #0000ff;\">compute<\/span><\/strong>, \u0430 \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221; <strong><span style=\"color: #0000ff;\">Date<\/span><\/strong> \u042f\u0412\u041d\u041e \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func greetWithEffect(_ name: String) -&gt; String {\r\n  let seconds = Int(Date().timeIntervalSince1970) % 60\r\n  return \"Hello \\(name)! It's \\(seconds) seconds past the minute.\"\r\n}\r\n\r\ngreetWithEffect(\"Blob\")\r\n\/\/ \"Hello Blob! It's 14 seconds past the minute.\"<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u044f: \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u0442\u043e\u0439 <strong><span style=\"color: #0000ff;\">date<\/span><\/strong> \u0438 \u043d\u0430\u0448 \u0442\u0435\u0441\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">assertEqual(\r\n  \"Hello Blob! It's 39 seconds past the minute.\",\r\n  greet(at: Date(timeIntervalSince1970: 39), name: \"Blob\")\r\n)<\/code><\/pre>\n<p>\u2705<br \/>\n<span style=\"font-weight: 400;\">\u041c\u044b \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430. \u0422\u043e\u0442, \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u0430\u0442\u0443 <strong><span style=\"color: #0000ff;\">date<\/span> <\/strong>\u042f\u0412\u041d\u041e, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0431\u043b\u0430\u0437\u043d\u0438\u0442\u044c\u0441\u044f \u0438 \u0441\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u0443 \u0434\u0435\u0442\u0430\u043b\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0443 <strong><span style=\"color: #0000ff;\">date<\/span><\/strong> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u0432\u0432\u0435\u0441\u0442\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0430\u0442\u044b <strong><span style=\"color: #0000ff;\">Date()<\/span> <\/strong>\u0432 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u044f\u0432\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 <strong><span style=\"color: #0000ff;\">date<\/span><\/strong>.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func greet(at date: Date = Date(), name: String) -&gt; String {\r\n  let s = Int(date.timeIntervalSince1970) % 60\r\n  return \"Hello \\(name)! It's \\(s) seconds past the minute.\"\r\n}\r\n\r\ngreet(name: \"Blob\")<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e, \u043d\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043c\u044b \u043e\u043f\u044f\u0442\u044c \u0441\u043b\u043e\u043c\u0430\u043b\u0438 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c&#8221;.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041d\u0430\u0448\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f<strong><span style=\"color: #0000ff;\"> greetWithEffect<\/span><\/strong> \u0438\u043c\u0435\u043b\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443 <strong><span style=\"color: #0000ff;\">(String) -&gt; String<\/span><\/strong> \u0438 \u043c\u043e\u0433\u043b\u0430 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f&#8221; \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0441\u0442\u0440\u043e\u043a\u0443\u00a0<strong><span style=\"color: #0000ff;\">String<\/span><\/strong>\u00a0\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u0430 <span style=\"color: #0000ff;\"><strong>String<\/strong><\/span>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong><span style=\"color: #0000ff;\">uppercased<\/span><\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u043c\u0438:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func uppercased(_ string: String) -&gt; String {\r\n  return string.uppercased()\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041e\u043d\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f&#8221; \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <strong><span style=\"color: #0000ff;\">greetWithEffect<\/span> <\/strong>\u043f\u043e \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">uppercased &gt;&gt;&gt; greetWithEffect\r\ngreetWithEffect &gt;&gt;&gt; uppercased<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0447\u0435\u0440\u0435\u0437 &#8220;\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440&#8221;<strong><span style=\"color: #0000ff;\"> |&gt;<\/span><\/strong> \u043f\u043e\u0434\u0430\u0442\u044c \u0438\u043c\u044f <strong><span style=\"color: #0000ff;\">name<\/span><\/strong> \u043d\u0430 \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0439&#8221;.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">\"Blob\" |&gt; uppercased &gt;&gt;&gt; greetWithEffect\r\n\/\/ \"Hello BLOB! It's 56 seconds past the minute.\"\r\n\"Blob\" |&gt; greetWithEffect &gt;&gt;&gt; uppercased\r\n\/\/ \"HELLO BLOB! IT'S 56 SECONDS PAST THE MINUTE.\"<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong><span style=\"color: #0000ff;\">greet<\/span> <\/strong>\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">\"Blob\" |&gt; uppercased &gt;&gt;&gt; greet\r\n\"Blob\" |&gt; greet &gt;&gt;&gt; uppercased\r\n\/\/ Cannot convert value of type '(Date, String) -&gt; String' \r\n\/\/ to expected argument type '(_) -&gt; _'\r\n\r\n\/\/\u00a0\u041d\u0435\u00a0\u043c\u043e\u0433\u0443\u00a0\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0\u0422\u0418\u041f\u0410\u00a0'(Date, String) -&gt; String'\r\n\/\/\u00a0\u0432\u00a0\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439\u00a0\u0422\u0418\u041f\u00a0\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u00a0'(_) -&gt; _'<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041e\u043d\u0430 \u0431\u0435\u0440\u0435\u0442 \u0434\u0432\u0430 \u0432\u0445\u043e\u0434\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; \u0432\u044b\u0445\u043e\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0435\u0435 \u0432\u0445\u043e\u0434\u043e\u043c. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u0432\u0445\u043e\u0434 <strong><span style=\"color: #0000ff;\">Date<\/span><\/strong>, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u0444\u043e\u0440\u043c\u0443<strong><span style=\"color: #0000ff;\"> (String) -&gt; String<\/span><\/strong>. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u044d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u043c\u043e\u0436\u0435\u043c &#8220;\u0432\u044b\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c&#8221; <strong><span style=\"color: #0000ff;\">Date<\/span><\/strong> \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u044d\u0442\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b: \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c <strong><span style=\"color: #0000ff;\">greet<\/span> <\/strong>\u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0431\u0435\u0440\u0435\u0442 <strong><span style=\"color: #0000ff;\">Date<\/span><\/strong> \u043a\u0430\u043a \u0432\u0445\u043e\u0434, \u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong><span style=\"color: #0000ff;\">(String) -&gt; String<\/span><\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f:<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func greet(at date: Date) -&gt; (String) -&gt; String {\r\n  return { name in\r\n    let s = Int(date.timeIntervalSince1970) % 60\r\n    return \"Hello \\(name)! It's \\(s) seconds past the minute.\"\r\n  }\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong><span style=\"color: #0000ff;\">greet<\/span><\/strong> \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0434\u0430\u0442\u043e\u0439 <strong><span style=\"color: #0000ff;\">date<\/span><\/strong> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong><span style=\"color: #0000ff;\">(String) -&gt; String<\/span><\/strong>.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">greet(at: Date()) \/\/ (String) -&gt; String<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221;!<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">uppercased &gt;&gt;&gt; greet(at: Date()) \/\/ (String) -&gt; String\r\ngreet(at: Date()) &gt;&gt;&gt; uppercased \/\/ (String) -&gt; String<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0418 \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e &#8220;\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e\u0433\u043e&#8221; \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <strong><span style=\"color: #0000ff;\">|&gt;<\/span><span style=\"color: #000000;\">!<\/span><\/strong><br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">\"Blob\" |&gt; uppercased &gt;&gt;&gt; greet(at: Date())\r\n\/\/ \"Hello BLOB! It's 37 seconds past the minute.\"\r\n\"Blob\" |&gt; greet(at: Date()) &gt;&gt;&gt; uppercased\r\n\/\/ \"HELLO BLOB! IT'S 37 SECONDS PAST THE MINUTE.\"<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0435\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">assertEqual(\r\n  \"Hello Blob! It's 37 seconds past the minute.\",\r\n  \"Blob\" |&gt; greet(at: Date(timeIntervalSince1970: 37))\r\n)<\/code><\/pre>\n<p>\u2705<\/p>\n<p><span style=\"font-weight: 400;\">\u0418\u0442\u0430\u043a, \u043c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c&#8221;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u043e \u0441\u043c\u043e\u0433\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e, \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0432 \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e \u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0441\u0445\u043e\u0436\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430&#8221;, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0440\u043e\u0448\u043b\u0438 \u0440\u0430\u043d\u0435\u0435. \u041d\u0430\u0448 \u043f\u0435\u0440\u0432\u044b\u0439 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221; \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u043b \u0412\u041d\u0415\u0428\u041d\u0418\u0419 \u041c\u0418\u0420 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b \u0442\u0430\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043c\u0438 \u043a\u0430\u043a \u0421\u041a\u0420\u042b\u0422\u042b\u0419 \u0412\u042b\u0425\u041e\u0414, \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0448 \u0432\u0442\u043e\u0440\u043e\u0439 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221; \u0437\u0430\u0432\u0438\u0441\u0438\u043b \u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0412\u041d\u0415\u0428\u041d\u0415\u0413\u041e \u041c\u0418\u0420\u0410, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430\u043c\u0438 \u043a\u0430\u043a \u0421\u041a\u0420\u042b\u0422\u042b\u0419 \u0412\u0425\u041e\u0414! \u0412\u0441\u0435 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221; \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/span><\/p>\n<h1>\u0418\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c (Mutation)<\/h1>\n<p><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442&#8221; \u0438 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e: &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c&#8221; (<strong>mutation<\/strong>). \u041d\u0430\u043c \u0432\u0441\u0435\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u0441 &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c\u044e&#8221; (<strong>mutation<\/strong>) \u0432 \u043a\u043e\u0434\u0435 \u0438 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, <strong>Swift<\/strong> \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0422\u0418\u041f\u041e\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u044d\u0442\u043e\u0439 &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u0438&#8221; (<strong>mutation<\/strong>) \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438 \u0433\u0434\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c&#8221;\u00a0(<strong>mutation<\/strong>) \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u043f\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f. \u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c, \u043e\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043e\u043f\u0430\u0441\u0435\u043d, \u0441 \u043d\u0438\u043c \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0443\u0434\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0438\u0442\u0435 \u0435\u0433\u043e \u0437\u0430\u043d\u043e\u0432\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c&#8221;\u00a0(<strong>mutation<\/strong>).<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">let formatter = NumberFormatter()\r\n\r\nfunc decimalStyle(_ format: NumberFormatter) {\r\n  format.numberStyle = .decimal\r\n  format.maximumFractionDigits = 2\r\n}\r\n\r\nfunc currencyStyle(_ format: NumberFormatter) {\r\n  format.numberStyle = .currency\r\n  format.roundingMode = .down\r\n}\r\n\r\nfunc wholeStyle(_ format: NumberFormatter) {\r\n  format.maximumFractionDigits = 0\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0423 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f <strong><span style=\"color: #0000ff;\">NumberFormatter<\/span><\/strong> \u0438\u0437 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 <strong><span style=\"color: #0000ff;\">Foundation<\/span><\/strong> \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u044e\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u0438\u043b\u044f\u043c\u0438. \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0441\u0442\u0438\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0445 \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u0443 <strong><span style=\"color: #0000ff;\">formatter<\/span><\/strong>.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">decimalStyle(formatter)\r\nwholeStyle(formatter)\r\nformatter.string(for: 1234.6) \/\/ \"1,235\"\r\n\r\ncurrencyStyle(formatter)\r\nformatter.string(for: 1234.6) \/\/ \"$1,234\"<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0415\u0441\u043b\u0438 \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0435\u0440\u043e\u0432, \u0442\u043e \u0443 \u043d\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430:<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">decimalStyle(formatter)\r\nwholeStyle(formatter)\r\nformatter.string(for: 1234.6) \/\/ \"1,234\"<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0412\u044b\u0445\u043e\u0434 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0441 &#8220;<strong>1,235<\/strong>&#8221; \u043d\u0430 &#8220;<strong>1,234<\/strong>&#8220;. \u0412 \u0447\u0435\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430? &#8220;\u0418\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c&#8221;\u00a0(<strong>mutation<\/strong>). \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <strong><span style=\"color: #0000ff;\">currencyStyle<\/span><\/strong>, \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u0430\u0448\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u043e\u0432, \u043f\u0440\u0438\u0432\u043e\u0434\u044f \u043a \u043e\u0448\u0438\u0431\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0443\u0434\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c&#8221;\u00a0(<strong>mutation<\/strong>) \u0442\u0430\u043a \u0442\u0440\u0443\u0434\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c. \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0438\u0437\u0443\u0447\u0438\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043a\u043e\u0434\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u0443\u044e \u0434\u043e \u044d\u0442\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. &#8220;\u0418\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c&#8221;\u00a0(<strong>mutation<\/strong>) &#8211; \u044d\u0442\u043e \u043f\u0440\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043e\u0438\u0445 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432&#8221;, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u043e \u044d\u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438 \u0421\u041a\u0420\u042b\u0422\u042b\u041c \u0412\u0425\u041e\u0414\u041e\u041c \u0438 \u0421\u041a\u0420\u042b\u0422\u042b\u041c \u0412\u042b\u0425\u041e\u0414\u041e\u041c!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041f\u0440\u0438\u0447\u0438\u043d\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c&#8221;\u00a0(<strong>mutation<\/strong>), \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <strong><span style=\"color: #0000ff;\">NumberFormatter<\/span><\/strong> &#8211; \u044d\u0442\u043e \u201c<strong>Reference<\/strong>\u201d \u0422\u0418\u041f. \u0412 <strong>Swift<\/strong> \u043a\u043b\u0430\u0441\u0441\u044b <strong><span style=\"color: #0000ff;\">classes<\/span><\/strong> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u201c<strong>Reference<\/strong>\u201d \u0422\u0418\u041f\u0430\u043c\u0438. \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u201c<strong>Reference<\/strong>\u201d \u0422\u0418\u041f\u0430 &#8211; \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043a\u043e\u0434\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u043d\u0430 \u043d\u0435\u0433\u043e \u0441\u0441\u044b\u043b\u043a\u0443. \u041d\u0435\u0442 \u043b\u0435\u0433\u043a\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0430\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442, \u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0439, \u0435\u0441\u043b\u0438 \u0438\u043c\u0435\u0435\u0442 \u043c\u0435\u0441\u0442\u043e &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c&#8221; (<strong>mutation<\/strong>). \u0415\u0441\u043b\u0438 \u043d\u0430\u0448 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0431\u044b \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438 \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u0431\u044b\u043b\u0430 \u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043e\u043f\u0438\u0440\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u0442 <strong><span style=\"color: #0000ff;\">formatter<\/span><\/strong>, \u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u0437\u0442\u0438\u0441\u044c \u0438 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043d\u043e\u0432\u043e\u043c\u0443 \u043a\u043e\u0434\u0443.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0423 <strong>Swift<\/strong> \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u201c<strong>Value<\/strong>\u201d \u0422\u0418\u041f\u042b. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043e\u0442\u0432\u0435\u0442 <strong>Swift<\/strong> \u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c\u044e&#8221; (<strong>mutation<\/strong>). \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u201c<strong>Value<\/strong>\u201d \u0422\u0418\u041f\u0443, \u0442\u043e \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u0412\u0441\u0435 &#8220;\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f&#8221; (<strong>mutations<\/strong>) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0435 \u0441\u0441\u044b\u043b\u0430\u044e\u0449\u0435\u0435\u0441\u044f \u043d\u0430 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8220;\u0432\u044b\u0448\u0435 \u043f\u043e \u0442\u0435\u0447\u0435\u043d\u0438\u044e&#8221;, \u0442\u043e \u043e\u043d\u043e \u043d\u0435 &#8220;\u0432\u0438\u0434\u0438\u0442&#8221; \u044d\u0442\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u201c<strong>Value<\/strong>\u201d \u0422\u0418\u041f\u042b.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <strong><span style=\"color: #0000ff;\">struct<\/span><\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f &#8220;\u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439&#8221; \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0434\u043b\u044f <strong><span style=\"color: #0000ff;\">NumberFormatter<\/span><\/strong>.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">struct NumberFormatterConfig {\r\n  var numberStyle: NumberFormatter.Style = .none\r\n  var roundingMode: NumberFormatter.RoundingMode = .up\r\n  var maximumFractionDigits: Int = 0\r\n\r\n  var formatter: NumberFormatter {\r\n    let result = NumberFormatter()\r\n    result.numberStyle = self.numberStyle\r\n    result.roundingMode = self.roundingMode\r\n    result.maximumFractionDigits = self.maximumFractionDigits\r\n    return result\r\n  }\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0423 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0435 <strong>\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/strong> \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <strong><span style=\"color: #0000ff;\">formatter<\/span><\/strong>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 &#8220;\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445&#8221;\u00a0<span style=\"color: #0000ff;\"><strong>NumberFormatters<\/strong><\/span>. \u041d\u0430 \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0445\u043e\u0436\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0448\u0438\u0445 &#8220;\u0441\u0442\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0445&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0435\u0441\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0430 <span style=\"color: #0000ff;\"><strong>NumberFormatter <\/strong><\/span>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <strong><span style=\"color: #0000ff;\">NumberFormatterConfig<\/span><\/strong> ?<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func decimalStyle(_ format: NumberFormatterConfig) -&gt; NumberFormatterConfig {\r\n  var format = format\r\n  format.numberStyle = .decimal\r\n  format.maximumFractionDigits = 2\r\n  return format\r\n}\r\n\r\nfunc currencyStyle(_ format: NumberFormatterConfig) -&gt; NumberFormatterConfig {\r\n  var format = format\r\n  format.numberStyle = .currency\r\n  format.roundingMode = .down\r\n  return format\r\n}\r\n\r\nfunc wholeStyle(_ format: NumberFormatterConfig) -&gt; NumberFormatterConfig {\r\n  var format = format\r\n  format.maximumFractionDigits = 0\r\n  return format\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041a\u0430\u0436\u0434\u0430\u044f &#8220;\u0441\u0442\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0430\u044f&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0435\u0440\u0435\u0442<strong><span style=\"color: #0000ff;\"> NumberFormatterConfig<\/span><\/strong>, \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <strong><span style=\"color: #0000ff;\">var<\/span><\/strong> \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u043f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0435 \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u0443.<\/span><br \/>\n<span style=\"font-weight: 400;\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 &#8220;\u0441\u0442\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0445&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">let config = NumberFormatterConfig()\r\n\r\nwholeStyle(decimalStyle(config))\r\n  .formatter\r\n  .string(for: 1234.6)\r\n\/\/ \"1,235\"\r\n\r\ncurrencyStyle(config)\r\n  .formatter\r\n  .string(for: 1234.6)\r\n\/\/ \"$1,234\"\r\n\r\nwholeStyle(decimalStyle(config))\r\n  .formatter\r\n  .string(for: 1234.6)\r\n\/\/ \"1,235\"<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c <strong><span style=\"color: #0000ff;\">config<\/span><\/strong> \u0432 &#8220;\u0441\u0442\u0438\u043b\u0438\u0437\u0443\u044e\u0449\u0443\u044e&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0435\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u0443\u044e \u043a\u043e\u043f\u0438\u044e, \u0438 \u043d\u0430\u0448\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0443\u0445\u043e\u0434\u0438\u0442!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0438 \u0441 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u043c\u0438 (&#8220;<strong>Reference<\/strong>&#8220;) \u0422\u0418\u041f\u0410\u041c\u0418, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434 <strong><span style=\"color: #0000ff;\">copy<\/span><\/strong> \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b <strong><span style=\"color: #0000ff;\">NSCopying<\/span> <\/strong>\u0438 \u042f\u0412\u041d\u041e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u044d\u0442\u0443 \u043a\u043e\u043f\u0438\u044e:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func decimalStyle(_ format: NumberFormatter) -&gt; NumberFormatter {\r\n  let format = format.copy() as! NumberFormatter\r\n  format.numberStyle = .decimal\r\n  format.maximumFractionDigits = 2\r\n  return format\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e,\u0432 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 <span style=\"color: #0000ff;\"><strong>format<\/strong><\/span>. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f (<strong>caller<\/strong>) \u043e\u0436\u0438\u0434\u0430\u044f \u043a\u043e\u043f\u0438\u044e, \u043c\u043e\u0436\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0447\u043d\u0435\u0442 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u0441\u044e\u0434\u0430!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e &#8220;<strong>Reference<\/strong>&#8221; \u0422\u0418\u041f\u042b \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043e\u043d\u0438 \u0438\u043c\u0435\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, <strong>Swift<\/strong> \u0441\u043d\u0430\u0431\u0436\u0430\u0435\u0442 \u043d\u0430\u0441 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u043c \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 &#8220;\u043f\u043e \u043c\u0435\u0441\u0442\u0443&#8221; \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u00a0<strong><span style=\"color: #0000ff;\">inout<\/span><\/strong> .<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0448\u0438 &#8220;\u0441\u0442\u0438\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <strong><span style=\"color: #0000ff;\">inout<\/span><\/strong>.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func inoutDecimalStyle(_ format: inout NumberFormatterConfig) {\r\n  format.numberStyle = .decimal\r\n  format.maximumFractionDigits = 2\r\n}\r\n\r\nfunc inoutCurrencyStyle(_ format: inout NumberFormatterConfig) {\r\n  format.numberStyle = .currency\r\n  format.roundingMode = .down\r\n}\r\n\r\nfunc inoutWholeStyle(_ format: inout NumberFormatterConfig) {\r\n  format.maximumFractionDigits = 0\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043d\u0430\u0448\u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 <strong><span style=\"color: #0000ff;\">NumberFormatter<\/span><\/strong>. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u043b\u0438 \u043e\u0431 \u0438\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 &#8220;\u0441\u0442\u0438\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0435\u043c \u0436\u0435 \u0441\u0430\u043c\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043a\u0430\u043a\u0438\u043c \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0430\u0448\u0438 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">let config = NumberFormatterConfig()\r\n\r\ninoutDecimalStyle(config)\r\ninoutWholeStyle(config)\r\nconfig.formatter.string(from: 1234.6)<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438!<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">Cannot pass immutable value as inout argument: 'config' is a 'let' constant\r\n (\u041d\u0435\u00a0\u043c\u043e\u0433\u0443\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c\u00a0\u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0435\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0\u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u00a0inout\u00a0\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430:\u00a0'config'\u00a0-\u00a0\u044d\u0442\u043e\u00a0'let'\u00a0\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430)<\/code><\/pre>\n<p><span style=\"font-weight: 400;\"><strong>Swift<\/strong> \u0434\u0430\u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443, \u0437\u0430\u043c\u0435\u043d\u044f\u044f <strong><span style=\"color: #0000ff;\">let<\/span><\/strong> \u043d\u0430<strong><span style=\"color: #0000ff;\"> var<\/span><\/strong>. \u041d\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0418 \u043c\u044b \u043e\u043f\u044f\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043d\u043e \u0434\u0440\u0443\u0433\u0443\u044e!<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">Passing value of type 'NumberFormatterConfig' to an inout parameter requires explicit '&amp;'\r\n(\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u00a0\u0422\u0418\u041f\u0410\u00a0'NumberFormatterConfig' inout\u00a0\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443\u00a0\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u00a0\u042f\u0412\u041d\u041e\u0413\u041e\u00a0'&amp;')<\/code><\/pre>\n<p><span style=\"font-weight: 400;\"><strong>Swift<\/strong> \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u043d\u0430\u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438\u00a0<strong><span style=\"color: #0000ff;\">inout<\/span><\/strong>\u00a0\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 &#8216;<strong><span style=\"color: #0000ff;\">&amp;<\/span><\/strong>&#8216; \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435, \u0447\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u044b \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">inoutDecimalStyle(&amp;config)\r\ninoutWholeStyle(&amp;config)\r\nconfig.formatter.string(from: 1234.6) \/\/ \"1,235\"<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0435 &#8220;\u0441\u0442\u0438\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0435\u043c \u0436\u0435 \u0441\u0430\u043c\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">inoutCurrencyStyle(&amp;config)\r\nconfig.formatter.string(from: 1234.6) \/\/ \"$1,234\"\r\n\r\ninoutDecimalStyle(&amp;config)\r\ninoutWholeStyle(&amp;config)\r\nconfig.formatter.string(from: 1234.6) \/\/ \"1,234\"<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0418 \u043d\u0430\u0448\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043e\u043f\u044f\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043d\u0430\u0448 \u043a\u043e\u0434 \u043f\u0440\u043e\u0441\u0442\u043e &#8220;\u043a\u0440\u0438\u0447\u0438\u0442&#8221;: &#8220;\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 (<strong>mutation<\/strong>)\u201d, \u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043e\u0448\u0438\u0431\u043a\u0443 \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u0447\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u0447\u0442\u043e <strong>Swift<\/strong> \u0441\u043d\u0430\u0431\u0436\u0430\u0435\u0442 \u043d\u0430\u0441 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u0438&#8221; (<strong>mutation<\/strong>) \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0422\u0418\u041f\u041e\u0412, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u043a\u0430\u043a \u0434\u0430\u043b\u0435\u043a\u043e \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c&#8221; (<strong>mutation<\/strong>). \u041d\u043e \u0443 \u043d\u0430\u0441 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0448\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u043c \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">&#8220;\u0421\u0442\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0435&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043f\u0438\u0438, \u0438\u043c\u0435\u044e\u0442 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">(NumberFormatterConfig) -&gt; NumberFormatterConfig<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0423 \u043d\u0438\u0445 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u0445\u043e\u0434 \u0438 \u0432\u044b\u0445\u043e\u0434, \u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221; \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0438 \u0441 \u043b\u044e\u0431\u044b\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0438\u043b\u0438 \u0431\u0435\u0440\u0443\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u0430 <strong><span style=\"color: #0000ff;\">NumberFormatterConfig<\/span><\/strong>!<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">decimalStyle &gt;&gt;&gt; currencyStyle\r\n\/\/ (NumberFormatterConfig) -&gt; NumberFormatterConfig<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u0430\u044f &#8220;\u0441\u0442\u0438\u043b\u0438\u0437\u0443\u044e\u0449\u0430\u044f&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041c\u0435\u0436\u0434\u0443 \u0442\u0435\u043c, \u043d\u0430\u0448\u0438 <strong><span style=\"color: #0000ff;\">inout<\/span> <\/strong>\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u044d\u0442\u0443 \u0444\u043e\u0440\u043c\u0443: \u0438\u0445 \u0432\u0445\u043e\u0434\u044b \u0438 \u0432\u044b\u0445\u043e\u0434\u044b \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443 \u0438 \u043e\u043d\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221; \u0441\u043e \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043c\u0435\u044e\u0442 \u0442\u0443 \u0436\u0435 \u0441\u0430\u043c\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0441\u0442 \u043c\u0435\u0436\u0434\u0443 \u041c\u0418\u0420\u041e\u041c <strong><span style=\"color: #0000ff;\">inout<\/span><\/strong> \u0438 \u041c\u0418\u0420\u041e\u041c \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <strong><span style=\"color: #0000ff;\">toInout<\/span><\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 \u0422\u0418\u041f\u041e\u041c \u0432\u0445\u043e\u0434\u0430 \u0438 \u0432\u044b\u0445\u043e\u0434\u0430 \u0432<strong><span style=\"color: #0000ff;\"> inout<\/span> <\/strong>\u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func toInout&lt;A&gt;(\r\n  _ f: @escaping (A) -&gt; A\r\n  ) -&gt; ((inout A) -&gt; Void) {\r\n\r\n  return { a in\r\n    a = f(a)\r\n  }\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, <strong><span style=\"color: #0000ff;\">fromInout<\/span><\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func fromInout&lt;A&gt;(\r\n  _ f: @escaping (inout A) -&gt; Void\r\n  ) -&gt; ((A) -&gt; A) {\r\n\r\n  return { a in\r\n    var copy = a\r\n    f(&amp;copy)\r\n    return copy\r\n  }\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\"> \u0422\u043e, \u0447\u0442\u043e \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u0438\u043c, &#8211; \u044d\u0442\u043e \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443<strong><span style=\"color: #0000ff;\"> (A) -&gt; A<\/span><\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0438<strong><span style=\"color: #0000ff;\"> (inout A) -&gt; Void<\/span><\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u041c\u0418\u0420\u0410 <strong><span style=\"color: #0000ff;\">(A) -&gt; A<\/span> <\/strong>&#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f&#8221; \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u0442\u0430\u043a \u0447\u0442\u043e, \u0438\u043c\u0435\u044f \u044d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u041c\u0418\u0420\u0410 <strong><span style=\"color: #0000ff;\">(inout A) -&gt; Void<\/span><\/strong> \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0442\u0430\u043a\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0438\u0445 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435&#8221; \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438.<\/span><\/p>\n<h1>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 &lt;&gt; (&#8220;\u0431\u0440\u0438\u043b\u043b\u0438\u0430\u043d\u0442\u043e\u0432\u044b\u0439&#8221; \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440).<\/h1>\n<p><span style=\"font-weight: 400;\">\u0425\u043e\u0442\u044f \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e<strong><span style=\"color: #0000ff;\"> (A) -&gt; A<\/span><\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f&#8221; \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u00a0<strong><span style=\"color: #0000ff;\">&gt;&gt;&gt;<\/span><\/strong>, \u043d\u0430\u043c \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u044b. \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0443\u044e &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; \u0422\u0418\u041f\u0410 \u0441\u0430\u043c\u043e\u0433\u043e \u0441 \u0441\u043e\u0431\u043e\u0439. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0438 \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 <strong><span style=\"color: #0000ff;\">precedencegroup SingleTypeComposion<\/span><\/strong>.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">precedencegroup SingleTypeComposition {\r\n  associativity: left\r\n  higherThan: ForwardApplication\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043d\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong><span style=\"color: #0000ff;\">&lt;&gt;<\/span><\/strong>.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">infix operator &lt;&gt;: SingleTypeComposition<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0417\u0430\u0431\u0430\u0432\u043d\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <strong><span style=\"color: #0000ff;\">&lt;&gt;<\/span><\/strong> &#8211; \u201c<strong>diamond<\/strong>\u201d (&#8220;\u0431\u0440\u0438\u043b\u043b\u0438\u0430\u043d\u0442\u043e\u0432\u044b\u0439&#8221;) \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong><span style=\"color: #0000ff;\">&lt;&gt;\u00a0<\/span><\/strong>\u0434\u043b\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b\u00a0<strong><span style=\"color: #0000ff;\">(A) -&gt; A<\/span><\/strong> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func &lt;&gt; &lt;A&gt;(\r\n  f: @escaping (A) -&gt; A,\r\n  g: @escaping (A) -&gt; A)\r\n  -&gt; ((A) -&gt; A) {\r\n\r\n  return f &gt;&gt;&gt; g\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0433\u043b\u0443\u043f\u044b\u043c: \u043f\u0440\u043e\u0441\u0442\u043e\u0435 &#8220;\u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435&#8221; \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c, \u043d\u043e \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u0438 \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 \u0422\u0418\u041f\u041e\u041c \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0438 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435: \u0442\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong><span style=\"color: #0000ff;\">&lt;&gt;,<\/span><\/strong>\u00a0\u0442\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u0442\u0435 \u0434\u0435\u043b\u043e \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0422\u0418\u041f\u041e\u041c!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong><span style=\"color: #0000ff;\">&lt;&gt;<\/span><\/strong> \u0434\u043b\u044f <strong><span style=\"color: #0000ff;\">inout<\/span><\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u0439:<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func &lt;&gt; &lt;A&gt;(\r\n  f: @escaping (inout A) -&gt; Void,\r\n  g: @escaping (inout A) -&gt; Void)\r\n  -&gt; ((inout A) -&gt; Void) {\r\n\r\n  return { a in\r\n    f(&amp;a)\r\n    g(&amp;a)\r\n  }\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041d\u0430\u0448\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f&#8221; \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">decimalStyle &lt;&gt; currencyStyle<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; \u043d\u0430\u0448\u0438\u0445 <strong><span style=\"color: #0000ff;\">inout<\/span><\/strong>\u00a0&#8220;\u0441\u0442\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0445&#8221; \u0444\u0443\u043d\u043a\u0446\u0438\u0439!<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">inoutDecimalStyle &lt;&gt; inoutCurrencyStyle<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e &#8220;\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430&#8221; <strong><span style=\"color: #0000ff;\">|&gt;<\/span><\/strong> \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u044d\u0442\u0438 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438&#8221;?<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">config |&gt; decimalStyle &lt;&gt; currencyStyle\r\nconfig |&gt; inoutDecimalStyle &lt;&gt; inoutCurrencyStyle<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041d\u0430\u0448\u0430 <strong><span style=\"color: #0000ff;\">inout<\/span> <\/strong>\u0432\u0435\u0440\u0441\u0438\u044f \u0432\u044b\u0434\u0430\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0443.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-markup\">Cannot convert value of type '(inout Int) -&gt; ()' to expected argument type '(_) -&gt; _'<\/code> (\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0422\u0418\u041f\u0410 <code class=\"language-markup\">'(inout Int) -&gt; ()' \u0432\u00a0\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439\u00a0\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u00a0\u0422\u0418\u041f\u0410\u00a0'(_) -&gt; _'\u00a0)<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440<strong><span style=\"color: #0000ff;\"> |&gt;<\/span><\/strong> \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u041c\u0418\u0420\u0415 <strong><span style=\"color: #0000ff;\">inout<\/span><\/strong>, \u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0435\u0433\u043e &#8220;\u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0443&#8221; (<strong>overload<\/strong>), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c.<br \/>\n<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">func |&gt; &lt;A&gt;(a: inout A, f: (inout A) -&gt; Void) -&gt; Void {\r\n  f(&amp;a)\r\n}<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e &#8220;\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430&#8221; <strong><span style=\"color: #0000ff;\">|&gt;<\/span> <\/strong>\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u044c \u044d\u0442\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0439&#8221;.<\/span><\/p>\n<pre class=\"line-numbers\"><code class=\"language-swift\">config |&gt; inoutDecimalStyle &lt;&gt; inoutCurrencyStyle<\/code><\/pre>\n<p><span style=\"font-weight: 400;\">\u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e! \u041d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c\u044e&#8221; \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 <strong>Swift<\/strong>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0446\u0435\u043d\u043e\u0439 \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <strong><span style=\"color: #0000ff;\">&lt;&gt;<\/span><\/strong>, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u043b\u0438 \u043e\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c.<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400;\">\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 <strong>Swift<\/strong>? \u041d\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 &#8211; \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430\u0445? \u0414\u0430. \u041e\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u044f\u0437\u044b\u043a\u0430\u0445 <strong>Haskell<\/strong>, <strong>PureScript<\/strong> \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u0441 \u0441\u0438\u043b\u044c\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0435\u0433\u043e \u043f\u0440\u0438\u043d\u044f\u043b\u0430. \u0423 \u043d\u0435\u0433\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u0435.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">\u042f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u043b\u0438 \u0441\u043b\u0443\u0436\u0438\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u0441\u0442\u043d\u044b\u043c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c? \u0414\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439 <strong><span style=\"color: #0000ff;\">(A) -&gt; A<\/span> <\/strong>\u0438 <strong><span style=\"color: #0000ff;\">(inout A) -&gt; Void<\/span><\/strong>, \u043d\u043e, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong><span style=\"color: #0000ff;\">&lt;&gt;<\/span><\/strong> \u0432 \u0441\u0430\u043c\u043e\u043c \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0434\u0432\u0443\u0445 \u0432\u0435\u0449\u0435\u0439 \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0422\u0418\u041f\u0410 \u0432 \u043e\u0434\u043d\u0443, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432\u043e\u043e\u0431\u0449\u0435 . \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0432\u0441\u044e\u0434\u0443.<\/span><\/li>\n<\/ol>\n<h1>\u0412 \u0447\u0435\u043c \u0441\u043c\u044b\u0441\u043b?<\/h1>\n<p><span style=\"font-weight: 400;\">\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0435\u0431\u044f: \u201c\u0412 \u0447\u0435\u043c \u0441\u043c\u044b\u0441\u043b?\u201d \u041c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u044e\u0442 \u043d\u0430\u0448 \u043a\u043e\u0434 \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0435\u0433\u043e \u0442\u0440\u0443\u0434\u043d\u044b\u043c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u042f\u0412\u041d\u041e\u041c\u0423 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432&#8221; \u0432 \u0422\u0418\u041f\u0410\u0425, \u043a\u0430\u043a \u0432\u0445\u043e\u0434\u043d\u044b\u0445, \u0442\u0430\u043a \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0441\u043b\u043e\u043c\u0430\u043b\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c&#8221; \u044d\u0442\u0438\u0445 \u0422\u0418\u041f\u041e\u0412. \u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0432\u0432\u0435\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c&#8221;, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e&#8221; &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432&#8221;. \u0421\u0442\u043e\u0438\u043b\u043e \u043b\u0438 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c?<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u0434\u0430! \u041c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 &#8220;\u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u044c&#8221; \u043d\u0430\u0448 \u043a\u043e\u0434 \u0441 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u043c\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c\u0438&#8221;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043d\u0435\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0438 \u0442\u0440\u0443\u0434\u043d\u044b\u043c \u0434\u043b\u044f \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438, \u0434\u043e \u041c\u0418\u0420\u0410, \u0433\u0434\u0435 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221; \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u042f\u0412\u041d\u041e \u0438 \u0433\u0434\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0440\u043e\u043a. \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u0441\u0435 \u044d\u0442\u043e, \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c &#8220;\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c&#8221; \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0418 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0449\u043d\u043e!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u041c\u0435\u0436\u0434\u0443 \u0442\u0435\u043c, \u043d\u0430\u0448\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0431\u043b\u0430\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u043c \u043d\u0435\u0438\u043c\u043e\u0432\u0435\u0440\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0431\u044b \u0437\u0430\u0442\u0440\u0430\u0442\u0438\u043b\u0438 \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u043a\u043e\u0434\u0430 \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043f\u0430\u0443\u0442\u0438\u043d\u043e\u0439 &#8220;\u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u0438&#8221; (<strong>mutation<\/strong>), \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u0445&#8221;, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u044e\u0434\u0443, \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u0438\u0432\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u0440\u0443\u0447\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c.<\/span><br \/>\n<span style=\"font-weight: 400;\">&#8220;\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221; &#8211; \u044d\u0442\u043e \u0433\u0440\u043e\u043c\u0430\u0434\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u0438 \u043c\u044b \u043b\u0438\u0448\u044c \u0441\u043b\u0435\u0433\u043a\u0430 \u0435\u0435 \u043a\u043e\u0441\u043d\u0443\u043b\u0438\u0441\u044c.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u042d\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438-\u044d\u043f\u0438\u0437\u043e\u0434\u0430\u00a0&#8220;Side Effects&#8221;, \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435\u00a0pointfree.co. \u041a\u043e\u0434 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0437\u0434\u0435\u0441\u044c. &#8220;\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221; &#8211; \u044d\u0442\u043e \u0442\u043e, \u0431\u0435\u0437 \u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0436\u0438\u0442\u044c; \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u043e\u0434\u0430 &#8220;\u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b&#8221;, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c. &hellip; <a href=\"https:\/\/www.bestkora.com\/SwiftLearning\/pobochnye-effekty-side-effects\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4,13,7],"tags":[],"class_list":["post-737","post","type-post","status-publish","format-standard","hentry","category-swift","category-funktsii","category-funktsionalnoe-programmirovanie"],"aioseo_notices":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.bestkora.com\/SwiftLearning\/wp-json\/wp\/v2\/posts\/737","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bestkora.com\/SwiftLearning\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bestkora.com\/SwiftLearning\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bestkora.com\/SwiftLearning\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bestkora.com\/SwiftLearning\/wp-json\/wp\/v2\/comments?post=737"}],"version-history":[{"count":76,"href":"https:\/\/www.bestkora.com\/SwiftLearning\/wp-json\/wp\/v2\/posts\/737\/revisions"}],"predecessor-version":[{"id":1003,"href":"https:\/\/www.bestkora.com\/SwiftLearning\/wp-json\/wp\/v2\/posts\/737\/revisions\/1003"}],"wp:attachment":[{"href":"https:\/\/www.bestkora.com\/SwiftLearning\/wp-json\/wp\/v2\/media?parent=737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bestkora.com\/SwiftLearning\/wp-json\/wp\/v2\/categories?post=737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bestkora.com\/SwiftLearning\/wp-json\/wp\/v2\/tags?post=737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<!-- WP Super Cache is installed but broken. The constant WPCACHEHOME must be set in the file wp-config.php and point at the WP Super Cache plugin directory. -->