Π Π°Π·Π½ΠΎΠ΅

БтатичСская ΠΈ динамичСская типизация: Π›ΠΈΠΊΠ±Π΅Π· ΠΏΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² языках программирования

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠ²Π΅Ρ€ΠΆΠ΅Π½Ρ†Ρ‹ статичСской ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΉΠΌΡƒΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. И TypeScript ΠΈΠΌ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚

Когда ΠΌΡ‹ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Π² школС ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‡Ρ‚Π°Π»ΠΈ ΡΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±Π°ΠΌΠΈ, ΠΌΡ‹ Π΄ΡƒΠΌΠ°Π»ΠΈ ΠΊΠ°ΠΊ сдСлаСм вмСстС ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡˆΡ‚ΡƒΠΊΠΎΠ²ΠΈΠ½Ρƒ β€” ΠΈΠ³Ρ€Ρƒ ΠΈΠ»ΠΈ супСр-ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Π― Π½Π°Ρ‡Π°Π» ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ»ΡŽΡΡ‹ ΠΈ C#, ΠΎΠ½ β€” JavaScript. Π—Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ ΡˆΠΊΠΎΠ»Ρƒ, ΠΎΡ‚ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Π² ΡƒΠ½ΠΈΠ²Π΅Ρ€Π°Ρ…, отслуТили Π² Π°Ρ€ΠΌΠΈΠΈ, ΡƒΡΡ‚Ρ€ΠΎΠΈΠ»ΠΈΡΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹. Нас потаскало ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Ρ‚Π°ΠΌ ΠΈ Ρ‚ΡƒΡ‚, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΎΠ±Π° ΠΎΡ‚ Π½Π΅Π΅ подустали, вспомнили с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ.

Π‘ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ ΡƒΠΆΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€Ρ‹ΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±Π°ΠΌΠΈ, ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ β€” Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ Π²ΠΈΠ΄Π΅ΠΎΠΈΠ³Ρ€Ρƒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ Π±Ρ‹Π» чистый Ρ„Ρ€ΠΎΠ½Ρ‚, Π° я фулстСк, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ для нас стал Π±Ρ€Π°ΡƒΠ·Π΅Ρ€. РаньшС я Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» Ρ„Ρ€ΠΎΠ½Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° TypeScript, ΠΈ ΠΌΡ‹ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π»ΠΈ, Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, TS β€” всСго-лишь надмноТСство JavaScript. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Π΅Π³ΠΎ ΠΈ всС ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ Π³Π»Π°Π΄ΠΊΠΎ. Как Π±Ρ‹ Π½Π΅ Ρ‚Π°ΠΊ. Когда ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с нСвСроятной Π±Π΅Π·Π΄Π½ΠΎΠΉ нСпонимания Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.


Π’ΠΎΡ‚ я ΡƒΠ²ΠΈΠ΄Π΅Π» Π·Π°Π΄Π°Ρ‡Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ. Π― Ρ‚Π°ΠΊΠΎΠΉ β€” Π°Π³Π°, Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ Β«ΠΈΠ³Ρ€Π°Β», Ρ‚ΠΈΠΏ Β«ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒΒ», Ρ‚ΠΈΠΏ Β«Π²Π΅Ρ‰ΡŒΒ», Ρ‚ΠΈΠΏ Β«ΠΊΠ°Ρ€Ρ‚Π°Β», Ρ‚ΠΈΠΏ «локация». Π― ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ вмСстС, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽ ΠΈΡ…, ΡΠΎΠ±ΠΈΡ€Π°ΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ мСня ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ», я всС сдСлал ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π”Π°Π»ΡŒΡˆΠ΅ я Π½Π°Ρ‡ΠΈΠ½Π°ΡŽ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эти Ρ‚ΠΈΠΏΡ‹. Из-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ, ΠΌΠ½Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. IDE ΠΌΠ½Π΅ подсказываСт ΠΈ провСряСт Π½Π° ошибки. Если ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ собираСтся β€” скорСС всСго ΠΎΠ½ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π― ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» силы Π½Π° описания Ρ‚ΠΈΠΏΠΎΠ², ΠΈ это принСсло ΠΏΠΎΠ»ΡŒΠ·Ρƒ. Π’ΠΎΡ‚ ΠΌΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

Мой Π΄Ρ€ΡƒΠ³ Ρ…ΠΎΡ‚Π΅Π» Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ β€” сразу ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Π½Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹. Он Π½Π΅ Π±Ρ‹Π» Π³ΠΎΡ‚ΠΎΠ² ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π² Π²ΠΈΠ΄Π΅ сСмСйства Ρ‚ΠΈΠΏΠΎΠ². НС Ρ…ΠΎΡ‚Π΅Π» ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅Π΅, Π½Π΅ Π²ΠΈΠ΄Π΅Π» Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ классов, Ρ‚ΠΈΠΏΠΎΠ², Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² ΠΈΠ»ΠΈ Ρ‡Π΅Π³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅ Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ€ΠΎΠ΄Π΅. МнС это казалось просто нСмыслимым. ΠœΡ‹ ΠΎΠ±Π° Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π°Π²Ρ‹, просто ΠΏΡ€Π°Π²ΠΎΡ‚Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· нас ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π»Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ.

Π‘Π΅Ρ€ΡŒΠ΅Π·Π½ΠΎ, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ часами, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» ΠΎ своСм, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках. И вСдь Π½Π΅ спишСшь Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΌΠΎΠ·Π³ΠΈ Π½Π΅ Π³ΠΈΠ±ΠΊΠΈΠ΅. Π‘ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄ я Π±Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΅Ρ…Π°Π» Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΡ€ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ, ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π‘ΠΎΠ»ΡŒΡˆΠ΅ Ρ‚ΠΎΠ³ΠΎ, я ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» достаточно ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ JS, Π° ΠΎΠ½ β€” Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков.

Но тСхнология, которая стала для Ρ€Π°Π·Ρ€Π°Π±ΠΎΠ² ΠΏΠ΅Ρ€Π²ΠΎΠΉ Β«Π±ΠΎΠ΅Π²ΠΎΠΉΒ», опрСдСляСт ΠΈΡ… Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ сильно, Ρ‡Ρ‚ΠΎ Π΄Π²Π° взрослых ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° просто Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ. Π—Π° Π³ΠΎΠ΄Ρ‹ изучСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ нашС Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ слишком ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π·Π°Π΄Π°Ρ‡ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ вмСстС.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ ΠΎΡ‚ ΠΈΠ΄Π΅ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π‘Ρ€Π°Π·Ρƒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ ΠΌΡ‹ΡΠ»ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² нас Π΄Π²ΠΎΠΈΡ…. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π½ΠΎ я Π²ΠΈΠ΄Π΅Π» Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… людСй Π² индустрии.

Π£ статичСской ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Π°Ρ нСпримиримая Ρ€Π°Π·Π½ΠΈΡ†Π°

Мой ΠΊΠΎΠ΄ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° вопрос «Как с этим Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΒ», Π° ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΠ², ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΡˆΠΈΡ… ΠΊ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” «Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Β». Оба ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΎ Π½Π° Тизнь, ΠΈ Π΅ΡΡ‚ΡŒ инструмСнты для ΠΎΠ±ΠΎΠΈΡ…, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ Π²ΠΎ Π³Π»Π°Π²Π΅ ΡƒΠ³Π»Π°.

БтатичСская Ρ…ΠΎΡ€ΠΎΡˆΠ° для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³ΠΎΠ΄Π°ΠΌΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ сотни Ρ€Π°Π·Ρ€Π°Π±ΠΎΠ², Π° динамичСская β€” для ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, для Π·Π°Π΄Π°Ρ‡, Π³Π΄Π΅ часто Π½ΡƒΠΆΠ΅Π½ write-only ΠΊΠΎΠ΄. Π‘ динамичСской Ρ‚Ρ‹ экономишь врСмя ΠΈ силы Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π° со статичСской β€” Π² ΠΊΠΎΠ½Ρ†Π΅.

ИдСя ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²ΠΎ Π³Π»Π°Π²Ρƒ Ρ‚ΠΈΠΏΡ‹ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ повлияла Π½Π° ΠΌΠΎΠ΅ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

Π’Ρ‹Π±Ρ€Π°Π² Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡƒΡ‚ΠΈ C#, я ΠΏΡ€ΠΈΠ±ΠΈΠ» гвоздями ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊ своСму ΠΌΠΈΡ€ΠΎΠ²ΠΎΠ·Π·Ρ€Π΅Π½ΠΈΡŽ, ΠΎΡ‚ Ρ‡Π΅Π³ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈ ΡΡ‚Ρ€Π°Π΄Π°ΡŽ. Π£Π²ΠΈΠ΄Π΅Π² Π»ΡŽΠ±ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ, я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΈΡ… взаимодСйствия. Когда я Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽ, ΠΊΠ°ΠΊΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ½ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ ΠΊΠ°ΠΊΠΈΠΌΠΈ взаимодСйствуСт со своим ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π― Π΄Π°ΠΆΠ΅ Π½Π΅ помню, ΠΊΠ°ΠΊ я ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠ» ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π·Π°Π΄Π°Ρ‡ Ρ€Π°Π½ΡŒΡˆΠ΅.

ВсС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Java β€” это ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ использованию Ρ‚ΠΈΠΏΠΎΠ². .NET CLR β€” Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ C# β€” построСн Π½Π° Ρ‚ΠΈΠΏΠ°Ρ… ΠΈ для Ρ‚ΠΈΠΏΠΎΠ². CтатичСская типизация Π»Π΅ΠΆΠΈΡ‚ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (ΠΏΡ€ΠΈΠ²Π΅Ρ‚, классы ΠΈΠ· JS, я Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹). ΠšΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ООП ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² пСстрят ΠΊΠ΅ΠΉΠ²ΠΎΡ€Π΄ΠΎΠΌ Interface, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ бСссмыслСннСн Π² динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС.

Π‘Π°ΠΌΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ β€” ΡˆΡ‚ΡƒΠΊΠ° кросс-языковая, Π½ΠΎ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ½Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ «состояниС» Π² динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС? А Π±ΠΈΠ»Π΄Π΅Ρ€? Π­Ρ‚ΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ Π½Π΅ ΠΏΡ€ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, ΠΎΠ½ΠΈ ΠΏΡ€ΠΎ Ρ‚ΠΈΠΏΡ‹. Π’ΠΈΠΏΡ‹ ΠΈ ООП связаны Π½Π΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½ΠΎ.

НСльзя ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ свою бизнСс Π»ΠΎΠ³ΠΈΠΊΡƒ, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Ρ‚ΠΈΠΏΠ°Ρ…, Π½ΠΎ ΠΏΡ€ΠΈ этом Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎ Π½ΠΈΡ… Π½Π΅ Π·Π½Π°Ρ‚ΡŒ Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ИмСнно поэтому Π΅ΡΡ‚ΡŒ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ свой ΠΊΠΎΠ΄ Π½Π΅Π²ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠΌΡ‹ΠΌ количСством ΡŽΠ½ΠΈΡ‚ тСстов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Π½Π° отсутствиС type errors.

ΠœΡ‹ всС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ β€” иллюзия. ВСсты ΠΏΠΈΡˆΡƒΡ‚ Ρ€ΡƒΠΊΠ°ΠΌΠΈ, ΠΎΠ½ΠΈ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΌΠ΅Π½Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹, Ρ‡Π΅ΠΌ встроСнная Π² язык систСма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ².

Π­Ρ‚ΠΎ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ (Π½Π° самом Π΄Π΅Π»Π΅ я ΠΈ ΠΏΡ€Π°Π²Π΄Π° Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹). Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΡ… использовании, Ρ‚Π΅Π±Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ООП, ΠΊΠ°ΠΊ Π³Π»Π°Π²Π΅Π½ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹. ВсС Π²ΠΎΡ‚ это Сдинство Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Π½ΠΈΠΌΠΈ β€” это для ΠΏΠ°Ρ€Π½Π΅ΠΉ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ статичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°.

Π Π°Π·Ρ€Π°Π±Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я ΠΈΠΌΠ΅Π» Π΄Π΅Π»ΠΎ, Π½Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ мСняСт ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, ΠΈ ΠΏΠΈΡˆΡƒΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ ΠΈ Π² динамичСских языках, добавляя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ². Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ β€” это Π² ΠΊΠΎΡ€Π½Π΅ Π½Π΅Π²Π΅Ρ€Π½ΠΎ. И Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ сильно это Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² кСйсС с соврСмСнным Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ΠΎΠΌ.

Π—Π½Π°ΡŽ, ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€ΠΎΠ½Ρ‚ΠΎΠ² β€” табуированная Ρ‚Π΅ΠΌΠ°. ΠžΠ΄Π½Π°ΠΆΠ΄Ρ‹ ΠΌΡ‹ с Π΄Ρ€ΡƒΠ³Π°Π½ΠΎΠΌ Π·Π°Ρ„ΠΈΠ³Π°Ρ‡ΠΈΠ»ΠΈ ИИ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€ΠΎΠ»Π»ΠΈΡ‚ всСх Π² Ρ‚Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π΅, ΠΈ Π½Π° Π½Π΅Π΅ сагрился Π‘Ρ€Π΅Π½Π΄Π°Π½ Айк. Π‘Π΅Ρ€ΡŒΠ΅Π·Π½ΠΎ, ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ дТаваскрипта Π²ΠΎΠ΅Π²Π°Π» с нашСй Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒΡŽ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ….

Π­Ρ‚ΠΈ рСбята ΠΏΠΎ Π½Π΅Π²Π΅Π΄ΠΎΠΌΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ просто Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΆΠΈΡ‚ΡŒ Π² ΠΌΠΈΡ€Π΅, Π³Π΄Π΅ ΠΈΡ… Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ содСрТит ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ… ΠΈΠ· Π½ΠΈΡ…, ΠΊΡ‚ΠΎ суСтся Π² ΠΌΠΎΠΉ definitely-typed ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΈ Π½Π°Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Π°ΠΌ свои any порядки.

ΠœΡ‹ Π±Ρ‹ Ρ‚Π°ΠΊ ΠΈ ΠΆΠΈΠ»ΠΈ Π² своих ΠΌΠΈΡ€ΠΊΠ°Ρ…, Π½ΠΎ TypeScript нас столкнул

Π’ΠΎΡ‚ я ΠΏΠΈΡˆΡƒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π° счСт Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ я Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ я Π·Π°Π΄ΡƒΠΌΠ°Π». И я осознанно Π½Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽ всС кСйсы Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования этого ΠΊΠΎΠ΄Π° (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ типизация это ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚). Но Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ JS-Π½ΠΈΠΊ, Π±Π΅Ρ€Π΅Ρ‚ этот ΠΌΠΎΠΉ Ρ‚ΠΈΠΏ, Π·Π°Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² any, ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡƒΠ»ΠΎΠ²ΠΈΠΌΡ‹ΠΌ Π±Π°Π³Π°ΠΌ.

JavaScript-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡƒΠ±Π΅ΠΆΠ΄Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Вайпскрипт β€” это всС Ρ‚ΠΎΡ‚ ΠΆΠ΅ JS, Π½ΠΎ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ², Ссли ΠΎΠ½Π° ΠΈΠΌ Π½ΡƒΠΆΠ½Π°. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ. Вайпскрипт Π² ΡΠΎΡ‚Π½ΡŽ Ρ€Π°Π· ΠΌΠΎΡ‰Π½Π΅Π΅, Π° ΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° Π΅Π³ΠΎ возмоТностСй.

Π‘Π°ΠΌΡ‹ΠΉ Ρ€Π°Π·Ρ€ΡƒΡˆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” TypeScript лишь надмноТСство JS. Но Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ‚Ρ‹ Π½Π΅ моТСшь Π½Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Вайпскрипт, ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ язык, Π΄Π°ΠΆΠ΅ Ссли Ρ‚Ρ‹ Ρ‡Π΅Ρ€Ρ‚ΠΎΠ² ΠΊΠΎΡ€ΠΎΠ»ΡŒ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅Ρ€ΠΎΠ². ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Π½ΡƒΠΆΠ΅Π½ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” статичСский, Π° Π½Π΅ динамичСский.

Π“Π»Π°Π²Π½Ρ‹ΠΉ плюс статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” гарантия. Если Ρ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΡˆΡŒ Π΅Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅, Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π½Π΅Ρ‚, Ρ‚Ρ‹ просто ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» врСмя ΠΈ силы Π½Π° описаниС ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ², Π° Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ».

Многим каТСтся, Ρ‡Ρ‚ΠΎ TypeScript β€” это компромисс систСм Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ JS ΠΈ Java. Никакой ΠΎΠ½ Π½Π΅ компромисс, Π΅Π³ΠΎ систСма Ρ‚ΠΈΠΏΠΎΠ² просто особСнная.

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

JavaScript, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ видится, ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ инструмСнт, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π½Π΅ выдСляя ΠΏΡ€ΠΈ этом лишниС абстракции. Π‘Π°ΠΌΡ‹ΠΉ Π²ΠΎΠΏΠΈΡŽΡ‰ΠΈΠΉ кСйс Π² Π½Π΅ΠΌ β€” ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Ice factory. Π­Ρ‚ΠΎΠΉ ΡˆΡ‚ΡƒΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ€ΠΌΠ»ΠΈΠ²Π°Ρ‚ΡŒ свои инстансы, ΠΈ ΠΎΠ½Π° ΠΎΠ±ΠΌΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ… Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ-ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Если я ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ этой Ρ„Π°Π±Ρ€ΠΈΠΊΠΎΠΉ свой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠ½Π° отдаст ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· свойств, я ΠΏΠΎΠ»ΡƒΡ‡Ρƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΎΡΡ‚ΠΎ, WAT?!?

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Π²ΠΎΠ·Π½ΠΈΠΊ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ„Ρ€ΠΎΠ½Ρ‚Ρ‹ Π³Π΄Π΅-Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ ΠΏΡ€ΠΎ ΠΊΡ€ΡƒΡ‚ΡƒΡŽ ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π·Π°Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ это Π² свой язык, Π½ΠΈΠΊΠΎΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ ВайпскриптС я ΠΌΠΎΠ³Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ, Π½ΠΎ с ΠΊΠΎΠΌΠΏΠ°ΠΉΠ» Ρ‚Π°ΠΉΠΌ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΎΠΌ ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ, ΠΈ Π±Π΅Π· всяких ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈ это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ чистоС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π‘Π΅Ρ€ΠΈ F#, Haskell, OCaml, ΠšΠ»ΠΎΠΆΡƒ, ReasonML β€” Ρ‚Π°ΠΌ ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ. Но я боюсь, Ρ‡Ρ‚ΠΎ Ссли Π΄Π°Ρ‚ΡŒ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅Ρ€Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ язык, ΠΎΠ½ Ρ‚ΡƒΡ‚ ΠΆΠ΅ Π½Π°Ρ‡Π½Π΅Ρ‚ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ сдСлаСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° JS.

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” ΠΏΡƒΡ‚ΡŒ Π±Π΅Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°. ВсС компромиссныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ иллюзию компромисса. Π’Ρ‹ Π»ΠΈΠ±ΠΎ ΡΡ‚Π°Π²ΠΈΡˆΡŒ Π²ΠΎ Π³Π»Π°Π²Π΅ ΡƒΠ³Π»Π° Ρ‚ΠΈΠΏΡ‹, Π»ΠΈΠ±ΠΎ Π½Π΅Ρ‚. НС знаю, ΠΊΠ°ΠΊ Π±Ρ‹ всС слоТилось, Π½Π°Ρ‡Π½ΠΈ я ΡƒΡ‡ΠΈΡ‚ΡŒ C# ΠΈ JavaScript ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ. Но сСйчас я Ρ‚Π°ΠΊ ΠΊΡ€Π΅ΠΏΠΊΠΎ ΠΏΡ€ΠΈΠ±ΠΈΡ‚ ΠΊ своСму ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π²ΠΈΠΆΡƒ ΠΈ Π½Π΅ Ρ…ΠΎΡ‡Ρƒ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ плюсов динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. Они Π΅ΡΡ‚ΡŒ, Π½ΠΎ Π²Π½Π΅ поля ΠΌΠΎΠ΅Π³ΠΎ зрСния, ΠΈ всС Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅ остаСтся β€” Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ… Π³Π»Π°Π·Π°, ΠΊΠ°ΠΊ Π½Π° Π»ΡŽΠ±Ρ‹Π΅ Ρ‡ΡƒΠΆΠ΄Ρ‹Π΅ ΠΌΠ½Π΅ проявлСния ΠΌΠΈΡ€Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ приходится ΠΆΠΈΡ‚ΡŒ. Понимаю, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΡ€Π°Π², Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ½Π΅ Π½Π°Π΄ΠΎ здСсь ΠΈ сСйчас, ΠΈ ΠΌΠ΅Ρ‚Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ полюсами Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° Π½Π΅Ρ‚.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π½Π΅ Ρ…ΠΎΡ‡Ρƒ ΠΈΡΠΊΠ°Ρ‚ΡŒ компромиссов, Π° Π³ΠΎΠ²ΠΎΡ€ΡŽ прямо. Если Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, Π½Π°Ρ‡ΠΈΠ½Π°ΠΉΡ‚Π΅ со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

БтатичСская ΠΈ динамичСская типизация. ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования

БтатичСская ΠΈ динамичСская типизация

Π₯отя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, здСсь прСдставлСны Π΄Π²Π° Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

[x]. ДинамичСская типизация: ΠΆΠ΄Π°Ρ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

[x]. БтатичСская типизация: с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ» ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎ исходному тСксту, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π»ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. БистСма выполняСтся, Ссли ΠΏΡ€Π°Π²ΠΈΠ»Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ отсутствиС ошибок.

Π­Ρ‚ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΠΌΡ‹: ΠΏΡ€ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² происходит Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы (динамичСски), Π° ΠΏΡ€ΠΈ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° выполняСтся Π½Π°Π΄ тСкстом статичСски (Π΄ΠΎ выполнСния).

Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ (typed/untyped) Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ вмСсто статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ (statically/dynamically typed). Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π»ΡŽΠ±Ρ‹Ρ… Π½Π΅Π΄ΠΎΡ€Π°Π·ΡƒΠΌΠ΅Π½ΠΈΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ.

БтатичСская типизация ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Π²ΠΎΠ·Π»Π°Π³Π°Π΅ΠΌΡƒΡŽ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π° компилятор. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΈΠΌΠ΅Π΅ΠΌ простоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык

ОО-язык статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ссли ΠΎΠ½ поставляСтся с Π½Π°Π±ΠΎΡ€ΠΎΠΌ согласованных ΠΏΡ€Π°Π²ΠΈΠ», провСряСмых компилятором, соблюдСниС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ систСмы Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ Ρ‚ΠΈΠΏΠΎΠ².

Π’ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ встрСчаСтся Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «ΡΠΈΠ»ΡŒΠ½Π°Ρ типизация» (strong). Он соотвСтствуСт ΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ опрСдСлСния, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ отсутствия Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ². Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΈ слабыС (weak) Ρ„ΠΎΡ€ΠΌΡ‹ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ»Π° ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ, Π½Π΅ ликвидируя ΠΈΡ… Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Π’ этом смыслС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ОО-языки ΡΠ²Π»ΡΡŽΡ‚ΡΡ статичСски слабо Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ Π·Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ.

Π’ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках, извСстных ΠΊΠ°ΠΊ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ объявлСния Ρ‚ΠΈΠΏΠΎΠ², Π° ΠΊ сущностям Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ выполнСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ Π»ΡŽΠ±Ρ‹Π΅ значСния. БтатичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² Π² Π½ΠΈΡ… Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Π½Π° страничкС

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π³Π»Π°Π²Π° >

Umka. Π–ΠΈΠ·Π½ΡŒ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² скриптовом языкС / Π₯Π°Π±Ρ€

Π’ своё врСмя посты Π½Π° Π₯Π°Π±Ρ€Π΅ ΠΈ Reddit ΠΎ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ скриптовом языкС Umka Π²Ρ‹Π·Π²Π°Π»ΠΈ вСсьма Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π΄ΠΈΡΠΊΡƒΡΡΠΈΡŽ.

ΠŸΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΏΠΎΠ»Ρ‚ΠΎΡ€Π° мСсяца ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ ΠΌΠ½Π΅ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠΉ, Ρ€Π°Π·Π²ΠΈΡ‚ΡŒ язык ΠΈ Π΄Π°Ρ‚ΡŒ Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π²Ρ€Π°Π·ΡƒΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° вопросы ΠΏΡƒΠ±Π»ΠΈΠΊΠΈ. Как ΠΈ слСдовало ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎΠ΅ испытаниС Π²Ρ‹ΠΏΠ°Π»ΠΎ Π½Π° долю самой ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. Она ΠΎΡΡ‚Π°Π»Π°ΡΡŒ Π² основС языка, Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° компромиссов β€” Π² частности, для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ сборки мусора.

Появились ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π·Π°ΠΌΠ΅Ρ€Ρ‹ быстродСйствия ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π² сравнСнии с Wren ΠΈ Python β€” ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π²Π½ΡƒΡˆΠ°ΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΌ. НаконСц, родился Π±ΠΎΠ»Π΅Π΅ рСалистичный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Umka ΠΏΠΎ Π΅Π³ΠΎ основному Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Ρ‚. Π΅. ΠΊΠ°ΠΊ встраиваСмого языка.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Π²ΠΎ врСмя исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (RTTI). ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ начинался с Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΡ‚ хранСния Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ исполнСнии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Вся информация ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Ρ‚Π΅Ρ€ΡΠ»Π°ΡΡŒ послС компиляции Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, статичСская типизация позволяСт это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π° Π·Π°ΠΎΠ΄Π½ΠΎ избавляСт ΠΎΡ‚ странных Ρ‚Ρ€ΡŽΠΊΠΎΠ² Π²Ρ€ΠΎΠ΄Π΅ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² NaN, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ создатСли JavaScript ΠΈ Wren Ρ€Π°Π΄ΠΈ увСличСния быстродСйствия. Однако ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈΡΡŒ Π΄Π²Π° случая, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ RTTI:

  • ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ интСрфСйсного Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ β€” прямой Π°Π½Π°Π»ΠΎΠ³ «утвСрТдСния Ρ‚ΠΈΠΏΠ°Β» (type assertion) Π² Go, Π° Ρ‚Π°ΠΊΠΆΠ΅, отчасти, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° dynamic_cast Π² C++. Оно трСбуСтся ΠΈ ΠΏΡ€ΠΈ сборкС мусора, содСрТащСгося Π² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… ΠΊ интСрфСйсному Ρ‚ΠΈΠΏΡƒ.
  • Π‘Π±ΠΎΡ€ΠΊΠ° мусора, связанного с динамичСскими структурами Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€ΠΎΠ΄Π΅ списков ΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π².

БыстродСйствиС. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Umka Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ прСдназначался для установлСния Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ² быстродСйствия. Π‘Π΅Π·Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠΈ ΠΊ ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python Π½Π°Π²ΠΎΠ΄ΠΈΠ»ΠΎ Π½Π° ΠΌΡ‹ΡΠ»ΡŒ, Ρ‡Ρ‚ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ вовсС Π½Π΅ Ρ‚ΠΎ качСство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ ΠΎΡ‚ скриптового языка. Однако успСх LuaJIT ΠΈ активная Ρ€Π΅ΠΊΠ»Π°ΠΌΠ° Wren заставили Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ. ПослС этого мСня ΡƒΠΆΠ΅ Π½Π΅ удивляло, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎ Umka Π²Ρ‹Π·Π²Π°Π»ΠΈ вопросы ΠΎ быстродСйствии, хотя ΠΌΠ½Π΅ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ интСрСсно, ΠΎΡ‚ ΠΊΠΎΠ³ΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ исходит спрос Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. ΠžΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ³Ρ€?

Пока ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ тСстов Π½Π΅ Π³ΠΎΡ‚ΠΎΠ², я ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ лишь ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ Π·Π°ΠΌΠ΅Ρ€ΠΎΠ². Π’ числСнных Π·Π°Π΄Π°Ρ‡Π°Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π΄Π°Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ‚Π΅Π») Umka Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚ Python, Π° Ссли Π² Π·Π°Π΄Π°Ρ‡Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†ΠΈΠΊΠ» for, Ρ‚ΠΎ Umka Π΄Π°Ρ‘Ρ‚ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π΄Π°ΠΆΠ΅ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Wren, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позиционируСтся Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ‡ΡƒΡ‚ΡŒ Π»ΠΈ Π½Π΅ ΠΊΠ°ΠΊ самый быстрый скриптовый язык послС LuaJIT. Наглядным ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ слуТит ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†:

Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† 400 x 400 (AMD A4-3300M @ 1.9 GHz, Windows 7)

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ Umka здСсь сыграла ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… статичСских массивов ΠΈ Π±ΠΎΠ»Π΅Π΅ низкоуровнСвая организация Ρ†ΠΈΠΊΠ»Π° for, Π½Π΅ содСрТащая Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π—Π°Π΄Π°Ρ‡ΠΈ с интСнсивной сборкой мусора (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, созданиС ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²) Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ сомнСний ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ эквивалСнтности сравниваСмых Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². НапримСр, извСстная рСализация Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Π½Π° Python Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ содСрТимоС ΡƒΠ·Π»ΠΎΠ² Ρ€ΠΎΡΡΡ‹ΠΏΡŒΡŽ ΠΈ выглядит Ρ‚Π°ΠΊ, Π±ΡƒΠ΄Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ допускаСт Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ всСго Π΄Π΅Ρ€Π΅Π²Π° Π½Π° стСкС β€” Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Π΅Π· использования ΠΊΡƒΡ‡ΠΈ ΠΈ сборки мусора. Однако ΠΎΠ½Π°, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ воспроизвСдСна Π½Π° Umka. Если ΠΆΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΡƒΠ·Π»Ρ‹ Π² Π²ΠΈΠ΄Π΅ структур, ΠΊΠ°ΠΊ Π² Umka (Π° Π·Π° Π½Π΅ΠΈΠΌΠ΅Π½ΠΈΠ΅ΠΌ структур приходится Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), Ρ‚ΠΎ быстродСйствиС Python сразу ΠΆΠ΅ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π² 3-4 Ρ€Π°Π·Π°. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° Umka Π²Π΄Π²ΠΎΠ΅ отстаёт ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π²Π΄Π²ΠΎΠ΅ ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΡƒΡŽ. КакоС сравнСниС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π΅Π΅ β€” Π½Π΅ знаю.

ВзаимодСйствиС с внСшним ΠΊΠΎΠ΄ΠΎΠΌ. Коль скоро язык рассматриваСтся ΠΊΠ°ΠΊ встраиваСмый, понадобился Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ рСалистичный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ взаимодСйствия ΠΊΠΎΠ΄Π° Π½Π° C ΠΈ Umka. Π’ Π½Ρ‘ΠΌ срСдствами ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ raylib формируСтся трёхмСрная сцСна, Π° Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ сцСны опрСдСляСтся внСшним скриптом Π½Π° Umka. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Umka ΠΈΠ· ΠΊΠΎΠ΄Π° Π½Π° C, ΠΈ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ C ΠΈΠ· Umka. БтатичСская типизация языка Umka ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Ρ‘ΠΌ структуры Π΄Π°Π½Π½Ρ‹Ρ…, нСпосрСдствСнно воспринимаСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ raylib.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Ρ€Ρ‘Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ сцСны, содСрТимоС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ задаётся скриптом Π½Π° Umka

ΠžΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (generics). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ сходство Umka с Go, пускай Π΄Π°ΠΆΠ΅ синтаксичСскоС β€” слСдуСт вопрос ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ generic’ΠΎΠ². Π Π°Π±ΠΎΡ‚Π° Π² этом Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ Π²Ρ‹ΡˆΠ»Π° ΠΈΠ· стадии ΠΎΠ±Π·ΠΎΡ€Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ². ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСдлоТСниями Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Go, ΠΎΠ΄Π½Π°ΠΊΠΎ сосущСствованиС Π² ΠΈΡ… Π³ΠΎΠ»ΠΎΠ²Π°Ρ… интСрфСйсов ΠΈ Β«ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Β» всСгда ΠΎΡ‚ΠΏΡƒΠ³ΠΈΠ²Π°Π»ΠΎ, ΠΊΠ°ΠΊ странноС Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ понятий. К ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡŽ ΠΈ радости, Π² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹ΡˆΠ΅Π΄ΡˆΠ΅ΠΉ Π½ΠΎΠ²ΠΎΠΉ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ Ρ‡Π΅Ρ€Π½ΠΎΠ²ΠΈΠΊΠ° Β«ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹Β» исчСзли β€” ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»ΡΠ» ΠΈ я. Пока generic’ΠΎΠ² Π² Umka Π½Π΅Ρ‚, остаётся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΠΈ Π² Go, пустыми интСрфСйсами interface{}.

ДокумСнтация. Полная спСцификация Umka Π΅Ρ‰Ρ‘ Π² Ρ€Π°Π±ΠΎΡ‚Π΅, Π½ΠΎ ΡƒΠΆΠ΅ написана Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ ΠΎΠ±Π·ΠΎΡ€Π½Ρ‹ΠΉ Ρ‚ΡƒΡ€ ΠΏΠΎ основным возмоТностям языка.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская типизация?

Π§Ρ‚ΠΎΠ±Ρ‹ максимально просто ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Π΄Π²Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π½Π°Ρ‡Π½Ρ‘ΠΌ сначала. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, с Ρ‡Π΅ΠΌ сталкиваСтся программист ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π° – объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² языкС программирования C++ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ x, Ρ‚ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ int – для хранСния цСлочислСнных Π΄Π°Π½Π½Ρ‹Ρ…, float – для хранСния Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, char – для ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ доступныС Ρ‚ΠΈΠΏΡ‹. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² C++ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ статичСская типизация, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠ΅ C.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ статичСская типизация?

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

Рассмотрим нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ x (int x;) ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ int — это сокращСниС ΠΎΡ‚ Integer Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»Ρ‹Π΅ числа Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ – 2 147 483 648 Π΄ΠΎ 2 147 483 647. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, компилятор ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π°Π΄ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ матСматичСскиС значСния – сумму, Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠ΅. А Π²ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ strcat(), которая соСдиняСт Π΄Π²Π° значСния Ρ‚ΠΈΠΏΠ° char, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ x нСльзя. Π’Π΅Π΄ΡŒ Ссли ΡΠ½ΡΡ‚ΡŒ ограничСния ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π° значСния int ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ошибка.

Π—Π°Ρ‡Π΅ΠΌ понадобились языки с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ?

НСсмотря Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния, статичСская типизация ΠΈΠΌΠ΅Π΅Ρ‚ ряд прСимущСств, ΠΈ Π½Π΅ вносит большого дискомфорта Π² написаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΈ Π±ΠΎΠ»Π΅Π΅ «свободныС ΠΏΡ€Π°Π²ΠΈΠ»Π°Β» Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Π£Π΄Π°Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ привСсти – JavaScript. Π­Ρ‚ΠΎΡ‚ язык программирования ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для встраивания Π² Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ с Ρ†Π΅Π»ΡŒΡŽ получСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. Из-Π·Π° Ρ‚Π°ΠΊΠΎΠΉ особСнности ΠΎΠ½ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Π» Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ Π² web-тСхнологиях, Π³Π΄Π΅ идСально чувствуСт сСбя динамичная типизация. Π’ Ρ€Π°Π·Ρ‹ упрощаСтся написаниС Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… скриптов ΠΈ макросов. А Ρ‚Π°ΠΊΠΆΠ΅ появляСтся прСимущСство Π² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ использовании ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Но Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ довольно Ρ€Π΅Π΄ΠΊΠΎ, ΠΈΠ·-Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡƒΡ‚Π°Π½ΠΈΡ† ΠΈ ошибок.

Какой Π²ΠΈΠ΄ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π»ΡƒΡ‡ΡˆΠ΅?

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

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

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Β«ΡΠΈΠ»ΡŒΠ½ΡƒΡŽΒ» ΠΈ Β«ΡΠ»Π°Π±ΡƒΡŽΒ» Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ

Π‘Ρ€Π΅Π΄ΠΈ ΠΊΠ°ΠΊ русскоязычных, Ρ‚Π°ΠΊ ΠΈ англоязычных ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ – «сильная» типизация. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ понятиС, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ понятия Π² ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ лСксиконС Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ сущСствуСт. Π₯отя ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π΅Π³ΠΎ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. На самом Π΄Π΅Π»Π΅, Β«ΡΠΈΠ»ΡŒΠ½ΡƒΡŽΒ» Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ слСдуСт ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Ρƒ, которая ΡƒΠ΄ΠΎΠ±Π½Π° ΠΈΠΌΠ΅Π½Π½ΠΎ для вас ΠΈ с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ максимально ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. А «слабая» — нСудобная ΠΈ нСэффСктивная для вас систСма.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ

НавСрняка Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‡Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π° стадии написании ΠΊΠΎΠ΄Π° компилятор Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ написанныС конструкции ΠΈ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ нСсовпадСнии Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Но Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ JavaScript. Π•Π³ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π² любом случаС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. Π’ΠΎΡ‚ Π»Π΅Π³ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ – ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ символ ΠΈ число, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла: Β«xΒ» + 1.

Π’ статичСских языках, Π² зависимости ΠΎΡ‚ самого языка, эта опСрация ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ послСдствия. Но Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, Π΅Ρ‘ Π΄Π°ΠΆΠ΅ Π½Π΅ допустят Π΄ΠΎ компиляции, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ компилятор выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ сразу послС написания Ρ‚Π°ΠΊΠΎΠΉ конструкции. Он просто посчитаСт Π΅Ρ‘ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€Π°Π².

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

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π»ΠΈ смСТныС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹?

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ смСТной Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, которая ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ Π² языках программирования, Π½Π΅ сущСствуСт. И ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ появится. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π² Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… понятиях ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Но, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ².

  • Π’ языкС программирования Delphi – подсистСма Variant.
  • Π’ языкС программирования AliceML – Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹.
  • Π’ языкС программирования Haskell – Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Data.Dynamic.

Когда строгая типизация Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ динамичСской?

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

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

  • Π‘Π²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ количСство символов ΠΈ строк ΠΊΠΎΠ΄Π° ΠΈΠ·-Π·Π° нСнадобности ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ указания ΠΈΡ… Ρ‚ΠΈΠΏΠ°. Π’ΠΈΠΏ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ автоматичСски, послС присвоСния значСния.
  • Π’ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π»ΠΎΠΊΠ°Ρ… ΠΊΠΎΠ΄Π° упрощаСтся Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ логичСскоС восприятиС конструкций, ΠΈΠ·-Π·Π° отсутствия Β«Π»ΠΈΡˆΠ½ΠΈΡ…Β» строк объявлСния.
  • Π”ΠΈΠ½Π°ΠΌΠΈΠΊΠ° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ влияСт Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ компилятора, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏΡ‹, ΠΈ Π½Π΅ провСряСт ΠΈΡ… Π½Π° соотвСтствиС.
  • ΠŸΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ конструкции. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€ΠΈ создании ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с массивом Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с числовыми, тСкстовыми ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ массивов. Достаточно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.
  • Π£ΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· систСм управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, поэтому Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
  • Если Π±Ρ‹Π»Π° Π΄ΠΎΠΏΡƒΡ‰Π΅Π½Π° ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ° ΠΈΠ»ΠΈ грубая ошибка ΠΏΡ€ΠΈ использовании ΠΈΠ»ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ компилятор Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ Π΅Ρ‘. А ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
  • ΠŸΡ€ΠΈ использовании статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ всС объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выносятся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π² дальнСйшСм с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сам Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. БоотвСтствСнно, динамичСская типизация Π½Π΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ языках программирования со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ

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

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ языках программирования с динамичСским Π²ΠΈΠ΄ΠΎΠΌ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

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

ДинамичСский Π²ΠΈΠ΄ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ — нСдостатки

  • Если Π±Ρ‹Π»Π° Π΄ΠΎΠΏΡƒΡ‰Π΅Π½Π° ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ° ΠΈΠ»ΠΈ грубая ошибка ΠΏΡ€ΠΈ использовании ΠΈΠ»ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ компилятор Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ Π΅Ρ‘. А ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
  • ΠŸΡ€ΠΈ использовании статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ всС объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выносятся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π² дальнСйшСм с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сам Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. БоотвСтствСнно, динамичСская типизация Π½Π΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ.

ПодвСдСм ΠΈΡ‚ΠΎΠ³

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

ДинамичСская типизация — это… Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ДинамичСская типизация?

Динами́чСская типиза́ция — ΠΏΡ€ΠΈΡ‘ΠΌ, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² языках программирования ΠΈ языках спСцификации, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ пСрСмСнная связываСтся с Ρ‚ΠΈΠΏΠΎΠΌ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ присваивания значСния, Π° Π½Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… участках ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ языков, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ динамичСская типизация — Smalltalk, Python, Objective-C, Ruby, PHP, Perl, JavaScript, Lisp, xBase,QtScript.

ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΡ‘ΠΌΒ β€” статичСская типизация.

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ стоит ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° сравнСния Π²Π΅Π»ΠΈΡ‡ΠΈΠ½, Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PHP ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сравнСния Β«==Β», Β«!=Β» ΠΈ Β«===Β», Β«!==Β», Π³Π΄Π΅ вторая ΠΏΠ°Ρ€Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ сравниваСт ΠΈ значСния, ΠΈ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Β«===Β» Π΄Π°Ρ‘Ρ‚ true Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ совпадСнии, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Β«==Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считаСт Π²Π΅Ρ€Π½Ρ‹ΠΌ Ρ‚Π°ΠΊΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: (1=="1"). Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ, Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… языков программирования.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

  • ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… строк: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°Π΄ΠΎ Π»ΠΈΠ±ΠΎ просто ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π±Π΅Π· указания Ρ‚ΠΈΠΏΠ° (JavaScript), Π»ΠΈΠ±ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ (БСйсик) ΠΈΠ»ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ (PHP).
  • БоотвСтствСнно, упрощаСтся написаниС простых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.
  • ΠŸΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ языка. НапримСр, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ динамичСский язык ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ eval(), Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ выраТСния.
  • УскоряСт Ρ€Π°Π±ΠΎΡ‚Ρƒ компилятора — Π° Π·Π½Π°Ρ‡ΠΈΡ‚, производствСнный Ρ†ΠΈΠΊΠ» Β«Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ-ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΒ».
  • АвтоматичСски Π΄Π°Ρ‘Ρ‚ языку элСмСнты мСтапрограммирования ΠΈ интроспСкции.
    • Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами: ΠΊΠΎΠ³Π΄Π° программист ΠΏΠΈΡˆΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Β«ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив», функция сразу Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ для массива чисСл, массива строк, массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΌΠ΅Ρ‚Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π»ΠΈ опСрация x.length, срСдС выполнСния Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° пСрСмСнная x ΠΈ Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ Π½Π΅Ρ‘ ΠΏΠΎΠ»Π΅ length; Ссли ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ запросы ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ сама ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, это ΠΈ Π΅ΡΡ‚ΡŒ интроспСкция.
  • УпрощаСтся Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ программиста с Π‘Π£Π‘Π”, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² «динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΒ» Π²ΠΈΠ΄Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ динамичСскиС языки Ρ†Π΅Π½Π½Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для программирования Π²Π΅Π±-слуТб.
  • Иногда трСбуСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. НапримСр, функция поиска подстроки Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ символа (число) ΠΈΠ»ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Β«Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎΒ». Π’ PHP этот ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Β β€” булСвскоС false. Π’ статичСских языках это особая константа (0 Π² ПаскалС, std::string::npos Π² C++).

НСдостатки

  • БтатичСская типизация позволяСт ΡƒΠΆΠ΅ ΠΏΡ€ΠΈ компиляции Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ простыС ошибки Β«ΠΏΠΎ нСдосмотру». Для динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ трСбуСтся ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ участок ΠΊΠΎΠ΄Π°.
    • ОсобСнно ΠΊΠΎΠ²Π°Ρ€Π½Ρ‹ Π² динамичСском языкС программирования ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ: Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ нСсколько Ρ€Π°Π· ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π΅Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° Π½Π°ΠΊΠΎΠ½Π΅Ρ† Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ Π½Π°Π±Ρ€Π°Π½Π½Ρ‹ΠΉ с ошибкой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.
  • Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках Π½Π΅ дСйствуСт Π»ΠΈΠ±ΠΎ дСйствуСт с ограничСниями Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ относится пСрСмСнная, ΠΈ вывСсти Π½Π°Π±ΠΎΡ€ Π΅Ρ‘ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².
  • Для написания слоТного ΠΊΠΎΠ΄Π° Π½ΡƒΠΆΠ½Π° особая ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Π° программирования: вСнгСрская нотация, ΡŽΠ½ΠΈΡ‚-тСстированиС ΠΈΒ Ρ‚.Β Π΄. Π’ статичСских языках, Π²ΠΎΠΎΠ±Ρ‰Π΅-Ρ‚ΠΎ, Ρ‚ΠΎΠΆΠ΅, Π½ΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π² мСньшСй стСпСни.
  • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ модуля (описания Ρ‚ΠΈΠΏΠΎΠ², Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈΒ Ρ‚.Β Π΄.Β β€” Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ соотвСтствуСт interface-сСкции Π² ПаскалС ΠΈ h-Ρ„Π°ΠΉΠ»Ρƒ Π² Π‘ΠΈ) Π² статичСском языкС сама ΠΏΠΎ сСбС являСтся сущСствСнной Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈΒ β€” Π° ΠΏΡ€ΠΈ ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ модуля Π²ΠΎΠΎΠ±Ρ‰Π΅ позволяСт ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· докумСнтирования.
  • Низкая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, связанная с динамичСской ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Ρ‚ΠΈΠΏΠ°. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅, Π° Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

PHP

<html><head><title>test</title></head>
<body>
<?php
  $res  = "string1"; echo $res.'<br />';  // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ "string1"
  $res  = 1;         echo $res.'<br />';  // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ "1"
  $res += 2;         echo $res.'<br />';  // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ "3"
  $res += "string2"; echo $res.'<br />';  // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ "3string2"
?>
</body>
</html>

JavaScript

<html><head><title>test</title></head>
<body>
<script type="text/javascript">
function DoTest(obj) {
  var res = "string1";  alert(res);  // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Β«string1Β»
      res = 1;          alert(res);  // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Β«1Β»
      res += 2;         alert(res);  // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Β«3Β»
      res += 'string2'; alert(res);  // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Β«3string2Β»
}
</script>
<a href="#">Click to test</a>
</body></html>

Object Pascal

program Project2;
{$APPTYPE CONSOLE}
Uses   SysUtils;
Var    V1, V2: Variant;
begin
    V1  := 'string1';  WriteLn(V1);           // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ "string1"  
    V2  := 1;          WriteLn(V2);           // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ "1"        
    Inc(V2,2);         WriteLn(V2);           // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ "3"        
                       WriteLn(V2,'string2'); // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ "3string2" 
end.

Object Pascal: Π”Ρ€ΡƒΠ³ΠΈΠ΅ способы использования динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ

procedure TForm1.Myproc(Obj: TObject);
begin
If (Obj is TButton)
   then (Obj as TButton).Click;
end;
function Something (A: array of const)
begin
  // ...
end;
{Π’Ρ‹Π·ΠΎΠ²: } Something ( [5,'Hello',3.14159, True, TForm] );
 
procedure TForm1.DisplayValue(const AValue: TValue);
begin
Memo1.Lines.Append(AValue.ToString);
end;
 
procedure TForm1.btn1Click(Sender: TObject);
var
list: TStrings;
begin
 list := TStringList.Create();
 list.Text := 'Foo';
 try
   DisplayValue(list);
   DisplayValue(list.Count);
   DisplayValue(list.Capacity * 8.964);
   DisplayValue(list is TStringList);
   DisplayValue(list.Text);
 finally
   list.Free;
 end;
end;
{Π’Ρ‹Π²ΠΎΠ΄:
(TStringList @ 0166E460)
1
35,856
True
Foo
}

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Бсылки

ДинамичСская типизация β€” ΠšΠ°Ρ€Ρ‚Π° Π·Π½Π°Π½ΠΈΠΉ

  • Динами́чСская типиза́ция β€” ΠΏΡ€ΠΈΡ‘ΠΌ, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² языках программирования ΠΈ языках спСцификации, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ пСрСмСнная связываСтся с Ρ‚ΠΈΠΏΠΎΠΌ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ присваивания значСния, Π° Π½Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… участках ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ языков с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ β€” Smalltalk, Python, Objective-C, Ruby, PHP, Perl, JavaScript, Lisp, xBase, Erlang, Visual Basic.

    ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΡ‘ΠΌ β€” статичСская типизация.

    Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках со слабой динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ стоит ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° сравнСния Π²Π΅Π»ΠΈΡ‡ΠΈΠ½, Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PHP ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сравнСния Β«==Β», Β«!=Β» ΠΈ Β«===Β», Β«!==Β», Π³Π΄Π΅ вторая ΠΏΠ°Ρ€Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ сравниваСт ΠΈ значСния, ΠΈ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Β«===Β» Π΄Π°Ρ‘Ρ‚ true Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ совпадСнии, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Β«==Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считаСт Π²Π΅Ρ€Π½Ρ‹ΠΌ Ρ‚Π°ΠΊΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅: (1==»1″). Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ, Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… языков программирования.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: ВикипСдия

БвязанныС понятия

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

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° (ти́повая пСрСмСнная) Π² языках программирования ΠΈ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² β€” пСрСмСнная, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· мноТСства Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Π―Π²Π½ΠΎΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ², ΠΈΠ»ΠΈ явная типизация β€” Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΠΈΠ΄ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ трСбуСтся явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π΅ Ρ‚ΠΈΠΏ. ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ явной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” нСявная типизация, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ эта Π·Π°Π΄Π°Ρ‡Π° пСрСкладываСтся Π½Π° транслятор языка. НапримСр, Ссли ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ X Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ число, для Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ нСпосрСдствСнно ΠΏΡ€ΠΈ объявлСнии ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ цСлочислСнный Ρ‚ΠΈΠΏ.

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚ΠΈΠΏ) β€” мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π° этих значСниях (IEEE Std 1320.2-1998).

Бтати́чСская типиза́ция β€” ΠΏΡ€ΠΈΡ‘ΠΌ, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² языках программирования, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ пСрСмСнная, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ связываСтся с Ρ‚ΠΈΠΏΠΎΠΌ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ объявлСния ΠΈ Ρ‚ΠΈΠΏ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½ ΠΏΠΎΠ·ΠΆΠ΅ (пСрСмСнная ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Π° функция β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ значСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этого Ρ‚ΠΈΠΏΠ°). ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков β€” Ада, Π‘++, C#, D, Java, ML, Паскаль, Nim.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΜΠ½Π½Π°Ρ Π² ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ β€” поимСнованная, Π»ΠΈΠ±ΠΎ адрСсуСмая ΠΈΠ½Ρ‹ΠΌ способом ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, адрСс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для осущСствлСния доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ. Π”Π°Π½Π½Ρ‹Π΅, находящиСся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡƒ адрСсу памяти), Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² языках программирования ΠΈ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² β€” ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

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

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅:Β Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ языков программирования

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

Π’Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ² (Π°Π½Π³Π». type inference) β€” Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ компилятора самому логичСски вывСсти Ρ‚ΠΈΠΏ значСния Ρƒ выраТСния. Π’ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠΎΠ² Π±Ρ‹Π» прСдставлСн Π² языкС ML, Π³Π΄Π΅ компилятор всСгда Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ для всякого выраТСния. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сокращаСт Ρ€Π°Π·ΠΌΠ΅Ρ€ исходного ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π΅Π³ΠΎ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΈ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π°.

По ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· классификаций, языки программирования Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ дСлятся Π½Π° сильно ΠΈ слабо Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ (Π°Π½Π³Π». strongly and weakly typed), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ сильной ΠΈΠ»ΠΈ слабой систСмой Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ, ΠΈ Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для указания Π½Π° достоинства ΠΈ нСдостатки ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ языка. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ понятия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ приводят ΠΊ Π½Π°Π·Ρ‹Π²Π°Π½ΠΈΡŽ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… систСм Ρ‚ΠΈΠΏΠΎΠ² Β«ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈΒ» ΠΈΠ»ΠΈ «слабыми».

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅: Бильная ΠΈ слабая типизация

ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅ΜΡ‚ΠΎΠ΄ (Π°Π½Π³Π». multimethod) ΠΈΠ»ΠΈ мно́ТСствСнная диспСтчСриза́ция (Π°Π½Π³Π». multiple dispatch) β€” ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² зависимости ΠΎΡ‚ динамичСских Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ собой Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΉ диспСтчСризации (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ), Π³Π΄Π΅ Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° осущСствляСтся динамичСски Π½Π° основС фактичСского Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Π°Ρ диспСтчСризация ΠΎΠ±ΠΎΠ±Ρ‰Π°Π΅Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΄ΠΈΡΠΏΠ΅Ρ‚Ρ‡Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ для случаСв с двумя ΠΈΠ»ΠΈ…

БравнС́ниС Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ β€” ΠΎΠ±Ρ‰Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ряда ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ па́рами Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… матСматичСскиС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ равСнства ΠΈ порядка. Π’ языках высокого уровня Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Π°Ρ‰Π΅ всСго, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π±ΡƒΠ»Π΅Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ («истина» ΠΈΠ»ΠΈ «лоТь»).

ΠžΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π°Π½Π³Π». generic programming) β€” ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°ΡΡΡ Π² Ρ‚Π°ΠΊΠΎΠΌ описании Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ мСняя само это описаниС. Π’ Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ поддСрТиваСтся Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ языками программирования. ВозмоТности ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ программирования Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ появились Π² Π²ΠΈΠ΄Π΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² (ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ) Π² 1970-Ρ… Π³ΠΎΠ΄Π°Ρ… Π² языках ΠšΠ»Ρƒ ΠΈ Ада, Π·Π°Ρ‚Π΅ΠΌ Π² Π²ΠΈΠ΄Π΅ парамСтричСского ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° Π² ML ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ…, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ……

ΠšΠ°Π»Π°ΠΌΠ±ΡƒΡ€ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ являСтся прямым Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ типобСзопасности. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ°Π»Π°ΠΌΠ±ΡƒΡ€ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ связываСтся со слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Π½ΠΎ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сильно Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки ΠΈΠ»ΠΈ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ возмоТности (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² связанных с Π½ΠΈΠΌΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°Ρ… слова unsafe ΠΈΠ»ΠΈ unchecked). Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠΊΠΈ типобСзопасности ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Β«Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΒ» ΠΊΠ°Π»Π°ΠΌΠ±ΡƒΡ€ΠΎΠ² Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ являСтся ΠΌΠΈΡ„ΠΎΠΌ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°ΜΠ»ΡŒΠ½ΠΎΠ΅ программи́рованиС β€” Ρ€Π°Π·Π΄Π΅Π» дискрСтной ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΈ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ процСсс вычислСния трактуСтся ΠΊΠ°ΠΊ вычислСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² матСматичСском ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ послСдних (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ).

Логи́чСский Ρ‚ΠΈΠΏ да́нных, ΠΈΠ»ΠΈ Π±ΡƒΠ»Π΅Π² Ρ‚ΠΈΠΏ, ΠΈΠ»ΠΈ Π±ΡƒΠ»Π΅Π²Ρ‹ΠΉ Ρ‚ΠΈΠΏ (ΠΎΡ‚ Π°Π½Π³Π». Boolean ΠΈΠ»ΠΈ logical data type) β€” ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π΄Π²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… значСния, ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… истиной (true) ΠΈ лоТью (false). ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π² ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков программирования ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ рСализуСтся Ρ‡Π΅Ρ€Π΅Π· числСнный Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках программирования Π·Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ истина полагаСтся 1, Π·Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ лоТь β€” 0.

ДинамичСский язык β€” язык программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ синтаксичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ», Π½Π° этапС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ДинамичСскиС языки ΡƒΠ΄ΠΎΠ±Π½Ρ‹ для быстрой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Ρ‚ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ (Π°Π½Π³Π». type safety) языка программирования ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ (ΠΈΠ»ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ) Π΅Π³ΠΎ систСмы Ρ‚ΠΈΠΏΠΎΠ².

Абстра́ктный Ρ‚ΠΈΠΏ да́нных (АВД) β€” это матСматичСская модСль для Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Π³Π΄Π΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… опрСдСляСтся ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ (сСмантикой) с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄Π°Π½Π½Ρ‹Ρ…, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ этого Ρ‚ΠΈΠΏΠ° ΠΈ повСдСния этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ‚ΠΈΠΏ (Π°Π½Π³Π». primitive, fundamental, basic, plain, simple ΠΈΠ»ΠΈ built-in data type) — Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ постоянных, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅…

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ Π² возмоТности ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ сущСствования Π² ΠΎΠ΄Π½ΠΎΠΉ области видимости Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² примСнСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя, Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости (Π°Π½Π³Π». scope) Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ β€” Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ имя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ сущности (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), остаётся связанным с этой ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ позволяСт посрСдством сСбя ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΉ. Говорят, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Β«Π²ΠΈΠ΄Π΅Π½Β» Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ссли Π² Π΄Π°Π½Π½ΠΎΠΌ мСстС ΠΏΠΎ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π—Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ области видимости Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ…

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

Π’ΠΈΠΏ-ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ (Ρ‚Π°ΠΊΠΆΠ΅ Ξ -Ρ‚ΠΈΠΏ, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²; Π°Π½Π³Π». product type) β€” конструкция Π² языках программирования ΠΈ интуиционистской Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ², Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, построСнный ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ исходных Ρ‚ΠΈΠΏΠΎΠ²; Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами β€” ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Ρ‚ΠΈΠΏΠΎΠ², ΠΈΠ»ΠΈ Β«ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏΒ». Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ порядок ΠΈΡ… слСдования ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ сигнатуру Ρ‚ΠΈΠΏΠ°-произвСдСния; порядок слСдования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² создаваСмом ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ сохраняСтся Π½Π° протяТСнии Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ согласно Π·Π°Π΄Π°Π½Π½ΠΎΠΉ сигнатурС.

ΠšΠΎΠ²Π°Ρ€ΠΈΠ°ΜΠ½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°ΜΠ½Ρ‚Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ β€” способы пСрСноса наслСдования Ρ‚ΠΈΠΏΠΎΠ² Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΎΡ‚ Π½ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ β€” ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Π΄Π΅Π»Π΅Π³Π°Ρ‚Ρ‹ ΠΈ Ρ‚. ΠΏ. Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ ΠΎΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… понятий Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ Β«ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΉΒ» ΠΈ Β«ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Β».

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

ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΜΡ€Π½ΠΎΠ΅ программи́рованиС (Π°Π½Π³Π». function-level programming) β€” ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΊΠΎΠΌΠ±ΠΈΠ½Γ‘Ρ‚ΠΎΡ€Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π°Ρ явного упоминания Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² опрСдСляСмой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ вмСсто ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. ЯвляСтся особой Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, Π½ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ основного Π΅Π³ΠΎ направлСния, ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ξ»-Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ).

Π Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, ориСнтированная Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ распространСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒ статичСскиС ΠΈ динамичСскиС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ниТСлСТащая модСль исполнСния Π΄ΠΎΠ»ΠΆΠ½Π° автоматичСски Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ измСнСния благодаря ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ (сокращённо пСрСчислС́ниС, Π°Π½Π³Π». enumeration, enumerated type) β€” Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡ΡŒΡ‘ мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ прСдставляСт собой ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ список ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ².

Π‘ΠΈ (Π°Π½Π³Π». C) β€” ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π² 1969β€”1973 Π³ΠΎΠ΄Π°Ρ… сотрудником Bell Labs ДСннисом Π ΠΈΡ‚Ρ‡ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ языка Π‘ΠΈ. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы UNIX, Π½ΠΎ впослСдствии Π±Ρ‹Π» пСрСнСсён Π½Π° мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. Богласно Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ языка, Π΅Π³ΠΎ конструкции Π±Π»ΠΈΠ·ΠΊΠΎ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ инструкциям, благодаря Ρ‡Π΅ΠΌΡƒ ΠΎΠ½ Π½Π°ΡˆΡ‘Π» ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π» свойствСнСн язык ассСмблСра…

Поиск ΠΊΠ»ΠΎΠ½ΠΎΠ² Π² исходном ΠΊΠΎΠ΄Π΅ — Π°Π½Π°Π»ΠΈΠ· исходного ΠΊΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², с Ρ†Π΅Π»ΡŒΡŽ обнаруТСния ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ врСдоносный Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€.

Π’ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ объСдинСниС (Π°Π½Π³Π». union) прСдставляСт собой Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ структуру Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… прСдставлСний.

Анонимный Ρ‚ΠΈΠΏ (Π°Π½Π³Π». Anonymous types) β€” ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ Π² языках C# 3.0, Visual Basic .NET 9.0 ΠΈ Oxygene, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ свойств Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π±Π΅Π· нСобходимости ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ явного указания Ρ‚ΠΈΠΏΠ°. Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… особСнностСй SQL-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ языка LINQ, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² языки C# ΠΈ VB.net. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠΌΡ‘Π½, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова var, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎ компилятору…

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΡƒΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ начинаСтся Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ Π΅Ρ‘ объявлСния ΠΈ заканчиваСтся Π² ΠΊΠΎΠ½Ρ†Π΅ этого Π±Π»ΠΎΠΊΠ°. НапримСр, Π² языкС Π‘ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ° (Π² Π‘ΠΈ, Π±Π»ΠΎΠΊΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками { ΠΈ }).

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅:Β Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ пСрСмСнная

Π―Π·Ρ‹ΠΊ программи́рования β€” Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для записи ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π―Π·Ρ‹ΠΊ программирования опрСдСляСт Π½Π°Π±ΠΎΡ€ лСксичСских, синтаксичСских ΠΈ сСмантичСских ΠΏΡ€Π°Π²ΠΈΠ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… внСшний Π²ΠΈΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ β€” Π­Π’Πœ) ΠΏΠΎΠ΄ Π΅Ρ‘ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ.

БинтаксичСский сахар (Π°Π½Π³Π». syntactic sugar) Π² языкС программирования β€” это синтаксичСскиС возмоТности, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ влияСт Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ использованиС языка Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°.

Бвойство β€” способ доступа ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ свойству ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° выглядит Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ структурному полю (Π² структурном ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ), Π½ΠΎ, Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ свойства вызываСтся ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ свойства β€” Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Бэкуса β€” Наура (Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ Бэкус β€” Наурова Ρ„ΠΎΡ€ΠΌΠ° (РБНЀ)) (Π°Π½Π³Π». Extended Backus–Naur Form (EBNF)) β€” Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ систСма опрСдСлСния синтаксиса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ΄Π½ΠΈ синтаксичСскиС ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для описания контСкстно-свободных Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊ. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Никлаусом Π’ΠΈΡ€Ρ‚ΠΎΠΌ. ЯвляСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌ Бэкуса β€” Наура, отличаСтся ΠΎΡ‚ БНЀ Π±ΠΎΠ»Π΅Π΅ Β«Ρ‘ΠΌΠΊΠΈΠΌΠΈΒ» конструкциями, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ способности ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ…

Π—Π°ΠΏΠΈΡΡŒ β€” Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π±Π΅Π· сокрытия Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

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

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

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΜΠ½Π½Π°Ρ β€” Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ физичСской ΠΈΠ»ΠΈ абстрактной систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ своё, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ числСнноС, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ‚Π°ΠΊΠΈΡ… областях ΠΊΠ°ΠΊ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°, СстСствСнныС Π½Π°ΡƒΠΊΠΈ, Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ: Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° Π²ΠΎΠ·Π΄ΡƒΡ…Π°, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

Бинтакси́чСский ана́лиз (ΠΈΠ»ΠΈ Ρ€Π°Π·Π±ΠΎΡ€, ΠΆΠ°Ρ€Π³. па́рсинг ← Π°Π½Π³Π». parsing) Π² лингвистикС ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ β€” процСсс сопоставлСния Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ лСксСм (слов, Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²) СстСствСнного ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ языка с Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π° (синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ примСняСтся совмСстно с лСксичСским Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ.

ΠžΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ алгСбраичСский Ρ‚ΠΈΠΏ да́нных (Π°Π½Π³Π». generalized algebraic data type, GADT) β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² алгСбраичСских Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ характСризуСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ конструкторы ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ значСния Π½Π΅ своСго Ρ‚ΠΈΠΏΠ°, связанного с Π½ΠΈΠΌ. Бконструированы ΠΏΠΎΠ΄ влияниСм Ρ€Π°Π±ΠΎΡ‚ ΠΎΠ± ΠΈΠ½Π΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… сСмСйствах Π² срСдС исслСдоватСлСй зависимых Ρ‚ΠΈΠΏΠΎΠ².

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

ΠžΠ±ΡŠΠ΅ΜΠΊΡ‚Π½ΠΎ-ориСнти́рованноС программи́рованиС (ООП) β€” мСтодология программирования, основанная Π½Π° прСдставлСнии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π²ΠΈΠ΄Π΅ совокупности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся экзСмпляром ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ класса, Π° классы ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ наслСдования.

Динами́чСская пСрСмС́нная β€” пСрСмСнная Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, мСсто Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ выдСляСтся Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. По сути, ΠΎΠ½Π° являСтся участком памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ систСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΈΠΌ ΠΎΠ½Π° отличаСтся ΠΎΡ‚ глобальной статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ — участка памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ систСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ДинамичСская пСрСмСнная β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· классов памяти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² статичСский ΠΈ динамичСский Π½Π°Π±ΠΎΡ€ тСкста

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ статичСский Π½Π°Π±ΠΎΡ€ тСкста? А Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСский Π½Π°Π±ΠΎΡ€ тСкста? Π― ΠΎΡ‚Π²Π΅Ρ‡Ρƒ Π½Π° ΠΎΠ±Π° вопроса Π² этой Π²Π²ΠΎΠ΄Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΈ ΠΌΡ‹ обсудим Π΄Π΅Π±Π°Ρ‚Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ самого опрСдСлСния этих понятий.

Π’Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ язык программирования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ; ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ я сдСлаю ссылки Π½Π° языки программирования Perl, PHP ΠΈ Python (Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ΄ΠΎΠ²). Π’Π΅ΠΌ, ΠΊΡ‚ΠΎ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌ с Python, слСдуСт Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ ΠΊΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΠΎ псСвдокодС, ΠΈ всС Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.БтатичСская типизация ΠΈ динамичСская типизация — это Π·Π°Π±ΠΎΡ‚Ρ‹ проСктирования языков программирования; Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, отсутствиС Π·Π½Π°Π½ΠΈΠΉ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚ Π²Π°ΡˆΠ΅ΠΌΡƒ пониманию этих ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ. Π’ΠΎ всСх Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ… ΠΊΠΎΠ΄Π° Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я явно упомянул язык программирования, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ написан ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Β«/ * …… * /Β» (ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹).

Для Π½Π°Ρ‡Π°Π»Π°, я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ «типизация» Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… статичСской ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ относится ΠΊ Β«Ρ‚ΠΈΠΏΡƒΒ» Π² смыслС Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π½Π΅ ΠΊ процСссу наТатия клавиш Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅.Π₯отя это ΠΌΠΎΠ³Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ довольно ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ, для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… это ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ. «БтатичСский» ΠΈ «динамичСский» — это Ρ‚ΠΈΠΏΡ‹ Β«Π½Π°Π±ΠΎΡ€Π° тСкста», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…. Π―Π·Ρ‹ΠΊΠΈ со статичСской ΠΈΠ»ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «статичСскими» ΠΈΠ»ΠΈ «динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈΒ».

БтатичСский Π½Π°Π±ΠΎΡ€

Π―Π·Ρ‹ΠΊΠΈ программирования со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ — это языки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ статичСская типизация связана с явным объявлСниСм (ΠΈΠ»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм.Java — это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ языка со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ; C ΠΈ C ++ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ языками со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² C (Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² C ++) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ; Π²Ρ‹ просто Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΈΡ…, прСдполагая, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

БтатичСская типизация Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…; ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  / * Код C * /
статичСскоС Ρ†Π΅Π»ΠΎΠ΅ число, сумма; // явноС объявлСниС
число = 5; // Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅
сумма = 10;
сумма = сумма + число;  

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выглядит объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² языках со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ static Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ; ΠΎΠ½ использовался вмСстС с int Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ num ΠΈ суммы Π΄ΠΎ нуля.

ДинамичСский Π²Π²ΠΎΠ΄

Π―Π·Ρ‹ΠΊΠΈ программирования с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ — это языки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ языки с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ явного объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм. Python являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ языка программирования с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΊΠ°ΠΊ ΠΈ PHP.Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  / * Код Python * /
num = 10 // Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° ΠΌΡ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ присвоили ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ num Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10 ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Π­Ρ‚ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎ для языков программирования с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Другая аналогия

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

Π­Ρ‚Π° аналогия ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ использовали Π²Ρ‹ΡˆΠ΅ для опрСдСлСния статичСской ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния нСобходимости явного объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‡Π΅ΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎ врСмя компиляции ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

БтатичСский ΠΈ динамичСский Π½Π°Π±ΠΎΡ€ тСкста Π² сравнСнии с строгим ΠΈ слабым Π½Π°Π±ΠΎΡ€ΠΎΠΌ тСкста

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

Π―Π·Ρ‹ΠΊΠΈ программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ «ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ», ΡΠ²Π»ΡΡŽΡ‚ΡΡ «ΡΡ‚Ρ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ», Π° языки программирования, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ «ΡΠ»Π°Π±ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ», ΡΠ²Π»ΡΡŽΡ‚ΡΡ «ΡΠ»Π°Π±ΠΎ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ».

Π‘ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π²ΠΎΠ΄

Π―Π·Ρ‹ΠΊΠΈ программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠΌΠ΅ΡŽΡ‚ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² языках со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ привязаны ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…. Python ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ ΠΈ Java. Π Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ строгой ΠΈ слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΎΠ΅ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ слоТноС для понимания, Ρ‡Π΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ статичСской ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  / * Код Python * /
>>> foo = "Ρ…"
>>> foo = foo + 2
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
 Π€Π°ΠΉΠ» "", строка 1, Π²?
 foo = foo + 2
TypeError: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ 'str' ΠΈ 'int'
>>>  

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Python (запускаСтся ΠΈΠ· ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Python) foo ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ str .Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС ΠΌΡ‹ пытаСмся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 2 ( int ) ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° str . Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, возвращаСтся ошибка TypeError , ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ str Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объСдинСн с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ int . Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ языки со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ привязаны ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Π»Π°Π±Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ тСкста

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ языков со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, языки со слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ — это языки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ относятся ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ….Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏΠΎΠ²; это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ «привязаны» ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…. PHP ΠΈ C ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ языков со слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  / * Код PHP * /
  

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ foo ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ являСтся строковым Ρ‚ΠΈΠΏΠΎΠΌ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС ΠΌΡ‹ добавляСм эту ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΊ 2 , Ρ†Π΅Π»ΠΎΠΌΡƒ числу. Π­Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π² PHP ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎ для всСх языков со слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΎΠ± этих Π΄Π²ΡƒΡ… концСпциях, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΎΠ±Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Π΄Π°Π½Π½Ρ‹ΠΉ язык. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Python ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ; Java ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ; PHP ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΡΠ»Π°Π±ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ; C ΠΈΠΌΠ΅Π΅Ρ‚ статичСский Ρ‚ΠΈΠΏ ΠΈ слабый Ρ‚ΠΈΠΏ (ΠΈΠ·-Π·Π° Π΅Π³ΠΎ способности ΠΊ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡŽ).

Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ динамичСская ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ

Π’ языкС с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ являСтся большим плюсом для ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Π°ΠΌ нравится Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎ ТСланию, ΠΊΠΎΠ³Π΄Π° это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ (Π±Π΅Π· нСобходимости Π΅Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ).ДинамичСская типизация Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Π° для ΠΌΠ½ΠΎΠ³ΠΈΡ… языков сцСнариСв: Perl, PHP, Python ΠΈ Ρ‚. Π”. ДинамичСская типизация, ΠΏΠΎ сути, избавляСт вас ΠΎΡ‚ написания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Β«Π»ΠΈΡˆΠ½ΠΈΡ…Β» строк ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° написаниС ΠΊΠΎΠ΄Π°. .

Или это?

Π‘Π°ΠΌΠ° характСристика языков с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, которая нравится ΠΌΠ½ΠΎΠ³ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, Ρ‚Π°ΠΊΠΆΠ΅ являСтся Π»ΠΎΠ²ΡƒΡˆΠΊΠΎΠΉ, ΠΈ ΠΏΡ€ΠΈΡ‚ΠΎΠΌ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΉ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  / * Код Python * /
my_variable = 10
ΠΏΠΎΠΊΠ° my_variable> 0:
 я = foo (моя_пСрСмСнная)
 Ссли я <100:
 моя_пСрСмСнная ++
 Π΅Ρ‰Π΅
 my_varaible = (my_variable + i) / 10 // намСрСнная орфографичСская ошибка  

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅, my_varaible - это орфографичСская ошибка, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ программист Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° здСсь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Python динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π° вмСсто этого создаст Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ my_varaible . Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: my_variable ΠΈ my_varaible . ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, это ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°; Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… являСтся Π²Π°ΠΆΠ½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ любого языка программирования.

ПовСдСниС статичСского Ρ‚ΠΈΠΏΠ° Π² языках с динамичСским Ρ‚ΠΈΠΏΠΎΠΌ

Perl - это язык программирования с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.Однако ΠΎΠ½ прСдоставляСт срСдства для Β«ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈΒ» статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π°Π³ΠΌΡ‹ strict . Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Perl:

  / * Perl-ΠΊΠΎΠ΄ * /
$ сумма = 10;
print $ sum;  

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° консоль 10 . ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ здСсь ΠΌΡ‹ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ сумму; это ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ характСристику Perl. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΡ€Π°Π³ΠΌΡƒ strict ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  / * Perl-ΠΊΠΎΠ΄ * /
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ строгий;
$ сумма = 10;
print $ sum;  

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° Π²Π΅Ρ€Π½Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π΅Π³ΠΎ запуска:

  Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ символ "$ num" Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ явного ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π½Π° perl.pl строка 2.
Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ perl.pl ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ ΠΈΠ·-Π·Π° ошибок компиляции.  

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΌΡ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ num ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  / * Perl-ΠΊΠΎΠ΄ * /
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ строгий;
ΠΌΠΎΠΉ $ num; // ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ объявлСниС
$ сумма = 10;
print $ sum;  

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Ρ‹ относятся ΠΊ Perl; Π½Π΅ Π²ΠΎ всСх языках программирования Π΅ΡΡ‚ΡŒ способ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Python Π½Π΅Ρ‚ способа ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Однако Π΅ΡΡ‚ΡŒ инструмСнт ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«pycheckerΒ» (доступСн здСсь), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для «обнаруТСния» случайных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…; это, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

БтатичСская ΠΈΠ»ΠΈ динамичСская ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ?

Π•ΡΡ‚ΡŒ сторонники ΠΎΠ±Π΅ΠΈΡ… Ρ„ΠΎΡ€ΠΌ Π½Π°Π±ΠΎΡ€Π° тСкста. Π£Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ Π»ΡƒΡ‡ΡˆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ бСсполСзным Π΄Π΅Π±Π°Ρ‚Π°ΠΌ.

Π•ΡΡ‚ΡŒ Ρ‚Π΅, ΠΊΡ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ Π·Π° простоту ΠΈ экономию Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ; ΠΎΠ½ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΄ΠΈΠ·Π°ΠΉΠ½Π° языка программирования ΠΊΠ°ΠΊ таковая, Π½ΠΎ вмСсто этого для этой Ρ†Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сторонниС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, pychecker).

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

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

БтатичСская типизация ΠΈ динамичСская типизация, Π° Ρ‚Π°ΠΊΠΆΠ΅ строгая ΠΈ слабая типизация - это Ρ‚Π΅ΠΌΡ‹ проСктирования языков программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ всСгда Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΈ, ΠΊΠ°ΠΊ слСдствиС, Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ поняты. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»Π° вас с концСпциями статичСской ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ сильной ΠΈ слабой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

.

ДинамичСский Π½Π°Π±ΠΎΡ€ тСкста ΠΏΡ€ΠΎΡ‚ΠΈΠ² статичСского Π½Π°Π±ΠΎΡ€Π°

Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, соврСмСнныС языки программирования дСлятся Π½Π° Π΄Π²Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ:

  1. ДинамичСский Π²Π²ΠΎΠ΄
  2. БтатичСский Π½Π°Π±ΠΎΡ€

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ смоТСм ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ динамичСская ΠΈΠ»ΠΈ статичСская типизация, Π½Π°ΠΌ сначала Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Ρ†Π΅Π»ΠΎΠΌ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «типизация».

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ : Π­Ρ‚Π° концСпция фактичСски Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ JavaScript ΠΈ Java, Π½ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… этого Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ JavaScript Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° для динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Java Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° для статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Π±ΠΎΡ€ тСкста Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ?

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, с Ρ‡Π΅Π³ΠΎ я Ρ…ΠΎΡ‡Ρƒ Π½Π°Ρ‡Π°Ρ‚ΡŒ, - это Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π½Π°Π±ΠΎΡ€Π° тСкста.

Когда ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ «типизация», ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π² Π²ΠΈΠ΄Ρƒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ примСнСния Β«Ρ‚ΠΈΠΏΠ°Β» ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Java, Π½ΠΎ Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ для изучСния Java, Ρ‡Π΅ΠΌ прямо здСсь!

Π˜Ρ‚Π°ΠΊ, Π² Java ΠΌΡ‹ всСгда присваиваСм Ρ‚ΠΈΠΏ нашим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. НапримСр:

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²ΠΎΠ΅ привСтствиС = "ΠŸΡ€ΠΈΠ²Π΅Ρ‚!";
Π¦Π΅Π»ΠΎΠ΅ число someRandomInteger = 100;
Π”Π²ΠΎΠΉΠ½ΠΎΠΉ aDoubleVariable = 2.2;
 

Π’ΠΎ всСх Ρ‚Ρ€Π΅Ρ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΡ‹ присвоили ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ это сдСлали, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Java ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΈ поэтому ΠΌΡ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ смоТСм ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

НаличиС Ρ‚ΠΈΠΏΠ° Π²Π°ΠΆΠ½ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ позволяСт языку Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с вашим ΠΊΠΎΠ΄ΠΎΠΌ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ситуациях.

НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ Π΄Π²Π° Integer s ΠΈ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π΅ΠΌΡƒ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΡ… вмСстС, , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Integer s, язык Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слоТСниС ... ΠΎΠ΄Π½Π°ΠΊΠΎ, Ссли Ρƒ вас Π±Ρ‹Π»ΠΎ Π΄Π²Π° String s ΠΈ слоТил ΠΈΡ… вмСстС, , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это String s, язык Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ… (Π° Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ).

Π˜ΠΌΠ΅Π΅Ρ‚ смысл?

Π’ΠΈΠΏΡ‹ Π²Π°ΠΆΠ½Ρ‹.

Π‘ΠΊΠ°Π·Π°Π², что…

ДинамичСский ΠΈ статичСский Π½Π°Π±ΠΎΡ€ тСкста

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

Как это красиво?

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

Говорят, Ρ‡Ρ‚ΠΎ язык программирования динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ссли программисту Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ явно Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΈ Ρ‚ΠΈΠΏ Π½Π΅ присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния .

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ с языками, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, Π²Π°ΠΌ фактичСски Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, Π΄ΠΎΠ»ΠΆΠ½Π° Π»ΠΈ создаваСмая Π²Π°ΠΌΠΈ пСрСмСнная Π±Ρ‹Ρ‚ΡŒ Double ΠΈΠ»ΠΈ Float, String ΠΈΠ»ΠΈ Integer ΠΈ Ρ‚. Π”.

ВсС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это просто ΡΠΊΠ°Π·Π°Ρ‚ΡŒ языку, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΈ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ своСму Π΄Π΅Π»Ρƒ, присваивая Π΅ΠΉ Π»ΡŽΠ±Ρ‹Π΅ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ нравятся.

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ воссоздадим объявлСниС этих Ρ‚Ρ€Π΅Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Java, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис JavaScript:

Π²Π°Ρ€ привСтствиС = "ΠŸΡ€ΠΈΠ²Π΅Ρ‚!";
var someRandomInteger = 100;
var aDoubleVariable = 2.2;
 

Когда ΠΌΡ‹ выполняСм этот ΠΊΠΎΠ΄ Π² JavaScript, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ JavaScript (ΠΎΠ½ ΠΆΠ΅ Π΄Π²ΠΈΠΆΠΎΠΊ JavaScript) Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ Π²Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΈ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ для сСбя, ΠΊΠ°ΠΊΠΎΠΉ Β«Ρ‚ΠΈΠΏΒ» Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² Π·Π°Π΄Π½Π΅ΠΌ - ΠΊΠΎΠ½Π΅Ρ†.

Π‘ΠΊΠ°Π·Π°Π² это, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Ρ‚ΠΈΠΏΡ‹ для Π²Π°ΡˆΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² JavaScript Π½Π΅Ρ‚ Ρ‚ΠΈΠΏΠΎΠ² ... ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² JavaScript ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹.

Π§Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Ρƒ нСдСль Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ type of . Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ присвоСн вашим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ динамичСский Π²Π²ΠΎΠ΄ Π² JavaScript

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² JavaScript Π½Π° самом Π΄Π΅Π»Π΅ довольно прост.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ JavaScript Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΏΠΎ Π΅Π³ΠΎ мнСнию, Π»ΡƒΡ‡ΡˆΠ΅ всСго описываСт Π΄Π°Π½Π½Ρ‹Π΅, содСрТащиСся Π²Π½ΡƒΡ‚Ρ€ΠΈ вашСй ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ создаСтС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ присваиваСтС Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚!Β» , Π΄Π²ΠΈΠΆΠΎΠΊ ΠΏΠΎΠΉΠΌΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ это строка , ΠΈ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ это ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π·Π° кулисами.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π΄Π²ΠΈΠΆΠΎΠΊ JavaScript Π²Ρ‹Π±Ρ€Π°Π» Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… String Π² сСрвСрной части, ΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ строку ΠΊ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ строк, Π° Π½Π΅ слоТСниС.

Π˜Ρ‚Π°ΠΊ, всС Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Π•ΡΡ‚ΡŒ просто Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚ вашСго ΠΈΠΌΠ΅Π½ΠΈ для присвоСния Ρ‚ΠΈΠΏΠ° вашим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

ΠœΡ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ динамичСская типизация для вашСго кодирования, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ углубимся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ JavaScript.

ΠŸΠΎΠ΄Π²Π΅ΡΡ‚ΠΈ ΠΈΡ‚ΠΎΠ³ΠΈ

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Java, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ странным ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π½Π° язык с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ JavaScript, Π½ΠΎ самоС Π²Π°ΠΆΠ½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, - это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ всС Π΅Ρ‰Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ всС ваши ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

Π’Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΠ»Π°Π±ΠΈΡ‚ΡŒΡΡ ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°Ρ‚ΡŒΡΡ вновь ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Π½ΠΎΠΉ свободой, Π½Π΅ думая ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ вашим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ ΠΈΡ… объявлСнии! ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚Π΅ πŸ™‚

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

.

ΠΠ΅ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°ΡŽΡ‰Π°ΡΡΡ Π±ΠΎΡ€ΡŒΠ±Π° статичСской ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ - TypeScript Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ / Π₯Π°Π±Ρ€

Когда ΠΌΡ‹ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π±Ρ‹Π»ΠΈ школьного возраста ΠΈ ΡΡ‚Ρ€Π΅ΠΌΠΈΠ»ΠΈΡΡŒ ΡΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΌΡ‹ ΠΌΠ΅Ρ‡Ρ‚Π°Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ вмСстС Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎΠ΅ - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ³Ρ€Ρƒ ΠΈΠ»ΠΈ ΠΌΠ΅Π³Π°-ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π― Π²Ρ‹Π±Ρ€Π°Π» C ++ ΠΈ C #, ΠΎΠ½ Π²Ρ‹Π±Ρ€Π°Π» JavaScript. ΠœΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ ΡˆΠΊΠΎΠ»Ρƒ, Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ унивСрситСты, отслуТили Π² Π°Ρ€ΠΌΠΈΠΈ ΠΈ приступили ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅. Π£ нас Π±Ρ‹Π»ΠΎ довольно Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ΅ врСмя Π² области Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, с мноТСством Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ ΠΈ долТностСй, ΠΈ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ всС это Π½Π°Ρ‡Π°Π»ΠΎ ΡƒΡ‚ΠΎΠΌΠ»ΡΡ‚ΡŒ нас, ΠΌΡ‹ вспомнили, Π³Π΄Π΅ всС это Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ.

Π‘ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π·Ρ€Π΅Π»Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ собствСнным ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ - 2D Π²ΠΈΠ΄Π΅ΠΎΠΈΠ³Ρ€ΠΎΠΉ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄ΠΎΠΌΠ΅Π½ ΠΌΠΎΠ΅Π³ΠΎ Π΄Ρ€ΡƒΠ³Π° Π±Ρ‹Π» интСрфСйсным, Π° я Π±Ρ‹Π» ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, ΠΌΡ‹ сразу ΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ я ΠΏΡ€ΠΈΠ²Ρ‹ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с TypeScript Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ интСрфСйса, ΠΌΡ‹ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π»ΠΈ: Β«Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², TS - это просто ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ JavaScriptΒ». Π”Π°Π²Π°ΠΉ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ этим, ΠΈ всС Π±ΡƒΠ΄Π΅Ρ‚ Π³Π»Π°Π΄ΠΊΠΎ. Если Π±Ρ‹ я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Π», насколько я Π±Ρ‹Π» Π½Π΅ΠΏΡ€Π°Π²! Когда ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°ΠΌΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠΏΠ°ΡΡ‚ΡŒ нСдопонимания.

Π’ΠΎΡ‚ ΠΌΠΎΠ΅ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹. Π― ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹, ΠΊΠ°ΠΊ ΠΈΠ³Ρ€Π°, инструмСнт, ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚, ΠΊΠ°Ρ€Ρ‚Π°, локация. Π£ мСня Π΅ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ вмСстС, поэтому я ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽ ΠΈΡ…, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ - ΠΈ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², компилятор ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» ΠΌΠΎΠΉ ΠΊΠΎΠ΄, ΠΈ я всС сдСлал ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π—Π°Ρ‚Π΅ΠΌ я Π½Π°Ρ‡ΠΈΠ½Π°ΡŽ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ эти Ρ‚ΠΈΠΏΡ‹. Они Π΄Π΅Π»Π°ΡŽΡ‚ мою Тизнь Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. Моя IDE Π΄Π°Π΅Ρ‚ ΠΌΠ½Π΅ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ подсказки ΠΈ провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибок. Если ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, вСроятно, ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π― ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ усилия Π½Π° описаниС Ρ‚ΠΈΠΏΠ°, ΠΈ это Π΄Π°Π»ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.Π­Ρ‚ΠΎ ΠΌΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅.

Π£ ΠΌΠΎΠ΅Π³ΠΎ Π΄Ρ€ΡƒΠ³Π° Π±Ρ‹Π»Π° противополоТная идСя - сразу ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ написанию ΠΊΠΎΠ΄Π°, Π½Π΅ тратя Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° описаниС Ρ‚ΠΈΠΏΠΎΠ². Он Π½Π΅ Π±Ρ‹Π» Π³ΠΎΡ‚ΠΎΠ² ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΊΠ°ΠΊ сСмСйство Ρ‚ΠΈΠΏΠΎΠ². Он Π½Π΅ Π±Ρ‹Π» склонСн ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это Π² качСствС основы, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Π²ΠΈΠ΄Π΅Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ классов, Ρ‚ΠΈΠΏΠΎΠ², записСй Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π² этом Ρ€ΠΎΠ΄Π΅. Π― Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ это нСвСроятно. ΠœΡ‹ ΠΎΠ±Π° Π±Ρ‹Π»ΠΈ ΠΏΡ€Π°Π²Ρ‹, просто наши Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π»ΠΈ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.

Π‘Π΅Ρ€ΡŒΠ΅Π·Π½ΠΎ, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ часами, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» своС, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках.Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, я Π½Π΅ ΠΌΠΎΠ³ Π²ΠΈΠ½ΠΈΡ‚ΡŒ Π² этом Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ застряли Π½Π° своих старых путях. ВсСго Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄ я Π±Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π» ΠΈΠ· ΠΌΠΈΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования Π² ΠΌΠΈΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, я ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» довольно ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ JS, Π° ΠΎΠ½ - Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ряда статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков.

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

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² ΠΌΡ‹ ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ ΠΎΡ‚ ΠΈΠ΄Π΅ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Π’Π°Ρˆ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° Π² Π½Π°ΡˆΠΈΡ… личностях. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΠΏΡ€Π°Π²Ρ‹, Π½ΠΎ я Π²ΠΈΠ΄Π΅Π», ΠΊΠ°ΠΊ это происходило ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π² отрасли.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Π°Ρ, нСпримиримая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ статичСским ΠΈ динамичСским Π½Π°Π±ΠΎΡ€ΠΎΠΌ тСкста

Мой ΠΊΠΎΠ΄ Π΄Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈΠΊΠΎΠ² динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.Оба ΠΎΠ±Ρ€Π°Π·Π° ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ Π·Π°ΠΊΠΎΠ½Π½Ρ‹ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ инструмСнтов, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚.

БтатичСская типизация Ρ…ΠΎΡ€ΠΎΡˆΠ° для ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с участиСм сотСн Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ Π½ΠΈΠΌΠΈ Π³ΠΎΠ΄Π°ΠΌΠΈ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ динамичСская типизация Ρ…ΠΎΡ€ΠΎΡˆΠ° для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΊΠΎΠ΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для записи. ДинамичСская типизация позволяСт Π²Π°ΠΌ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя ΠΈ усилия Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ статичСская типизация Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Ρ‚ΠΎΠ»Ρ‡ΠΎΠΊ Π² ΠΊΠΎΠ½Ρ†Π΅.

ИдСя ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ мСсто ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ повлияла Π½Π° ΠΌΠΎΠ΅ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.Π’Ρ‹Π±Ρ€Π°Π² C # Π² Π½Π°Ρ‡Π°Π»Π΅ своСй ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρ‹, я ТСстко Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π» ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ Π² своСм ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΈ, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ я Ρ€Π°ΡΠΏΠ»Π°Ρ‡ΠΈΠ²Π°ΡŽΡΡŒ Π·Π° эту Π½Π΅Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ. Π£Π²ΠΈΠ΄Π΅Π² Π·Π°Π΄Π°Ρ‡Ρƒ, я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΡ€Π°Π²ΠΈΠ» ΠΈΡ… Π²Π·Π°ΠΈΠΌΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ. Когда я Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг - ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для взаимодСйствия со своСй срСдой. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π½Π΅ помню, ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅ Ρ€Π΅ΡˆΠ°Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π’Π΅ΡΡŒ процСсс обучСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Java - это ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ использованию Ρ‚ΠΈΠΏΠΎΠ²..NET CLR - срСда выполнСния C # - построСна Π½Π° Ρ‚ΠΈΠΏΠ°Ρ… ΠΈ для Ρ‚ΠΈΠΏΠΎΠ². БтатичСская типизация Π»Π΅ΠΆΠΈΡ‚ Π² основС ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (ΠΏΡ€ΠΈΠ²Π΅Ρ‚, классы JS, я Ρ€Π΅ΡˆΠΈΠ» Π΄Π°Ρ‚ΡŒ Π²Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Ρ‹ΡˆΠΊΡƒ). ΠšΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° шаблонов ООП насыщСны ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом Interface, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла Π² динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС.

Π‘Π°ΠΌΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования ΡΠ²Π»ΡΡŽΡ‚ΡΡ кросс-языковыми концСпциями, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΌΠ½Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Π·Π°Ρ‡Π΅ΠΌ ΠΌΠ½Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ΅Π½ шаблон состояния Π½Π° языкС с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ? А Ρ‡Ρ‚ΠΎ насчСт БтроитСля? Π­Ρ‚ΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ, ΠΎΠ½ΠΈ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ….Π’ΠΈΠΏΡ‹ ΠΈ ООП тСсно связаны.

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

Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ языки с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ смысла (хотя, ΠΏΡ€ΠΈΠ·Π½Π°ΡŽΡΡŒ, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Π½Π΅ Ρ‚Π°ΠΊ). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΡ… использовании Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ ООП ΠΊΠ°ΠΊ Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹. ВсС это Сдинство Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, управляСмых Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ для Ρ‚Π΅Ρ…, Ρƒ ΠΊΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ статичСская типизация.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я столкнулся, Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ статичСская типизация Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ стСпСни влияСт Π½Π° способ кодирования, поэтому ΠΎΠ½ΠΈ просто ΠΏΠΈΡˆΡƒΡ‚ свой ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ использовали динамичСский язык, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ².Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ это Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. ОсобСнно это Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ Π² случаС соврСмСнного front-end.

Π― знаю, знаю, Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Ρƒ Π½Π° ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Мой Π΄Ρ€ΡƒΠ³ ΠΈ я ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ создали AI-Π±ΠΎΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€ΠΎΠ»Π»ΠΈΠ» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Twitter, ΠΈ ΠΌΡ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ Π½Π° Π½Π΅Π³ΠΎ набросок Π‘Ρ€Π΅Π½Π΄Π°Π½Π° Π­ΠΉΡ…Π°. Π‘Π΅Ρ€ΡŒΠ΅Π·Π½ΠΎ, Ρƒ создатСля JavaScript Π±Ρ‹Π»ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ нашСй Π½Π΅ΠΉΡ€ΠΎΠ½Π½ΠΎΠΉ сСти.

По ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ эти рСбята просто Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΆΠΈΡ‚ΡŒ Π² ΠΌΠΈΡ€Π΅, Π³Π΄Π΅ ΠΈΡ… Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΡ‹Π΅ нСдостатки.Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ я ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ… ΠΈΠ· Π½ΠΈΡ…, ΠΊΡ‚ΠΎ Π²ΠΌΠ΅ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π² ΠΌΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ расслаблСнным, Β«Π»ΡŽΠ±Ρ‹ΠΌΒ» способом.

ΠœΡ‹ Π±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΠΈ ΠΆΠΈΡ‚ΡŒ Π² Π½Π°ΡˆΠΈΡ… ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½Ρ‹Ρ… ΠΌΠΈΡ€Π°Ρ…, Π½ΠΎ TypeScript собрал нас вмСстС

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, мСня: ΠΈΠ·-Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΉ ΠΊΠΎΠ΄ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Когда я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, я полагаюсь Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΈΠΏΡ‹. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽ всС случаи, ΠΊΠΎΠ³Π΄Π° этот ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ тСкста Π΄Π΅Π»Π°Π΅Ρ‚ это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ).Но Π·Π°Ρ‚Π΅ΠΌ ΠΊ ΠΌΠΎΠ΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ присоСдиняСтся JS-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π±Π΅Ρ€Π΅Ρ‚ ΠΌΠΎΠΉ Ρ‚ΠΈΠΏ, ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² Any ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ воспроизводимым ошибкам.

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

Π˜Ρ… убийствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ TypeScript - это просто надмноТСство JS. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ нСльзя ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ TypeScript - нСзависимый язык, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ Ρ‡Π΅Ρ€Ρ‚ΠΎΠ² ΠΊΠΎΡ€ΠΎΠ»ΡŒ внСшнСго интСрфСйса.ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° - статичСской, Π° Π½Π΅ динамичСской ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ прСимущСством статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Ρ‚ΠΎ Π²Ρ‹ просто Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚Π΅ своС врСмя ΠΈ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ Π½Π° описаниС ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ этих Ρ‚ΠΈΠΏΠΎΠ², Π½Π΅ получая Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ.

МногиС Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ TypeScript - это компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ систСмами Ρ‚ΠΈΠΏΠΎΠ² JS ΠΈ Java. Π§Ρ‚ΠΎ ΠΆ, это Π½Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ компромисс, Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ собствСнная систСма особого Ρ‚ΠΈΠΏΠ°.

Π₯ΡƒΠΆΠ΅ всСго Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сСгодня каТдая вторая Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ владСния TypeScript. Π­Ρ‚ΠΎ ΠΏΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² JS Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° возмоТности TypeScript ΠΈ сразу ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ написанию ΠΊΠΎΠ΄Π° Π½Π° Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ распространСниС врСдоносных ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ. Π‘Ρ‹Π²Π°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ Π½ΡƒΠΆΠ½Π° статичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ², Π½ΠΎ ΠΎΠ½Π° Π±Ρ‹Π»Π° ΠΈΠΌ навязана, поэтому ΠΎΠ½ΠΈ испортили Π΅Π΅. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ со статичСской ΠΈ динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Π½Ρ‹.

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ JavaScript ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ инструмСнтом для написания ΠΊΠΎΠ΄Π° быстрого Π²Π·Π»ΠΎΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π±Π΅Π· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… абстракций. Π‘Π°ΠΌΡ‹ΠΉ Π²ΠΎΠΏΠΈΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Ice Factory. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΡ€ΠΌΠΈΡ‚ΡŒ Π΅ΠΌΡƒ свои экзСмпляры, ΠΈ ΠΎΠ½ ΠΎΠ±Π΅Ρ€Π½Π΅Ρ‚ ΠΈΡ… Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ Π²ΠΎ врСмя выполнСния. Если я ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ свой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π°ΠΊΡƒΡŽ ​​фабрику, ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ Π΅Π³ΠΎ эквивалСнт, Π½ΠΎ Ссли я ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΅Π³ΠΎ свойств, ΠΎΠ½ выдаст ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. WAT?!?

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Π²ΠΎΠ·Π½ΠΈΠΊ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π³Π΄Π΅-Ρ‚ΠΎ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎ ΠΊΡ€ΡƒΡ‚ΠΎΠΉ нСизмСняСмости, поэтому ΠΎΠ½ΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ это Π΄Π΅Ρ€ΡŒΠΌΠΎ Π½Π° свой язык, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ Π΄Ρ‹Ρ€Π° Π² Π³ΠΎΠ»ΠΎΠ²Π΅.Π’ TypeScript я ΠΌΠΎΠ³Ρƒ ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ, Π½ΠΎ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции Π½Π° ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ ΠΈ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΌΠ½Π΅ это вряд Π»ΠΈ Π½ΡƒΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ чисто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, F #, Haskell, OCaml, Clojure, ReasonML - Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Π·Π°ΠΏΡ€Π΅Ρ‚ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ. Но Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΌΠ½Π΅ подсказываСт, Ρ‡Ρ‚ΠΎ Ссли Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π² свои Ρ€ΡƒΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ язык, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ² ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ JavaScript.

Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±ΠΎΡ€ вСроисповСдания пСчатания - это Π±ΠΈΠ»Π΅Ρ‚ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½Π΅Ρ†. ВсС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой лишь иллюзию компромисса. Π’Ρ‹ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° Ρ‚ΠΈΠΏΡ‹, Π»ΠΈΠ±ΠΎ Π½Π΅Ρ‚. НС знаю, измСнилась Π±Ρ‹ моя Тизнь, Ссли Π±Ρ‹ я Π½Π°Ρ‡Π°Π» ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ C # ΠΈ JavaScript ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. БСгодня я Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π΅Π·Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠΆΠ΄Π΅ΡΡ‚Π²Π»ΡΡŽ сСбя со своим ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ просто Π½Π΅ Π²ΠΈΠΆΡƒ прСимущСств динамичСской ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ (ΠΈ Π½Π΅ Ρ…ΠΎΡ‡Ρƒ ΠΈΡ… Π²ΠΈΠ΄Π΅Ρ‚ΡŒ). Они ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΌΠΎΠ΅Π³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° видимости, поэтому всС, Ρ‡Ρ‚ΠΎ я ΠΌΠΎΠ³Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½Π° Π½ΠΈΡ… Π³Π»Π°Π·Π°, ΠΊΠ°ΠΊ ΠΈ Π½Π° Π»ΡŽΠ±Ρ‹Π΅ явлСния, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠ½Π΅ приходится ΠΌΠΈΡ€ΠΈΡ‚ΡŒΡΡ Π² этом ΠΌΠΈΡ€Π΅.Π― знаю, Ρ‡Ρ‚ΠΎ ошибаюсь, Π½ΠΎ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ здСсь ΠΈ сСйчас, ΠΈ Ρƒ мСня Π½Π΅Ρ‚ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° Π·Π°Π±ΠΎΡ€Π΅.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ я Π½Π΅ Ρ…ΠΎΡ‡Ρƒ ΠΈΡΠΊΠ°Ρ‚ΡŒ компромиссы, я скаТу прямо. Если Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ шаги Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ!

.

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

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