Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Π° функция

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ сущСствования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, рассмотритС ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π›ΡŽΠ±Π°Ρ физичСская Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Π’Π°ΠΊ, связь ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π³Π°Π·Π° ΠΈ Π΅Π³ΠΎ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€ΠΎΠΉ ΠΏΡ€ΠΈ постоянном объСмС выраТаСтся Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ: Ρ€ = VΠ’, Ρ‚.Π΅. Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€ находится Π² прямой зависимости ΠΎΡ‚ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Π’ ΠΈ являСтся Π΅Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

ΠŸΡ€ΠΈ написании Ρƒ = f(Ρ…) имССтся Π²Π²ΠΈΠ΄Ρƒ нСкоторая идСя зависимости, Ρ‚.Π΅. пСрСмСнная Ρƒ зависит ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ… ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π·Π°ΠΊΠΎΠ½Ρƒ ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ. Π­Ρ‚ΠΎΡ‚ Π·Π°ΠΊΠΎΠ½ обозначаСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ f. ΠŸΡ€ΠΈ этом пСрСмСнная Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½. НапримСр, Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ покоящСйся Тидкости Ρ€ = ρgh зависит ΠΎΡ‚ плотности Тидкости ρ, высоты столба Тидкости h ΠΈ ΠΎΡ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ускорСния свободного падСния g.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ посрСдством примСнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ допустимого значСния Ρ… получаСтся ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρƒ. Π˜Π½Ρ‹ΠΌΠΈ словами, понятиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ идСю дСйствия, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π½Π°Π΄ ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Π’ связи с этим Π² тСхничСских дисциплинах функция опрСдСляСтся ΠΊΠ°ΠΊ устройство, Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ подаСтся Ρ…, Π° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρƒ.

Π˜Ρ‚Π°ΠΊ, функция позволяСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя мноТСствами Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ мноТСства соотвСтствуСт СдинствСнный элСмСнт Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ мноТСства. ΠŸΡ€ΠΈ этом Π΄Π°Π½Π½ΠΎΠ΅ соотвСтствиС выраТаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ ΠΈΠ»ΠΈ Π·Π°ΠΊΠΎΠ½ΠΎΠΌ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами. НаиболСС ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ являСтся прСдставлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹: Ρƒ=sinΡ…, Ρƒ=2Ρ…+3 ΠΈ Ρ‚.Π΄. Но сущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ наглядный способ выраТСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – Π² Π²ΠΈΠ΄Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ инфляции ΠΎΡ‚ Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠΉ массы. НСкоторыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСдставлСны Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎΡ‚ способ являСтся СдинствСнно Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ устанавливаСтся ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΈ этом Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π΅Ρ‰Π΅ Π½Π΅ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π°, Π° Π³Ρ€Π°Ρ„ΠΈΠΊ Π½Π΅ построСн.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π—Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вас ΡƒΠ²Π°ΠΆΠ°Π»ΠΈ программисты

БлоТная ваТная ΡΡ‚Π°Ρ‚ΡŒΡ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΊΡ€ΡƒΡ‚Ρ‹ΠΌ программистом.

Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ программист стараСтся Π΄Π΅Π»Π°Ρ‚ΡŒ свои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ чистыми. Если Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅, ΠΌΠΎΠΆΠ½ΠΎ сойти Π·Π° своСго, Π° Π·Π°ΠΎΠ΄Π½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄.

Если Π²Ρ‹ Π½Π΅ совсСм ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ функция ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½Π° Π½ΡƒΠΆΠ½Π° β€” Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² наш ΠΊΠ°Ρ‚:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ функция

Ѐункция β€” это ΠΌΠΈΠ½ΠΈ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Π½ΡƒΡ‚Ρ€ΠΈ вашСй основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ Π²Π΅Ρ‰ΡŒ. Π’Ρ‹ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ описываСтС, Ρ‡Ρ‚ΠΎ это Π·Π° Π²Π΅Ρ‰ΡŒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡΡΡ‹Π»Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° это описаниС.

НапримСр, Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ³Ρ€Ρƒ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Ρ†Π΅Π»ΡŒ, ΡƒΠ±ΠΈΠ²Π°Π΅Ρ‚ Π²Ρ€Π°Π³Π°, Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ±ΠΎ, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈΠ»ΠΈ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Π»Π°Π²Ρƒ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ ΠΎΡ‡ΠΊΠΎΠ². Π­Ρ‚ΠΎ дСлаСтся двумя дСйствиями: ΠΊ старым ΠΎΡ‡ΠΊΠ°ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅, Π½Π° экран выводится новая сумма ΠΎΡ‡ΠΊΠΎΠ². Допустим, эти дСйствия Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ 8 строк ΠΊΠΎΠ΄Π°.

Допустим, Π² ΠΈΠ³Ρ€Π΅ Π΅ΡΡ‚ΡŒ 100 ситуаций, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‡ΠΊΠΈ β€” для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π²Ρ€Π°Π³Π°, ΠΏΡ€Π΅Π³Ρ€Π°Π΄Ρ‹, уровня ΠΈ Ρ‚. Π΄. Π§Ρ‚ΠΎΠ±Ρ‹ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ста ситуаций Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ восСмь строк ΠΊΠΎΠ΄Π°, Π²Ρ‹ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚Π΅ эти восСмь строк Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² ста мСстах Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΎΠ΄Π½Ρƒ строку: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, changeScore(10) β€” число ΠΎΡ‡ΠΊΠΎΠ² повысится Π½Π° 10.

Если Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ changeScore(), Ρ‚ΠΎ измСнСния отразятся ΠΊΠ°ΠΊ Π±Ρ‹ Π²ΠΎ всСх ста мСстах, Π³Π΄Π΅ эта функция вызываСтся.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Ρ‚ΡŒ ΠΈ ΡΠΎΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Π΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ отказоустойчивым, Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ. И Π²ΠΎΠΎΠ±Ρ‰Π΅ порядок Π² функциях β€” порядок Π² Π³ΠΎΠ»ΠΎΠ²Π΅.

Π’ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с подсчётом ΠΎΡ‡ΠΊΠΎΠ². Π§Ρ‚ΠΎ Ссли ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΎΡ‡ΠΊΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° экран, Π½ΠΎ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»? ΠŸΡ€ΠΎΡΡ‚ΠΎ добавляСтС Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, связанныС с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΈ ΠΎΠ½ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ снова Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ Π² основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. НС Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»Π·Π°Ρ‚ΡŒ ΠΏΠΎ всСму ΠΊΠΎΠ΄Ρƒ, ΠΈΡΠΊΠ°Ρ‚ΡŒ мСста с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‡ΠΊΠΎΠ² ΠΈ Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΌ ΠΏΡ€ΠΎ Ρ„Π°ΠΉΠ»Ρ‹. МСньшС Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π°, мСньшС ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ, мСньшС Π½Π΅Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… скобок.

А Ρ‡Ρ‚ΠΎ Ссли Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‡ΠΊΠΈ Π² Ρ„Π°ΠΉΠ», Π½ΠΎ ΠΈ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠΌ? ПишСм Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getHighScore(), которая достаёт ΠΎΡ‚ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ Ρ€Π΅ΠΊΠΎΡ€Π΄ ΠΏΠΎ ΠΈΠ³Ρ€Π΅, ΠΈ Π΄Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” setHighScore() ΠΈ celebrateHighScore() β€” ΠΎΠ΄Π½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΠΎΡ€Π΄, Ссли ΠΌΡ‹ Π΅Π³ΠΎ ΠΏΠΎΠ±ΠΈΠ»ΠΈ, Π° вторая β€” ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΏΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ срабатывании changeScore() Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. И сколько Π±Ρ‹ Ρ€Π°Π· ΠΌΡ‹ Π½ΠΈ Π²Ρ‹Π·Π²Π°Π»ΠΈ Π² ΠΊΠΎΠ΄Π΅ changeScore(), ΠΎΠ½Π° потянСт Π·Π° собой всё хозяйство автоматичСски.

Π‘ΠΈΠ»Π° Π΅Ρ‰Ρ‘ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°ΠΌ Π½Π΅Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ getHighScore(), setHighScore() ΠΈ celebrateHighScore(). Они Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π³Π΄Π΅-Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС ΠΊΠΎΠ΄Π° ΠΈ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ нас Π½Π΅ Π²ΠΎΠ»Π½ΡƒΡŽΡ‚. Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с Тёсткого диска, ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ… Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊΠΈ ΠΈ Π²Π·Π»Π°ΠΌΡ‹Π²Π°Ρ‚ΡŒ ΠŸΠ΅Π½Ρ‚Π°Π³ΠΎΠ½ β€” это Π±ΡƒΠ΄Π΅Ρ‚ расписано Π²Π½ΡƒΡ‚Ρ€ΠΈ самих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… мСстах тСкста.

А Π±Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ-Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ прямо Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π­Ρ‚ΠΎ исполнимо, Π½ΠΎ ΠΊΠΎΠ΄ выглядСл Π±Ρ‹ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ. Π§Ρ‚ΠΎ Ссли Ρƒ вас Π½Π° страницС Ρ‚Ρ€ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹, ΠΈ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ?

Π₯ΠΎΡ€ΠΎΡˆΠΎ написанныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π·ΠΊΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‡ΡƒΠΆΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getExamScore(username) ΠΈ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ послСдняя ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ выясняСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ экзамСна ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΡŽΠ·Π΅Ρ€Π½Π΅ΠΉΠΌΡƒ. Как ΠΎΠ½Π° Ρ‚Π°ΠΌ устроСна Π²Π½ΡƒΡ‚Ρ€ΠΈ, ΠΊΡƒΠ΄Π° обращаСтся ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ β€” Π²Π°ΠΌ Π½Π΅Π²Π°ΠΆΠ½ΠΎ. Для нас это ΠΊΠ°ΠΊ Π±Ρ‹ ΠΎΠ΄Π½Π° простая понятная ΠΊΠΎΠΌΠ°Π½Π΄Π°.

МоТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΡƒΡ‡Ρƒ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΡ… Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. НапримСр, Π²Ρ‹ написали ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΠΈΠ·ΠΈΠΊΠΈ ΠΈΠ³Ρ€Ρ‹ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎ всС свои ΠΈΠ³Ρ€Ρ‹. Π’ ΠΎΠ΄Π½ΠΎΠΉ β€” Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” ΠΏΠΈΡ€Π°Ρ‚Ρ‹, Π½ΠΎ Π² ΠΎΠ±Π΅ΠΈΡ… ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ Ρ„ΠΈΠ·ΠΈΠΊΠ°.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это бСсконСчная Ρ€Π°Π΄ΠΎΡΡ‚ΡŒ. На этом наш экскурс Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ чистотС.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π•ΡΡ‚ΡŒ понятиС чистых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ссли Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π²Π° Ρ€Π°Π·Π° Π΄Π°Ρ‚ΡŒ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½Π° всСгда выдаст ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ относится нСпосрСдствСнно ΠΊ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρƒ чистой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСдсказуСмый Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ Π½Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов.

Один ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Допустим, ΠΌΡ‹ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая считаСт ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΡ€ΡƒΠ³Π° ΠΏΠΎ Π΅Π³ΠΎ радиусу: getCircleArea(). Для Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ ΠΌΡ‹ Π±Π΅Ρ€Ρ‘ΠΌ число ΠΏΠΈ, Ρ€Π°Π²Π½ΠΎΠ΅ 3,1415, ΠΈ вписываСм Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π΄ΠΎ ΡΠΊΠΎΡ€ΠΌΠΈΡ‚ΡŒ число, ΠΈ ΠΎΠ½Π° выдаст ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΡ€ΡƒΠ³Π°:

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ эта функция всСгда выдаст Π½ΡƒΠΆΠ½ΡƒΡŽ для Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΡ€ΡƒΠ³Π° ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ Π² Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π­Ρ‚Π° функция с прСдсказуСмым Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠœΡ‹ пишСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ-Ρ‚Π°ΠΉΠΌΠ΅Ρ€, которая Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ·Π΄Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° 10 сСкунд Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΎΡ‚Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ Π΅ΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, сколько ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ сСкунд, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° функция: ΠΎΠ½Π° выясняСт количСство сСкунд ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠœΡ‹ Π΄Π°Ρ‘ΠΌ Π΅ΠΉ Π΄Π²Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Π° функция сама Π½Π΅ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ высчитываСт, сколько ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ сСкунд. Как ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½Π° это считаСт, сСйчас Π½Π΅Π²Π°ΠΆΠ½ΠΎ. Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° это Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ функция с прСдсказуСмым Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ:

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: ΠΎΠ½Π° опрСдСляСт врСмя ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π΄ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΈ исполнСнии эта функция Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, сравниваСт с Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ вычислСния. ΠŸΡ€ΠΈ запускС ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ Π² нСсколько сСкунд ΠΎΠ½Π° даст Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

Π­Ρ‚ΠΎ функция с нСпрСдсказуСмым Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ. Π£ Π½Π΅Ρ‘ Π΅ΡΡ‚ΡŒ нСпрСдсказуСмая Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π§Ρ‚ΠΎ Ссли Π²ΠΎ врСмя исполнСния Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠ±Π½ΡƒΠ»ΠΈΠ»ΠΈΡΡŒ часы? Или ΠΎΠ½ смСнил часовой пояс? Или ΠΏΡ€ΠΈ запросС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ происходит ошибка? Или Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡ‚Π΄Π°Ρ‡Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ?

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния чистых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сначала ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ функциями ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС внСшниС зависимости, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΡ… ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ подходят для нашСй Ρ€Π°Π±ΠΎΡ‚Ρ‹. И ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с подсчётом ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ². Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ:

Π’ΠΎΠ³Π΄Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getCurrentTime() ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ всё хозяйство, связанноС с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ, Π° Π² getInterval() ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считаСт Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠŸΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ языки программирования ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ функциям Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя, Π½ΠΎ ΠΈ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. НапримСр, функция ΠΌΠΎΠΆΠ΅Ρ‚ вывСсти Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π° экран, Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° диск, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Π’Π·Π»ΠΎΠΌΠ°Ρ‚ΡŒ ΠŸΠ΅Π½Ρ‚Π°Π³ΠΎΠ½, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅. Всё это называСтся ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами. Π₯ΠΎΡ€ΠΎΡˆΠΈΠ΅ программисты смотрят Π½Π° Π½ΠΈΡ… ΠΊΡ€Π°ΠΉΠ½Π΅ настороТСнно.

ΠœΡ‹ пишСм таск-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€. Π’ памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ хранятся Π·Π°Π΄Π°Ρ‡ΠΈ, Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: высокий, срСдний ΠΈ Π½ΠΈΠ·ΠΊΠΈΠΉ. ВсС Π·Π°Π΄Π°Ρ‡ΠΈ свалСны Π² ΠΊΡƒΡ‡Ρƒ Π² памяти, Π° Π½Π°ΠΌ Π½Π°Π΄ΠΎ вывСсти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, Ρ‡Ρ‚ΠΎ с высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ.

МоТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая считываСт всС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ· памяти, Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚. ΠŸΡ€ΠΈ этом Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ Π² памяти это Π½Π΅ влияСт: ΠΎΠ½ΠΈ ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΈ свалСны Π² ΠΊΡƒΡ‡Ρƒ, Ρ‚Π°ΠΊ ΠΈ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ. Π­Ρ‚ΠΎ функция Π±Π΅Π· ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов.

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ настороТСнно относятся ΠΊ мутациям, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π·Π° Π½ΠΈΠΌΠΈ слоТно ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ. Π§Ρ‚ΠΎ Ссли ΠΈΠ·-Π·Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ошибки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выполнятся Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ Π²Π°ΠΆΠ½Ρ‹Π΅ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Π΅? Или функция выполнится нСпрСдсказуСмо ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·? Или ΠΎΠ½Π° застрянСт Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈ ΠΈΠ·-Π·Π° ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ Ρ€Π°Π·ΠΎΡ€Π²Ρ‘Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ? Или мутация ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ Π½Π΅ с Ρ‚Π΅ΠΌ куском ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ?

Π’ΠΎΡ‚ типичная ошибка, связанная с ΠΌΡƒΡ‚Π°Ρ†ΠΈΠ΅ΠΉ. ΠœΡ‹ пишСм ΠΈΠ³Ρ€Ρƒ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ сумму ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… ΠΎΡ‡ΠΊΠΎΠ². Π—Π° это ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ функция changeScore(), которая записываСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ playerScore β€” Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡƒΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. ΠœΡ‹ случайно, ΠΏΠΎ Π½Π΅Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π²Ρ‹Π·Π²Π°Π»ΠΈ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Π΄Π²ΡƒΡ… мСстах вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ, ΠΈ Π±Π°Π»Π»Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²Π΄Π²ΠΎΠ΅. Π­Ρ‚ΠΎ Π±Π°Π³.

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

Π‘Π΅Π· ΠΌΡƒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ Π½Π΅ обойдёмся β€” Π½ΡƒΠΆΠ½ΠΎ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° экран, ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ», ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π‘Π»ΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΡƒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Но программисты ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… особо Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚. Π“Ρ€ΡƒΠ±ΠΎ говоря, Ссли функция вносит измСнСния Π² большой Π²Π°ΠΆΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ входящих Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию этого Ρ„Π°ΠΉΠ»Π°.

Как этим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ

Когда Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ свою ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π·Π°Π΄Π°ΠΉΡ‚Π΅ΡΡŒ вопросами:

И Ссли Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ позволяСт, ΠΏΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция Π½ΠΈ ΠΎΡ‚ Ρ‡Π΅Π³ΠΎ Π½Π΅ зависСла ΠΈ Π½ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ Π·Π° своими ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π½Π΅ влияла. Π’ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ, Π° ΠΊΠΎΠ»Π»Π΅Π³ΠΈ-программисты сразу увидят, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ Π²Π΄ΡƒΠΌΡ‡ΠΈΠ²Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π£Ρ€ΠΎΠΊ β„–14. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Обновл. 19 БСн 2020 |

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ Ρ‚Π°ΠΊ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹.

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?

ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ программисты часто ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚: «А ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ вСсь ΠΊΠΎΠ΄ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ нСпосрСдствСнно Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ main()?Β». Если вашСго ΠΊΠΎΠ΄Π° всСго 10-20 строк, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ. Если ΠΆΠ΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ, Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для упрощСния ΠΊΠΎΠ΄Π°, Π° Π½Π΅ для Π΅Π³ΠΎ услоТнСния. Они ΠΈΠΌΠ΅ΡŽΡ‚ ряд прСимущСств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΈΡ… Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ Π² Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅/слоТности, ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ вСсь ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ main() становится Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ. Ѐункция β€” это ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π΅ Π·Π°ΠΌΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡΡΡŒ ΠΏΡ€ΠΈ этом ΠΎΠ± ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… частях ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ позволяСт Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ слоТныС Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΈ простыС, Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ сниТаСт ΠΎΠ±Ρ‰ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС. ПослС объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·. Π­Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ дублирования ΠΊΠΎΠ΄Π° ΠΈ сводит ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ возникновСния ошибок ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ/вставкС ΠΊΠΎΠ΄Π°. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ объСм ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ с нуля ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·.

ВСстированиС. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠ±ΠΈΡ€Π°ΡŽΡ‚ лишний ΠΊΠΎΠ΄, Ρ‚ΠΎ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ становится ΠΏΡ€ΠΎΡ‰Π΅. А Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ функция β€” это ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°, Ρ‚ΠΎ Π½Π°ΠΌ достаточно ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Π΅Ρ‘ работоспособности, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Ρ‘ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· Π±Π΅Π· нСобходимости ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ тСстированиС (Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ внСсСм измСнСния Π² эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ).

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΡ. Когда Π½ΡƒΠΆΠ½ΠΎ внСсти измСнСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π΅Ρ‘ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ. Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ внСсти измСнСния Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π²Π΅Π·Π΄Π΅.

Абстракция. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π΅Ρ‘ имя, Π΄Π°Π½Π½Ρ‹Π΅ Π²Π²ΠΎΠ΄Π°, Π΄Π°Π½Π½Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Π³Π΄Π΅ эта функция находится. Нам Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для написания ΠΊΠΎΠ΄Π°, понятного Π΄Ρ€ΡƒΠ³ΠΈΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π‘++ ΠΈ всё, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΉ находится, созданы ΠΏΠΎ этому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ).

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ std::cin ΠΈΠ»ΠΈ std::cout для Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C++, которая соотвСтствуСт всСм Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹ΠΌ концСпциям.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Одной ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ, являСтся ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΠΎΡ‚ нСсколько основных Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈ написании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

РСкомСндация β„–1: Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ появляСтся Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр, Ссли ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ нСсколько Ρ€Π°Π· ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ способом, Ρ‚ΠΎ это ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для написания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

РСкомСндация β„–2: Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сортировки Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ, Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ список Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€” пишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сортировки, ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ нСсортированный список ΠΈ ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ отсортированный.

РСкомСндация β„–3: Ѐункция Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ (ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ) Π·Π°Π΄Π°Π½ΠΈΠ΅.

РСкомСндация β„–4: Когда функция становится слишком большой, слоТной ΠΈΠ»ΠΈ нСпонятной β€” Π΅Ρ‘ слСдуСт Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° нСсколько ΠΏΠΎΠ΄Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΎ называСтся Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ языка C++ Π²Π°ΠΌ прСдстоит Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ подзадания:

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Для простых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (ΠΌΠ΅Π½Π΅Π΅, Ρ‡Π΅ΠΌ 30 строк ΠΊΠΎΠ΄Π°) частично ΠΈΠ»ΠΈ всС эти Ρ‚Ρ€ΠΈ подзадания ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main(). Для Π±ΠΎΠ»Π΅Π΅ слоТных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (ΠΈΠ»ΠΈ просто для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ) ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· этих Ρ‚Ρ€Π΅Ρ… ΠΏΠΎΠ΄Π·Π°Π΄Π°Π½ΠΈΠΉ являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Новички часто ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, это Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Β«ΠΎΠ΄Π½ΠΎΠ³ΠΎ задания». Ѐункция, которая ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² caller, Π° дальшС ΡƒΠΆΠ΅ пускай caller сам Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ с Π½ΠΈΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ функция?

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

7 класс, 11 класс, Π•Π“Π­/ΠžΠ“Π­

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Рассмотрим нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠ²ΠΎΠΈΡ‚ΡŒ навСрняка.

1. Ѐункция β€” это взаимосвязь ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Π—Π½Π°ΠΊΠΎΠΌΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ y = f (x) ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ идСю Ρ‚Π°ΠΊΠΎΠΉ зависимости ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Ρƒ зависит ΠΎΡ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Ρ… ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π·Π°ΠΊΠΎΠ½Ρƒ, ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обозначаСтся f.

Π’Ρ‹Π²ΠΎΠ΄: мСняя Ρ… (Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΈΠ»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚) β€” мСняСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρƒ.

2. Ѐункция β€” это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ дСйствиС Π½Π°Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Ρ…, ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π½Π°Π΄ Π½Π΅ΠΉ ΠΏΠΎΠΊΠΎΠ»Π΄ΠΎΠ²Π°Ρ‚ΡŒ β€” ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Ρƒ.

Π’ тСхничСской Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для устройств, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π° Π²Ρ…ΠΎΠ΄ подаСтся Ρ… β€” Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ получаСтся Ρƒ. Π‘Ρ…Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ это выглядит Ρ‚Π°ΠΊ:

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ этом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ слово «функция» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈ Π² Π΄Π°Π»Π΅ΠΊΠΈΡ… ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ областях. НапримСр, Ρ‚Π°ΠΊ говорят ΠΎ функциях Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ°, костСй Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΌΠ΅ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΎ функциях ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ пСрСчислСнном случаС Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎ Π½Π΅ΠΊΠΈΡ… дСйствиях.

3. Ѐункция β€” это соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя мноТСствами, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ мноТСства соотвСтствуСт ΠΎΠ΄ΠΈΠ½ элСмСнт Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ мноТСства. Π­Ρ‚ΠΎ самоС популярноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°Ρ… ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅.

НапримСр, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρƒ = 2Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ числу Ρ… ставит Π² соотвСтствиС число Π² Π΄Π²Π° Ρ€Π°Π·Π° большСС, Ρ‡Π΅ΠΌ Ρ….

ΠžΠ±Π»Π°ΡΡ‚ΡŒ опрСдСлСния β€” мноТСство Ρ…, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ допустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ выраТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ записано Π² Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅.

НапримСр, для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΈΠ΄Π°

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠΎΠ±Π»Π°ΡΡ‚ΡŒ опрСдСлСния выглядит Ρ‚Π°ΠΊ:

И Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ: D (y): Ρ… β‰  0.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ β€” мноТСство Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ это значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ функция.

НапримСр, СстСствСнная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ y = x2 β€” это всС числа большС Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π½Ρ‹Π΅ Π½ΡƒΠ»ΡŽ. МоТно Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: Π• (Ρƒ): Ρƒ β‰₯ 0.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя мноТСствами β€” Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ-Π²Π»Π°Π΄Π΅Π»Π΅Ρ† странички Π² инстаграм ΠΈ сама страничка, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ Π²Π»Π°Π΄Π΅Π»Π΅Ρ†. Π’Π°ΠΊΠΎΠ΅ соотвСтствиС ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π²Π·Π°ΠΈΠΌΠ½ΠΎ-ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌ β€” Ρƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π΅ΡΡ‚ΡŒ страничка, ΠΈ это ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ β€” ΠΏΠΎ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρƒ Π² инстаграм ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΡ‚ΠΎ ΠΈΠΌ Π²Π»Π°Π΄Π΅Π΅Ρ‚.

Π’ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠ½ΠΎ-ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр, линСйная функция Ρƒ = 3Ρ… +2. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Ρ… соотвСтствуСт ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρƒ. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ β€” зная Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ сразу Π½Π°ΠΉΡ‚ΠΈ Ρ….

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’ΠΈΠΏΡ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΡ ΡΡ‚Π°Ρ‚ΡŒΡ Π² Ρ†ΠΈΠΊΠ»Π΅ «ВСория ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ для программистов».

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΈΠΏΡ‹, ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹.

ΠšΠΎΠΌΡƒ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΈΠΏΡ‹?

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

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π‘ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ языком, любая комбинация Π±Π°ΠΉΡ‚ΠΎΠ² производимая обСзьянами Π±ΡƒΠ΄Π΅Ρ‚ принята ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°. Но Π² высокоуровнСвых языках, высоко цСнится Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ компилятор способСн ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ лСксичСскиС ΠΈ грамматичСскиС ошибки. МногиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ просто ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚Ρ‹, Π° ΠΎΠ±Π΅Π·ΡŒΡΠ½Ρ‹ останутся Π±Π΅Π· Π±Π°Π½Π°Π½ΠΎΠ², Π·Π°Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ большС шансов Π±Ρ‹Ρ‚ΡŒ осмыслСнными. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² обСспСчиваСт Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π±Π°Ρ€ΡŒΠ΅Ρ€ ΠΏΡ€ΠΎΡ‚ΠΈΠ² бСссмыслСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках нСсоотвСтствия Ρ‚ΠΈΠΏΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя выполнСния, Π² строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… статичСски провСряСмых языках нСсоотвСтствия Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²ΠΎ врСмя компиляции, Ρ‡Ρ‚ΠΎ отсСиваСт мноТСство Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ шанс Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ.

Π˜Ρ‚Π°ΠΊ, вопрос Π² Ρ‚ΠΎΠΌ, Ρ…ΠΎΡ‚ΠΈΠΌ Π»ΠΈ ΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅Π·ΡŒΡΠ½Ρ‹ Π±Ρ‹Π»ΠΈ счастливы, ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?
(ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π½Π΅ стоит ΠΎΡΠΊΠΎΡ€Π±Π»ΡΡ‚ΡŒΡΡ, Π°Π²Ρ‚ΠΎΡ€ просто Π»ΡŽΠ±ΠΈΡ‚ ΠΌΠ΅Π½Π΅Π΅ скучныС ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Ρ‹, Ρ‡Π΅ΠΌ Π“Π‘Π§ ΠΈ «случайныС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚Β», Π° Π½Π΅ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ программистов обСзьянами).

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ†Π΅Π»ΡŒ мыслСнного экспСримСнта с ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‰ΠΈΠΌΠΈ обСзьянами β€” созданиС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ собрания сочинСний ШСкспира (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: ΠΈΠ»ΠΈ Π’ΠΎΠΉΠ½Π° ΠΈ ΠœΠΈΡ€ Волстого). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΡ€Ρ„ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ Ρ€Π΅Π·ΠΊΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ ΡˆΠ°Π½ΡΡ‹ Π½Π° успСх. Аналог ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π΅Ρ‰Π΅ дальшС: послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π ΠΎΠΌΠ΅ΠΎ объявлСн Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² убСдится, Ρ‡Ρ‚ΠΎ Π½Π° Π½Π΅ΠΌ Π½Π΅ растут Π»ΠΈΡΡ‚ΡŒΡ ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π»ΠΎΠ²ΠΈΡ‚ Ρ„ΠΎΡ‚ΠΎΠ½Ρ‹ своим ΠΌΠΎΡ‰Π½Ρ‹ΠΌ Π³Ρ€Π°Π²ΠΈΡ‚Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ.

Π’ΠΈΠΏΡ‹ Π½ΡƒΠΆΠ½Ρ‹ для компонуСмости

ВСория ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ стрСлок. НС Π»ΡŽΠ±Ρ‹Π΅ Π΄Π²Π΅ стрСлки ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ скомпонованы: Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ΄Π½ΠΎΠΉ стрСлки Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с исходным ΠΎΠ±ΡŒΠ΅ΠΊΡ‚ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли вторая функция Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠΉ. ОбС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… композиция Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»Π°. Π§Π΅ΠΌ сильнСС систСма Ρ‚ΠΈΠΏΠΎΠ² языка, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ это ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ автоматичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ.

ЕдинствСнный ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΡΠ»Ρ‹ΡˆΡƒ ΠΏΡ€ΠΎΡ‚ΠΈΠ² строгой статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСмантичСски Π²Π΅Ρ€Π½Ρ‹. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это случаСтся ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π²ΠΎ избСТания срача Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Π°Π²Ρ‚ΠΎΡ€ Π½Π΅ ΡƒΡ‡Π΅Π», ΠΈΠ»ΠΈ нСсогласСн, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ стилСй, ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ программсистом Π½Π° скриптовых языках duck-typing Ρ‚ΠΎΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΎ Π½Π° Тизнь. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, duck-typing Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈ Π² строгой систСмС Ρ‚ΠΈΠΏΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· templates, traits, type classes, interfaces, ΠΌΠ½ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π°Π²Ρ‚ΠΎΡ€Π° нСльзя ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ строго Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌ.) ΠΈ, Π² любом случаС, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ язык содСрТит ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Ρ…ΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ систСму Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΠ³Π΄Π° это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π”Π°ΠΆΠ΅ Haskell ΠΈΠΌΠ΅Π΅Ρ‚ unsafeCoerce. Но Ρ‚Π°ΠΊΠΈΠ΅ конструкции Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ. ΠŸΠ΅Ρ€ΡΠΎΠ½Π°ΠΆ Π€Ρ€Π°Π½Ρ†Π° ΠšΠ°Ρ„ΠΊΠΈ, Π“Ρ€Π΅Π³ΠΎΡ€ Π—Π°ΠΌΠ·Π°, Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ систСму Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ прСвращаСтся Π² гигантского ΠΆΡƒΠΊΠ°, ΠΈ ΠΌΡ‹ всС Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ это ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΎΡΡŒ (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: ΠΏΠ»ΠΎΡ…ΠΎ πŸ™‚.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я часто ΡΠ»Ρ‹ΡˆΡƒ, Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ строгая типизация Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° программиста. Π― ΠΌΠΎΠ³Ρƒ ΡΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сам написал нСсколько обьявлСний ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² Π‘++, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΡ‚ Π΅ΡΡ‚ΡŒ тСхнология, Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ², которая позволяСт компилятору вывСсти Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ· контСкста, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π’ Π‘++, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ auto, ΠΈ компилятор Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Ρ‚ΠΈΠΏ Π·Π° вас.

Π’ Haskell, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π΄ΠΊΠΈΡ… случаСв, Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, всС Ρ€Π°Π²Π½ΠΎ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ сСмантикС ΠΊΠΎΠ΄Π°, ΠΈ обьявлСния Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ошибки компиляции. ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π² Haskell β€” Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ². ПозТС, Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ основой для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ становятся Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ компилятором коммСнтариями.

Бтрогая статичСская типизация часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΏΡ€Π΅Π΄Π»ΠΎΠ³Π° для нСтСстирования ΠΊΠΎΠ΄Π°. Иногда Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Haskell-программисты говорят: «Если ΠΊΠΎΠ΄ собираСтся, ΠΎΠ½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ.Β» ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, коррСктная с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½Π° Π² смыслС ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π² рядС исслСдований Haskell Π½Π΅ стал сильно ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ языки ΠΏΠΎ качСству ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ. ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π² коммСрчСских условиях Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‡ΠΈΠ½ΠΈΡ‚ΡŒ Π±Π°Π³ΠΈ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ уровня качСства, Ρ‡Ρ‚ΠΎ Π² основном связано с экономикой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ толСрантности ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΈ ΠΎΡ‡Π΅Π½ΡŒ слабо связано с языком программирования ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π›ΡƒΡ‡ΡˆΠΈΠΌ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ, сколько ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² отстаСт ΠΎΡ‚ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈΠ»ΠΈ поставляСтся с сильно сниТСнным Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ.

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

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ тСстированиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· нСсоотвСтствий, Π½ΠΎ тСстированиС практичСски всСгда вСроятностный, Π° Π½Π΅ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ процСсс (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, имСлся Π²Π²ΠΈΠ΄Ρƒ Π½Π°Π±ΠΎΡ€ тСстов: Π²Ρ‹ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Π΅ Π½Π΅ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Ρ‹, Π° Π½Π΅ΠΊΡƒΡŽ Ρ€Π΅ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ.) ВСстированиС β€” плохая Π·Π°ΠΌΠ΅Π½Π° Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Ρƒ коррСктности.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΈΠΏΡ‹?

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ описаниС Ρ‚ΠΈΠΏΠΎΠ²: ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой мноТСства Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ΠΈΠΏΡƒ Bool (ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ Π² Haskell) соотвСтствуСт мноТСство ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов: True ΠΈ False. Π’ΠΈΠΏ Char β€” мноТСство всСх символов Unicode, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ‘a’ ΠΈΠ»ΠΈ ‘Δ…’.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ бСсконСчными. Π’ΠΈΠΏ String, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΏΠΎ сути, синонимом списка Char, β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ€ бСсконСчного мноТСства.

Когда ΠΌΡ‹ обьявляСм x, ΠΊΠ°ΠΊ Integer:

ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ это элСмСнт мноТСства Ρ†Π΅Π»Ρ‹Ρ… чисСл. Integer Π² Haskell β€” бСсконСчноС мноТСство, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано для Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ любой точности. Π•ΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ мноТСство Int, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ соотвСтствуСт ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ, ΠΊΠ°ΠΊ int Π² C++.

Π•ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ тонкости, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΡ€ΠΈΡ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΊ мноТСствам слоТным. Π•ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ функциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½Ρ‹Π΅ опрСдСлСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ мноТСство всСх мноТСств; Π½ΠΎ, ΠΊΠ°ΠΊ я ΠΈ ΠΎΠ±Π΅Ρ‰Π°Π», я Π½Π΅ Π±ΡƒΠ΄Ρƒ строгим ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΌ. Π’Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ катСгория мноТСств, которая называСтся Set, ΠΈ ΠΌΡ‹ с Π½Π΅ΠΉ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.
Π’ Set, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ β€” это мноТСства, Π° ΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΡ‹ (стрСлки) β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Set β€” особая катСгория, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ. НапримСр, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ пустоС мноТСство Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ элСмСнтов. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ мноТСства ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ элСмСнты ΠΎΠ΄Π½ΠΎΠ³ΠΎ мноТСства Π² элСмСнты Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π΄Π²Π° элСмСнта Π² ΠΎΠ΄ΠΈΠ½, Π½ΠΎ Π½Π΅ ΠΎΠ΄ΠΈΠ½ элСмСнт Π² Π΄Π²Π°. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ тоТдСствСнная функция ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт мноТСства Π² сСбя, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π― ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽ постСпСнно Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ всю эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ вмСсто этого Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ всС эти понятия Π² чисто ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ стрСлок.

Π’ идСальном ΠΌΠΈΡ€Π΅ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ просто ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ Π² Haskell β€” мноТСства, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Haskell β€” матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. БущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° малСнькая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: матСматичСская функция Π½Π΅ выполняСт ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ΄ β€” ΠΎΠ½Π° Π·Π½Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π²Π΅Ρ‚. Ѐункция Π² Haskell Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚Π²Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ссли ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π·Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число шагов, ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ большим ΠΎΠ½ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ. Но Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вычислСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ, ΠΈ Ρ‚Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ. ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠ΅Ρ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Haskell ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΡŒ, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ функция, ΠΈΠ»ΠΈ Π½Π΅Ρ‚ β€” знамСнитая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° остановки β€” Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΠ°. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΡƒΡ‡Π΅Π½Ρ‹Π΅-ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‰ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ Π³Π΅Π½ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ идСю, ΠΈΠ»ΠΈ грязный Ρ…Π°ΠΊ, Π² зависимости ΠΎΡ‚ вашСй Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, β€” Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π½Π°Π·Ρ‹Π²Π°Π½Π½Ρ‹ΠΌ bottom (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: этот Ρ‚Π΅Ρ€ΠΌΠΈΠ½ (bottom) ΡΠ»Ρ‹ΡˆΠΈΡ‚ΡΡ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΏΠΎ-Π΄ΡƒΡ€Π°Ρ†ΠΊΠΈ Π½Π° русском, Ссли ΠΊΡ‚ΠΎ Π·Π½Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, поТалуйста, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΉΡ‚Π΅.), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обозначаСтся _|_ ΠΈΠ»ΠΈ Π² Unicode βŠ₯. Π­Ρ‚ΠΎ Β«Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β» соотвСтствуСт Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅ΠΌΡƒΡΡ Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡŽ. Π’Π°ΠΊ функция, объявлСнная ΠΊΠ°ΠΊ:

ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ True, False, ΠΈΠ»ΠΈ _|_; послСднСС Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ функция Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ bottom Π² систСму Ρ‚ΠΈΠΏΠΎΠ², ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния Π·Π° bottom, ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ bottom явно. ПослСднСС, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ выраТСния undefined:

Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ undefined вычисляСтся Π² bottom, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π²ΠΎ всС Ρ‚ΠΈΠΏΡ‹, Π² Ρ‚ΠΎΠΌ числС ΠΈ Bool. МоТно Π΄Π°ΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ bottom, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ частичными, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ для всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π—Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ матСматичСская модСль?

Как программист, Π²Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с синтаксисом ΠΈ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ языка программирования. Π­Ρ‚ΠΈ аспСкты языка, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² самом Π½Π°Ρ‡Π°Π»Π΅ спСцификации языка. Но смысл ΠΈ сСмантику языка Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ; это описаниС Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС страниц, Ρ€Π΅Π΄ΠΊΠΎ достаточно Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ»Π½ΠΎ. ΠžΡ‚ΡΡŽΠ΄Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ дискуссии срСди языковых ΡŽΡ€ΠΈΡΡ‚ΠΎΠ², ΠΈ вся кустарная ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠ½ΠΈΠ³, посвящСнных Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π°Π½ΠΈΡŽ тонкостСй языковых стандартов.

Π•ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ срСдства для описания сСмантики языка, Π½ΠΎ ΠΈΠ·-Π·Π° ΠΈΡ… слоТности ΠΎΠ½ΠΈ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹Ρ…, акадСмичСских языков, Π° Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π³ΠΈΠ³Π°Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ программирования. Один ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… инструмСнтов называСтся опСрационная сСмантика ΠΈ описываСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΡƒ исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Он опрСдСляСт Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ, ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… языков, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ C++, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, описываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рассуТдСния, часто Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… «абстрактной ΠΌΠ°ΡˆΠΈΠ½Ρ‹Β».

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ сСмантику, ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΠ΅ свойство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹, ΠΏΠΎ сути, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Β«Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅Β» Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€.

НС Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ программисты Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ. ΠœΡ‹ всСгда Β«Π΄ΡƒΠΌΠ°Π΅ΠΌΒ», Ρ‡Ρ‚ΠΎ ΠΌΡ‹ пишСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Никто Π½Π΅ сидит Π·Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ, говоря: «О, я просто Π½Π°ΠΏΠΈΡˆΡƒ нСсколько строк ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ происходит.» (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π°Ρ…, Ссли Π±Ρ‹. ) ΠœΡ‹ считаСм, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ пишСм, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΡƒΡ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. ΠœΡ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½Ρ‹, Ссли это Π½Π΅ Ρ‚Π°ΠΊ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΡƒΠΌΠ°Π΅ΠΌ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ пишСм, ΠΈ ΠΌΡ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π΄Π΅Π»Π°Π΅ΠΌ это, запуская ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π² Π½Π°ΡˆΠΈΡ… Π³ΠΎΠ»ΠΎΠ²Π°Ρ…. ΠŸΡ€ΠΎΡΡ‚ΠΎ, ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡƒΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° всСми ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΈ для исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, люди β€” Π½Π΅Ρ‚! Если Π±Ρ‹ ΠΌΡ‹ Π±Ρ‹Π»ΠΈ, Π½Π°ΠΌ Π±Ρ‹ Π½Π΅ понадобились ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹.

Но Π΅ΡΡ‚ΡŒ ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°. Она называСтся Π΄Π΅Π½ΠΎΡ‚Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ сСмантикой ΠΈ основана Π½Π° ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. Π’ Π΄Π΅Π½ΠΎΡ‚Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ сСмантикС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ языковой конструкции описана матСматичСсая интСрпрСтация. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ свойство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ просто Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΡƒ. Π’Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ‚Π΅ΠΎΡ€Π΅ΠΌ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΡ‹, люди, строили матСматичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ тысячи Π»Π΅Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ мноТСство Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Π·Π°Π΄Π°Ρ‡ΠΈ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ сталкиваСмся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, довольно просты, Ссли Π½Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹. (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: для Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°, Π°Π²Ρ‚ΠΎΡ€ Π½Π΅ пытаСтся ΠΎΠ±ΠΈΠ΄Π΅Ρ‚ΡŒ программистов.)

Рассмотрим ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π² Haskell, языкС, Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‰Π΅ΠΌΡƒΡΡ Π΄Π΅Π½ΠΎΡ‚Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ сСмантикС:

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ [1..n] β€” это список Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ n. Ѐункция product ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ всС элСмСнты списка. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, взятоС ΠΈΠ· ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ это с C:

НуТно Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ? (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π°Π²Ρ‚ΠΎΡ€ слСгка схитрил, взяв Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Haskell. На самом Π΄Π΅Π»Π΅, Ρ…ΠΈΡ‚Ρ€ΠΈΡ‚ΡŒ Π±Ρ‹Π»ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, чСстноС описаниС ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π½Π΅ слоТнСС):

Π₯ΠΎΡ€ΠΎΡˆΠΎ, я сразу ΠΏΡ€ΠΈΠ·Π½Π°ΡŽ, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π» Π΄Π΅ΡˆΠ΅Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ! Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ матСматичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΎΠ½ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ: Какова матСматичСская модСль для чтСния символа с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΠΎ сСти? Π”ΠΎΠ»Π³ΠΎΠ΅ врСмя это Π±Ρ‹Π» Π±Ρ‹ Π½Π΅Π»ΠΎΠ²ΠΊΠΈΠΉ вопрос, Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ ΠΊ довольно Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ объяснСниям. Казалось, дСнотационная сСмантика Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа Π²Π°ΠΆΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для написания ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Ρ€Π΅ΡˆΠ°Π΅ΠΌΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ сСмантикой. ΠŸΡ€ΠΎΡ€Ρ‹Π² ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ. Π•ΡƒΠ³Π΅Π½ΠΈΠΎ МодТи ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ эффСкты ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΌΠΎΠ½Π°Π΄Ρ‹. Π­Ρ‚ΠΎ оказалось Π²Π°ΠΆΠ½Ρ‹ΠΌ наблюдСниСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π»ΠΎ Π΄Π΅Π½ΠΎΡ‚Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ сСмантикС Π½ΠΎΠ²ΡƒΡŽ Тизнь ΠΈ сдСлало чисто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ, Π½ΠΎ ΠΈ Π΄Π°Π»ΠΎ Π½ΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π― Π±ΡƒΠ΄Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΌΠΎΠ½Π°Π΄Π°Ρ… ΠΏΠΎΠ·ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ большС ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉΠ½Ρ‹Ρ… инструмСнтов.

Одним ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… прСимущСств наличия матСматичСской ΠΌΠΎΠ΄Π΅Π»ΠΈ для программирования являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ коррСктности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ софт, Π½ΠΎ Π΅ΡΡ‚ΡŒ области программирования, Π³Π΄Π΅ Ρ†Π΅Π½Π° сбоя ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ, ΠΈΠ»ΠΈ Ρ‚Π°ΠΌ, Π³Π΄Π΅ чСловСчСская Тизнь находится ΠΏΠΎΠ΄ ΡƒΠ³Ρ€ΠΎΠ·ΠΎΠΉ. Но Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ написании Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для систСмы здравоохранСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Ρ‚Ρƒ ΠΌΡ‹ΡΠ»ΡŒ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ языка Haskell ΠΈΠ΄ΡƒΡ‚ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°ΠΌΠΈ коррСктности.

ЧистыС ΠΈ ГрязныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ функциями Π² C++ ΠΈΠ»ΠΈ любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ языкС, Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ функциями. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ функция β€” просто ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² значСния.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° языкС программирования: такая функция, имСя Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Ѐункция для получСния ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° числа, вСроятно, ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ само Π½Π° сСбя. Она Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅, ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° вызываСтся с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ числа Π½Π΅ мСняСтся с Ρ„Π°Π·Π°ΠΌΠΈ Π›ΡƒΠ½Ρ‹.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, вычислСниС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° числа Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ эффСкта, Π²Ρ€ΠΎΠ΄Π΅ Π²Ρ‹Π΄Π°Ρ‡ΠΈ вкусного Π½ΠΈΡˆΡ‚ΡΡ‡ΠΊΠ° вашСй собакС. «Ѐункция», которая это Π΄Π΅Π»Π°Π΅Ρ‚, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ смодСлирована матСматичСской Ρ„ΡƒΠ½ΠΊΡ†Π΅ΠΉ.

Π’ языках программирования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всСгда Π΄Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ чистыми. Π’ чистом Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ языкС, Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Haskell, всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ чисты. Благодаря этому ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π΅Π½ΠΎΡ‚Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ сСмантику этих языков ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ. Π§Ρ‚ΠΎ касаСтся Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, Ρ‚ΠΎ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ сСбя чистым подмноТСством, ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»ΡΡ‚ΡŒ ΠΎ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктах ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. ПозТС ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠ½Π°Π΄Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π²ΠΈΠ΄Ρ‹ эффСктов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ тСряСм, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡΡΡŒ матСматичСскими функциями.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΈΠΏΠΎΠ²

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ β€” это мноТСства, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вСсьма экзотичСскиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹. НапримСр, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ соотвСтствуСт пустому мноТСству? НСт, это Π½Π΅ void Π² C++, хотя этот Ρ‚ΠΈΠΏ называСтся Void Π² Haskell. Π­Ρ‚ΠΎ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ Π½ΠΈ ΠΎΠ΄Π½ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Void, Π½ΠΎ Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смоТСтС Π΅Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ, Π²Π°ΠΌ придСтся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Void, Π° Π΅Π³ΠΎ Ρ‚Π°ΠΌ просто Π½Π΅Ρ‚. Π§Ρ‚ΠΎ касаСтся Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ эта функция ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ β€” Π½Π΅ сущСствуСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Она ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ любой Ρ‚ΠΈΠΏ (хотя этого Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ случится, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π°). Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, это функция, которая ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Π° ΠΏΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ. Π₯аскСллСры Π½Π°Π·Π²Π°Π»ΠΈ Π΅Π΅:

(ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π½Π° Π‘++ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ: Π² Π‘++ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΅ΡΡ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.)

(ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ a β€” это пСрСмСнная Ρ‚ΠΈΠΏΠ°, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ.) Π­Ρ‚ΠΎ имя Π½Π΅ случайно. БущСствуСт Π±ΠΎΠ»Π΅Π΅ глубокая интСрпрСтация Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΎΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠšΠ°Ρ€Ρ€ΠΈ-Π“ΠΎΠ²Π°Ρ€Π΄Π°. Π’ΠΈΠΏ Void прСдставляСт Π½Π΅ΠΏΡ€Π°Π²Π΄ΠΈΠ²ΠΎΡΡ‚ΡŒ, Π° функция absurd β€” ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΠ· лоТности слСдуСт Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, ΠΊΠ°ΠΊ Π² латинской Ρ„Ρ€Π°Π·Π΅ Β«ex falso sequitur quodlibet.Β» (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: ΠΈΠ· лоТности слСдуСт Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ.)

Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ Ρ‚ΠΈΠΏ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ одноэлСмСнтному мноТСству. Π­Ρ‚ΠΎ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ просто Β«Π΅ΡΡ‚ΡŒΒ». Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ сразу Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ, Π½ΠΎ это void Π² C++. ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ функциях ΠΎΡ‚ ΠΈ Π² этот Ρ‚ΠΈΠΏ. Ѐункция ΠΈΠ· void всСгда ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π°. Если это чистая функция, ΠΎΠ½Π° всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ эта функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Β«Π½ΠΈΡ‡Π΅Π³ΠΎΒ», Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ, функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Β«Π½ΠΈΡ‡Π΅Π³ΠΎΒ» Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏ Β«Π½ΠΈΡ‡Π΅Π³ΠΎΒ». Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ эта функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚? ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ, ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ СдинствСнный экзСмпляр, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ явно Π΅Π³ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅. Π’ Haskell, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΡ‚ΡŒ символ этого значСния: пустая ΠΏΠ°Ρ€Π° скобок (). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ· Π·Π° Π·Π°Π±Π°Π²Π½ΠΎΠ³ΠΎ совпадСния (ΠΈΠ»ΠΈ Π½Π΅ совпадСния?), Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ void выглядит ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΈ Π² C++ ΠΈ Π² Haskell. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠ·-Π·Π° любви Π₯аскСля ΠΊ лаконичности, Ρ‚ΠΎΡ‚ ΠΆΠ΅ символ () ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ для Ρ‚ΠΈΠΏΠ°, конструктора ΠΈ СдинствСнного значСния, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ одноэлСмСнтному мноТСству. Π’ΠΎΡ‚ эта функция Π² Haskell:

ΠŸΠ΅Ρ€Π²Π°Ρ строка ΠΎΠ±ΡŒΡΠ²Π»ΡΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ f44 ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏ (), Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ Β«Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Β», Π² Ρ‚ΠΈΠΏ Integer. Вторая строка опрСдСляСт, Ρ‡Ρ‚ΠΎ f44 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½-ΠΌΠ°Ρ‚Ρ‡ΠΈΠ½Π³Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ СдинствСнный конструктор для Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ () Π² число 44. Π’Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, прСдоставляя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ():

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ каТдая функция ΠΎΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ эквивалСнтна Π²Ρ‹Π±ΠΎΡ€Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта ΠΈΠ· Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (здСсь, выбираСтся Integer 44). На самом Π΄Π΅Π»Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ f44, ΠΊΠ°ΠΊ ΠΈΠ½ΠΎΠΌ прСдставлСнии числа 44. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ прямоС ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ элСмСнтов мноТСства Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (стрСлку). Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π² Π½Π΅ΠΊΠΈΠΉ Ρ‚ΠΈΠΏ А находятся Π²ΠΎ Π²Π·Π°ΠΈΠΌΠ½ΠΎ-ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΌ соотвСтствии с элСмСнтами мноТСства A.

А ΠΊΠ°ΠΊ насчСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… void, ΠΈΠ»ΠΈ, Π² Haskell, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ? Π’ C++ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов, Π½ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” Π½Π΅ настоящиС, Π² матСматичСском смыслС этого слова. Чистая функция, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚: ΠΎΠ½Π° отбрасываСт свой Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈ, функция ΠΈΠ· мноТСства А Π² одноэлСмСнтноС мноТСство ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π² СдинствСнный элСмСнт этого мноТСства. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ А Π΅ΡΡ‚ΡŒ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½Π° такая функция. Π’ΠΎΡ‚ ΠΎΠ½Π° для Integer:

Π’Ρ‹ Π΄Π°Π΅Ρ‚Π΅ Π΅ΠΉ любоС Ρ†Π΅Π»ΠΎΠ΅ число, ΠΈ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. БлСдуя Π΄ΡƒΡ…Ρƒ лаконичности, Haskell позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ символ подчСркивания Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отбрасываСтся. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Код Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ зависит ΠΎΡ‚ значСния, Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ для любого Ρ‚ΠΈΠΏΠ° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ парамСтричСски ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ сСмСйство Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ΄Π½ΠΈΠΌ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ вмСсто ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Как Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· любого Ρ‚ΠΈΠΏΠ° Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ unit:

Π’ C++ Π²Ρ‹ Π±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π΅Π΅ Ρ‚Π°ΠΊ:

(ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π΄Π°Π±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ компилятору ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² noop, Π»ΡƒΡ‡ΡˆΠ΅ Ρ‚Π°ΠΊ):

Π”Π°Π»Π΅Π΅ Π² Β«Ρ‚ΠΈΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ²Β» Π½Π°Π±ΠΎΡ€ ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов. Π’ C++ ΠΎΠ½ называСтся bool, Π° Π² Haskell, Ρ‡Ρ‚ΠΎ Π½Π΅ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Bool. Π Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² C++ bool являСтся встроСнным Ρ‚ΠΈΠΏΠΎΠΌ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² Haskell ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

(Π§ΠΈΡ‚Π°Ρ‚ΡŒ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ стоит Ρ‚Π°ΠΊ: Bool ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ True ΠΈΠ»ΠΈ False.) Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ этот Ρ‚ΠΈΠΏ ΠΈ Π² C++:

Но C++ пСрСчислСниС Π½Π° самом Π΄Π΅Π»Π΅ Ρ†Π΅Π»ΠΎΠ΅ число. МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ C++11 Β«class enumΒ», Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ класса: bool::true ΠΈΠ»ΠΈ bool::false, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎ нСобходимости Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚.

ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Bool просто Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Π΄Π²Π° значСния ΠΈΠ· Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΎΠ΄Π½ΠΎ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ True ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ β€” False.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *