ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт Π² арсСналС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹. Π­Ρ‚Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° особСнно ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с коллСкциями Π΄Π°Π½Π½Ρ‹Ρ…, асинхронными опСрациями ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ динамичСски. Однако ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты 1Π‘ ΠΈΠ·Π±Π΅Π³Π°ΡŽΡ‚ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΈΠ·-Π·Π° нСдостаточного понимания ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΠ»ΠΈ страха ΠΏΠ΅Ρ€Π΅Π΄ ошибками.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ синтаксис ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ ΠΈ рассмотрим практичСскиС сцСнарии примСнСния: ΠΎΡ‚ простых ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² с Массивами ΠΈ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°ΠΌΠΈ Π΄ΠΎ слоТных случаСв с замыканиями ΠΈ рСкурсиСй. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ошибкам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΈ способам ΠΈΡ… диагностики.

1. ΠžΡΠ½ΠΎΠ²Ρ‹ синтаксиса: ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅

Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ благодаря ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠ² β€” ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранят ссылку Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция Π’ΠΈΠΏ("Ѐункция") ΠΈΠ»ΠΈ Π’ΠΈΠΏ("ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°") ΠΏΡ€ΠΈ объявлСнии ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ(ДСйствиС, ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€1, ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€2)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = ДСйствиС(ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€1, ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€2);

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚);

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

// ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ(Π’ΠΈΠΏ("Π‘Π»ΠΎΠΆΠΈΡ‚ΡŒ"), 5, 3);

Ѐункция Π‘Π»ΠΎΠΆΠΈΡ‚ΡŒ(А, Π‘)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ А + Π‘;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹:

  • πŸ”Ή ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€-функция Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ объявлСн с Ρ‚ΠΈΠΏΠΎΠΌ Π’ΠΈΠΏ("Ѐункция") ΠΈΠ»ΠΈ Π’ΠΈΠΏ("ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°")
  • πŸ”Ή ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ пСрСдаётся Π½Π΅ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π΅Ρ‘ Π΄Π΅Π»Π΅Π³Π°Ρ‚ (фактичСски β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ)
  • πŸ”Ή Ѐункция Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² области видимости Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π°
πŸ’‘

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для создания "ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ…" ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π±Π΅Π· измСнСния основного ΠΊΠΎΠ΄Π°.

2. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования

Рассмотрим Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ сцСнарии, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π° ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄.

2.1. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ случай β€” ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎ всСм элСмСнтам массива:

Ѐункция ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒΠšΠΎΠ’ΡΠ΅ΠΌ(Массив, ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Новый Массив();

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Массив Π¦ΠΈΠΊΠ»

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚));

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

// Π£Π΄Π²Π°ΠΈΠ²Π°Π΅ΠΌ всС числа Π² массивС

Числа = Новый Массив();

Числа.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(1); Числа.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(2); Числа.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(3);

Π£Π΄Π²ΠΎΠ΅Π½Π½Ρ‹Π΅ = ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒΠšΠΎΠ’ΡΠ΅ΠΌ(Числа, Π’ΠΈΠΏ("Π£Π΄Π²ΠΎΠΈΡ‚ΡŒ"));

Ѐункция Π£Π΄Π²ΠΎΠΈΡ‚ΡŒ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ * 2;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

2.2. ДинамичСская Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π° для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ:

Ѐункция Π€ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ(Π”Π°Π½Π½Ρ‹Π΅, УсловиС)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Новый Массив();

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Π”Π°Π½Π½Ρ‹Π΅ Π¦ΠΈΠΊΠ»

Если УсловиС(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

// Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌ Ρ‡Ρ‘Ρ‚Π½Ρ‹Π΅ числа

Π§Ρ‘Ρ‚Π½Ρ‹Π΅ = Π€ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ(Числа, Π’ΠΈΠΏ("ЯвляСтсяЧётным"));

Ѐункция ЯвляСтсяЧётным(Число)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Число % 2 = 0;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

πŸ“Š Как часто Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² 1Π‘?
ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎ
Иногда
Π Π΅Π΄Π΅Π΅ Ρ‡Π΅ΠΌ Ρ€Π°Π· Π² мСсяц
Никогда Π½Π΅ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»

2.3. АсинхронныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с колбэками

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ΠΈΠ»ΠΈ внСшними API:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎ(ДСйствиС, Колбэк)

// Π˜ΠΌΠΈΡ‚Π°Ρ†ΠΈΡ асинхронной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Начало выполнСния...");

ДСйствиС();

Колбэк(Π˜ΡΡ‚ΠΈΠ½Π°); // ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² колбэк

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎ(

Π’ΠΈΠΏ("Π”ΠΎΠ»Π³Π°ΡΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ"),

Π’ΠΈΠΏ("ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΠ Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚")

);

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π”ΠΎΠ»Π³Π°ΡΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ()

ΠŸΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ(3); // Π˜ΠΌΠΈΡ‚Π°Ρ†ΠΈΡ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΠ Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚(УспСх)

Если УспСх Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ!");

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка!");

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

3. Замыкания ΠΈ контСкст выполнСния

Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ β€” это функция, которая сохраняСт ссылку Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· внСшнСй области видимости. Π’ 1Π‘ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ часто становится источником ошибок.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

ΠŸΠ΅Ρ€Π΅ΠΌ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ;

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒΠ€ΡƒΠ½ΠΊΡ†ΠΈΡŽ()

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ = 10;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π’ΠΈΠΏ("Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ");

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Ѐункция Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ()

// ΠžΠ¨Π˜Π‘ΠšΠ: Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Π½Π΅ Π²ΠΈΠ΄Π½Π°!

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ + 1;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ѐункция = Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒΠ€ΡƒΠ½ΠΊΡ†ΠΈΡŽ();

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Ѐункция(); // Π’Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ!

РСшСниС β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

Ѐункция Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒΠ€ΡƒΠ½ΠΊΡ†ΠΈΡŽΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ()

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ = 10;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π’ΠΈΠΏ("Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ", Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ);

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ѐункция Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ + 1;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ доступ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ?

Π’ 1Π‘ замыкания Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π² классичСских языках программирования. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹/Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя Π΅Ρ‘ выполнСния ΠΈ нСдоступны послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ.

4. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС случаи.

Ошибка ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° РСшСниС
НСопрСдСлённоС имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ΡΡ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ строка, Π° Π½Π΅ Π΄Π΅Π»Π΅Π³Π°Ρ‚ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π’ΠΈΠΏ("Π˜ΠΌΡΠ€ΡƒΠ½ΠΊΡ†ΠΈΠΈ")
НСсоотвСтствиС количСства ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Π²Ρ‹Π·ΠΎΠ²Π΅ Π½Π΅ совпадаСт с объявлСниСм ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сигнатуры Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°
ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ НСопрСдСлёно) Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π’ΠΈΠΏΠ—Π½Ρ‡(ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€) = Π’ΠΈΠΏ("Ѐункция")
Доступ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ свойству ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° доступа ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠ· замыкания ΠŸΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

ОсобСнно ΠΊΠΎΠ²Π°Ρ€Π½Π° ошибка с нСсоотвСтствиСм Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. НапримСр:

Ѐункция ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΠ”Π°Π½Π½Ρ‹Π΅(Π”Π°Π½Π½Ρ‹Π΅, ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ(Π”Π°Π½Π½Ρ‹Π΅); // ОТидаСм число

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ѐункция ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ(Π”Π°Π½Π½Ρ‹Π΅)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ?(Π”Π°Π½Π½Ρ‹Π΅ > 0, "ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅", "ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅"); // Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ строку!

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

// Π’Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ числовых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΠ”Π°Π½Π½Ρ‹Π΅(5, Π’ΠΈΠΏ("ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ"));

πŸ’‘

ВсСгда Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

5. ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ

Для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² рассмотрим ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

5.1. Π¦Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

Ѐункция ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒΠ¦Π΅ΠΏΠΎΡ‡ΠΊΡƒ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ)

Для КаТдого ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Из ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π¦ΠΈΠΊΠ»

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ = Новый Массив();

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’ΠΈΠΏ("Π£Π΄Π²ΠΎΠΈΡ‚ΡŒ"));

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’ΠΈΠΏ("ΠŸΡ€ΠΈΠ±Π°Π²ΠΈΡ‚ΡŒΠ•Π΄ΠΈΠ½ΠΈΡ†Ρƒ"));

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒΠ¦Π΅ΠΏΠΎΡ‡ΠΊΡƒ(3, ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ); // (3*2)+1 = 7

5.2. ΠšΠ°Ρ€Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π’Π΅Ρ…Π½ΠΈΠΊΠ° прСобразования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

Ѐункция ΠšΠ°Ρ€Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(Ѐункция, АргумСнт1)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π’ΠΈΠΏ("ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒΠšΠ°Ρ€Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ", Ѐункция, АргумСнт1);

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ѐункция ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒΠšΠ°Ρ€Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ(Ѐункция, АргумСнт1, АргумСнт2)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Ѐункция(АргумСнт1, АргумСнт2);

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

// Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ функция

Ѐункция Π‘ΡƒΠΌΠΌΠ°(А, Π‘)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ А + Π‘;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

// ΠšΠ°Ρ€Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚

Π‘ΡƒΠΌΠΌΠ°Π‘ΠŸΡΡ‚Ρ‘Ρ€ΠΊΠΎΠΉ = ΠšΠ°Ρ€Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(Π’ΠΈΠΏ("Π‘ΡƒΠΌΠΌΠ°"), 5);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π‘ΡƒΠΌΠΌΠ°Π‘ΠŸΡΡ‚Ρ‘Ρ€ΠΊΠΎΠΉ(3); // 5 + 3 = 8

5.3. ΠœΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ

ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Ѐункция Π—Π°ΠΌΠ΅ΠΌΠΎΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(Ѐункция)

Кэш = Новый БоотвСтствиС();

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π’ΠΈΠΏ("ΠœΠ΅ΠΌΠΎΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°ΡΠ€ΡƒΠ½ΠΊΡ†ΠΈΡ", Ѐункция, Кэш);

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ѐункция ΠœΠ΅ΠΌΠΎΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°ΡΠ€ΡƒΠ½ΠΊΡ†ΠΈΡ(Ѐункция, Кэш, АргумСнт)

Если Кэш.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚(АргумСнт) Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Кэш[АргумСнт];

Π˜Π½Π°Ρ‡Π΅

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Ѐункция(АргумСнт);

Кэш.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(АргумСнт, Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚);

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования

Ѐункция Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»(Н)

Если Н <= 1 Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ 1;

Π˜Π½Π°Ρ‡Π΅

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Н * Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»(Н - 1);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

БыстрыйЀакториал = Π—Π°ΠΌΠ΅ΠΌΠΎΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(Π’ΠΈΠΏ("Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»"));

ЯвляСтся Π»ΠΈ функция Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ (ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄ β†’ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄)?

НСт Π»ΠΈ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‚ Π»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для использования Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ БоотвСтствия?

-->

6. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ оптимизация

ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² добавляСт нСбольшиС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° Π²Ρ‹Π·ΠΎΠ² Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв это Π½Π΅ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ, Π½ΠΎ Π² высоконагруТСнных систСмах стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ:

  • πŸ“Š Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· Π΄Π΅Π»Π΅Π³Π°Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 15-20% ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ прямого Π²Ρ‹Π·ΠΎΠ²Π° (ΠΏΠΎ тСстам Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 8.3.22)
  • πŸ”„ РСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ стСка
  • πŸ—‘οΈ ЧастоС созданиС Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠ² Π² Ρ†ΠΈΠΊΠ»Π°Ρ… ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сборщик мусора

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ‡Π΅Ρ€Π΅Π·:

  1. ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠ²
  2. Π—Π°ΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π° пСрСчислСния (Ссли Π»ΠΎΠ³ΠΈΠΊΠ° фиксирована)
  3. ИспользованиС встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ (Массив.ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ(), Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.Π”Π»ΡΠšΠ°ΠΆΠ΄ΠΎΠ³ΠΎ())
πŸ’‘

Для критичСских ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ участков ΠΊΠΎΠ΄Π° замСряйтС врСмя выполнСния с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈ Π±Π΅Π· Π½ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠŸΠΎΠ»ΡƒΡ‡Ρ‚ΡŒΠ‘Π΅ΠΊΡƒΠ½Π΄Ρ‹Π”Π½Ρ().

7. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹

Иногда ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½Π°. Рассмотрим Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹:

7.1. ИспользованиС пСрСчислСний

Когда Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ фиксирован:

ΠŸΠ΅Ρ€Π΅ΠΌ ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ;

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ = Новый ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅("Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅,Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅,Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅");

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ(ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ, А, Π‘)

Если ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ = ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(А + Π‘);

Π˜Π½Π°Ρ‡Π΅Π•ΡΠ»ΠΈ ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ = ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(А - Π‘);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

7.2. Π¨Π°Π±Π»ΠΎΠ½ "БтратСгия"

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ(БтратСгия, Π”Π°Π½Π½Ρ‹Π΅)

БтратСгия.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ(Π”Π°Π½Π½Ρ‹Π΅);

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

// РСализация стратСгии

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° БтратСгияБохранСния(Π”Π°Π½Π½Ρ‹Π΅) Экспорт

Π”Π°Π½Π½Ρ‹Π΅.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ();

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

7.3. ВстроСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

Для стандартных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ массивами:

Числа = Новый Массив();

Числа.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(1); Числа.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(2); Числа.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(3);

// ВмСсто ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Найти

НайдСнноС = Числа.Найти(Π’ΠΈΠΏ("ЯвляСтсяЧётным"));

8. ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ диагностика

Ошибки с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ часто слоТно Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΡ‘ΠΌΠΎΠ²:

Для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π΄Π΅Π»Π΅Π³Π°Ρ‚Π΅:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π”ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠ€ΡƒΠ½ΠΊΡ†ΠΈΡŽ(Ѐункция)

Если Π’ΠΈΠΏΠ—Π½Ρ‡(Ѐункция) = Π’ΠΈΠΏ("Ѐункция") Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π­Ρ‚ΠΎ функция: " + Ѐункция.Имя());

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²: " + Ѐункция.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²());

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π­Ρ‚ΠΎ НЕ функция! Π’ΠΈΠΏ: " + Π’ΠΈΠΏΠ—Π½Ρ‡(Ѐункция));

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ мСста для постановки Ρ‚ΠΎΡ‡Π΅ΠΊ останова:

  • πŸ›‘ НСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°
  • πŸ›‘ Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
  • πŸ›‘ ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ‚ΠΈΠΏΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния

Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π»ΠΎΠ³Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅:

Ѐункция РСкурсивнаяЀункция(ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Ѐункция, Π“Π»ΡƒΠ±ΠΈΠ½Π° = 0)

Если Π“Π»ΡƒΠ±ΠΈΠ½Π° > 10 Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ОПАБНОБВЬ: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° бСсконСчная рСкурсия!");

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ НСопрСдСлёно;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

// ... основная логика ...

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Ѐункция(ΠΠΎΠ²Ρ‹ΠΉΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Ѐункция, Π“Π»ΡƒΠ±ΠΈΠ½Π° + 1);

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

πŸ’‘

ΠŸΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ слоТных Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠŸΠΎΠ»ΡƒΡ‡Ρ‚ΡŒΠ‘Ρ‚Π΅ΠΊΠ’Ρ‹Π·ΠΎΠ²ΠΎΠ²() для Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ выполнСния.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π½ΠΈΠΆΠ΅ 8.3.10 ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ использовании Π² асинхронных контСкстах (Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ задания, HTTP-сСрвисы). ΠŸΠ΅Ρ€Π΅Π΄ использованиСм Π² Ρ‚Π°ΠΊΠΈΡ… сцСнариях ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

FAQ: ЧастыС вопросы

МоТно Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (Π° Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹?

Π”Π°, синтаксис ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π’ΠΈΠΏ("ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°") ΠΏΡ€ΠΈ объявлСнии ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ β€” ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ значСния, поэтому ΠΈΡ… Π²Ρ‹Π·ΠΎΠ² Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² выраТСниях.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΠ”Π΅ΠΉΡΡ‚Π²ΠΈΠ΅(ДСйствиС, ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€)

ДСйствиС(ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€); // ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² Π±Π΅Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π›ΠΎΠ³Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅) Экспорт

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅);

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΠ”Π΅ΠΉΡΡ‚Π²ΠΈΠ΅(Π’ΠΈΠΏ("Π›ΠΎΠ³Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ"), "ВСстовоС сообщСниС");

Как ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ количСством ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²?

Π’ 1Π‘ Π½Π΅Ρ‚ прямой ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ числа ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠ². ΠžΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

Ѐункция Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉΠ’Ρ‹Π·ΠΎΠ²(Ѐункция, ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹)

Если Ѐункция.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²() = 1 Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Ѐункция(ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹[0]);

Π˜Π½Π°Ρ‡Π΅Π•ΡΠ»ΠΈ Ѐункция.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²() = 2 Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Ѐункция(ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹[0], ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹[1]);

// ... ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ для Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ количСства

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 8.3.18+ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΠ΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ моя функция-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅?

Ѐункция, пСрСдаваСмая ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ модуля, Π³Π΄Π΅ ΠΎΠ½Π° объявлСна, Π° Π½Π΅ Π³Π΄Π΅ вызываСтся. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

// ΠœΠΎΠ΄ΡƒΠ»ΡŒ 1

ΠŸΠ΅Ρ€Π΅ΠΌ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°ΡΠ’ΠœΠΎΠ΄ΡƒΠ»Π΅1 = 10;

Ѐункция ΠœΠΎΡΠ€ΡƒΠ½ΠΊΡ†ΠΈΡ()

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°ΡΠ’ΠœΠΎΠ΄ΡƒΠ»Π΅1 + 1; // Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

// ΠœΠΎΠ΄ΡƒΠ»ΡŒ 2

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΠ€ΡƒΠ½ΠΊΡ†ΠΈΡŽ(Ѐункция)

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°ΡΠ’ΠœΠΎΠ΄ΡƒΠ»Π΅2 = 20;

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Ѐункция()); // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ 11, Π° Π½Π΅ 21!

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π·Π°Π»ΠΎΠΆΠ΅Π½ΠΎ Π² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ областСй видимости 1Π‘ ΠΈ Π½Π΅ являСтся ошибкой.

Как ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ подсистСмы?

НСобходимо:

  1. Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ функция ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Экспорт
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ модуля: Π’ΠΈΠΏ("Π˜ΠΌΡΠœΠΎΠ΄ΡƒΠ»Ρ.Π˜ΠΌΡΠ€ΡƒΠ½ΠΊΡ†ΠΈΠΈ")
  3. ΠŸΡ€ΠΈ нСобходимости Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ссылку Π½Π° подсистСму Π² ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· ΠΎΠ±Ρ‰Π΅Π³ΠΎ модуля ΠžΠ±Ρ‰ΠΈΠ΅Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΠ‘Π΅Ρ€Π²Π΅Ρ€:

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΠ”Π΅ΠΉΡΡ‚Π²ΠΈΠ΅(Π’ΠΈΠΏ("ΠžΠ±Ρ‰ΠΈΠ΅Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΠ‘Π΅Ρ€Π²Π΅Ρ€.ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΠ”Π°Π½Π½Ρ‹Π΅"), Π”Π°Π½Π½Ρ‹Π΅);
МоТно Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ лямбда-выраТСния Π² 1Π‘?

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ лямбда-выраТСния Π² классичСском ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹:

  • ΠžΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ строковыС выраТСния с Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ() (Π½Π΅ рСкомСндуСтся ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ бСзопасности)
  • Π’ вСрсиях 8.3.20+ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° "стрСлочных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ" Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… сцСнариях

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ() (остороТно, ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ для ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΉ!):

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ = "А + Π‘";

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("А,Π‘", 2, 3);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ(Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹); // 5