Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мноТСствСнноС присваиваниС

ObjectScript β€” Π½ΠΎΠ²Ρ‹ΠΉ язык программирования

Бколько ΠΆΠ΅ сущСствуСт всяких языков программирования, Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½? Ну ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Ρ‚Π°ΠΊ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ: я программист ΠΈ ΠΏΠΈΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках программирования для Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Π’ ΠΎΠ΄Π½ΠΈΡ… языках Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΏΠ»ΡŽΡΡ‹, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… β€” Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π’ΠΎΡ‚ я ΠΈ Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ свой ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык программирования для мноТСства Π·Π°Π΄Π°Ρ‡.

ObjectScript сочСтаСт Π² сСбС возмоТности Ρ‚Π°ΠΊΠΈΡ… языков, ΠΊΠ°ΠΊ JavaScript, Lua ΠΈ PHP. НапримСр, синтаксис Π² основном взят ΠΈΠ· JavaScript, мноТСствСнноС присваиваниС β€” ΠΈΠ· Lua, Ρ€Π°Π±ΠΎΡ‚Π° со свойствами Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ β€” ΠΈΠ· PHP.

ΠšΡ€ΠΎΠΌΠ΅ ΡƒΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… языков программирования, ObjectScript добавляСт Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ свои ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ„ΠΈΡˆΠΊΠΈ.

Бинтаксис

А Ρ‡Ρ‚ΠΎ Ссли ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ с запятыми?

ObjectScript автоматичСски Ρ€Π°Π·ΠΏΠΎΠ·Π½Π°Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ выраТСния (новая строка Ρ‚ΡƒΡ‚ Π½Π΅ ΠΏΡ€ΠΈΡ‡Π΅ΠΌ, всС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Π² ΠΎΠ΄Π½Ρƒ строчку), поэтому Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой (;) ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· явной Π½Π° Ρ‚ΠΎ нСобходимости.

Π’Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠŸΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ синтаксис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языках программирования:

А Π·Π°Ρ‡Π΅ΠΌ Ρ‚Π°ΠΌ собствСнно запятая?

ЗапятыС Π² ObjectScript ΠΏΡ€ΠΈ пСрСчислСнии ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹. НапримСр, Π΅ΡΡ‚ΡŒ Π² языкС такая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ concat, которая соСдиняСт всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΎΠ΄Π½Ρƒ строку, Ρ‚ΠΎΠ³Π΄Π° игнорируя запятыС ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

ΠšΡ€Π°ΡΠΈΠ²ΠΎ ΠΈ понятно! name, count ΠΈ time β€” Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ строк ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· эту функция, Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ .. (Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ) для ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° функция concat ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, Π΄Π° ΠΈ быстрСС ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Иногда Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках Π·Π°Π΄Π°Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠΌ для JavaScript синтаксисС. Π’Π°ΠΊΠΎΠΉ синтаксис ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ поддСрТиваСтся Π² ObjectScript, Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² выглядит НЕ ΠΎΡ‡Π΅Π½ΡŒ красиво. А Ρ‡Ρ‚ΠΎ Ссли ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки?

Π£ΠΆΠ΅ симпатичнСС?! Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ взята ΠΈΠ· Lua. Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊΠΈ просто ΠΈ Ρ‡ΠΈΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ!

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Но вСрнСмся ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ. А Π·Π°Ρ‡Π΅ΠΌ Ρ‚Π°ΠΌ собствСнно запятая Π² описании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°? А Ссли Π±Π΅Π· Π½Π΅Π΅?

Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Π½ΠΈΡ‡Π΅Π³ΠΎ лишнСго, Π° Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

Π’.Π΅. ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ°Ρ€ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ (индСкс ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΈ Π·Π½Π°ΠΊ Ρ€Π°Π²Π½ΠΎ. ΠšΡ€ΠΎΠΌΠ΅ этого, допускаСтся ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€ запятыми, Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запяток (;) ΠΈΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ вовсС. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ использованиС Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… символов послС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ значСния допускаСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ допустимо Π² ObjectScript:

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ассоциативныС значСния, Π½ΠΎ ΠΈ порядковыС с автоматичСским индСксом, ΠΊΠ°ΠΊ Π² масивС. ИндСкс начинаСтся с нуля. НапримСр:

Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ one. А Ρ‡Ρ‚ΠΎ Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² качСствС индСкса значСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ константу, Π»Π΅Π³ΠΊΠΎ:

Π’.Π΅. Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках Π±ΡƒΠ΄Π΅Ρ‚ вычислСно Π½Π° этапС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ использован Π² качСствС индСкса ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ значСния Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Π˜Π½Π°Ρ‡Π΅ говоря:

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ сохраняСтся Ρ‚Π°ΠΊΠΈΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС значСния Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (это Π±Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΠΎ Π² ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… процСссах, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅).

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² качСствС индСкса значСния ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ любого Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ powerful, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ это Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти. Π˜Π½Π°Ρ‡Π΅ говоря, Ссли Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ смСло.

ΠœΠ°ΡΠΈΠ²Ρ‹

ΠœΠ°ΡΠΈΠ²Ρ‹ β€” это индСксныС списки. Как ΠΈ Π² JavaScript масив ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Ну Π² Ρ†Π΅Π»ΠΎΠΌ всС понятно ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, СдинствСнноС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΡƒΡ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ β€” ΡƒΠ±Ρ€Π°Ρ‚ΡŒ запятыС:

Выглядит Π΄Π°ΠΆΠ΅ интСрСсно ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Π°Π»ΠΈΠ΄Π½ΠΎ для ObjectScript.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ присваиваниС

ObjectScript ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСствСнноС присваиваниС ΠΈ выглядит это ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i присвоится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, j присвоится 1, k β€” 3. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹ΠΌ слСдствиСм мноТСствСнного присваивания являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ смСны Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠΉ строкой:

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

Ѐункция test Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π²Π° значСния, Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ a сохранится 1, Π° Π² b β€” 2. Если Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ большС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‡Π΅ΠΌ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, Ρ‚ΠΎ количСство Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² дополнится пустыми значСниями β€” null

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ элСмСнты Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ списка Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ с этими элСмСнтами. НапримСр, ΠΏΡƒΡΡ‚ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ элСмСнты ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΡ… индСксы ΠΈ значСния:

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚:

Когда компилятор ObjectScript Π²ΠΈΠ΄ΠΈΡ‚ for in, ΠΎΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ‚ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, для ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

По-русски говоря для obj вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ __iter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π—Π°Ρ‚Π΅ΠΌ эта функция вызываСтся ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ шагом ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ:

Она Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΠ½Π°Ρ‡Π΅ говоря true, Ссли тСкущая итСрация Π²Π°Π»ΠΈΠ΄Π½Π°, Π° Π·Π°Ρ‚Π΅ΠΌ любоС количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ программист ΠΎΡ‚ Π΄Π°Π½Π½ΠΎΠ³ΠΎ процСсса ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ обрабатываСтся языком ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ:

Если процСсс ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½, Ρ‚ΠΎ break ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Ρ†ΠΈΠΊΠ».

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

Π­Ρ‚ΠΎ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ масивам. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ масива Π½Π° ObjectScript выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’ΡƒΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТно, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎ-порядку. Array β€” это глобальная пСрСмСнная, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТится описаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° для масивов. Π’ Π‘++ это Π±Ρ‹Π» Π±Ρ‹ class Array. Когда создаСтся масив, ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Array ΠΊ качСствС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°. Π•Π΅ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ true (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ === это строгоС сравнСниС Π±Π΅Π· прСобразования Ρ‚ΠΈΠΏΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²). Но вСрнСмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ. Π’ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅ Array пСрСгруТаСтся функция __iter (ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΎΠ½Π° вызываСтся ΠΏΡ€ΠΈ запускС процСсса ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ). А Π΄Π°Π»Π΅Π΅ начинаСтся хитрая ΡˆΡ‚ΡƒΠΊΠ° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ (Π°Π½Π³. closure). Π”Π°, ObjectScript ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ замыкания Π² ΠΏΠΎΠ»Π½ΠΎΠΌ объСмС β€” это ΠΊΠΎΠ³Π΄Π° любая влоТСнная функция ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ всСх своих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ (Π΄Π°ΠΆΠ΅ Ссли Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ выполнСния). Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, нас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ i, self.

Π’ i сохраняСтся 0, Π° Π² self сохраняСтся this (это ссылка Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС масив, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ).

Π”Π°Π»Π΅Π΅ возвращаСтся функция, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π­Ρ‚Π° функция провСряСт, Π½Π΅ достигли Π»ΠΈ ΠΌΡ‹ ΠΊΠΎΠ½Ρ†Π° масива (# β€” это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство элСмСнтов), ΠΈ Ссли всС ΠΎΠΊ, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true (показывая, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π² процСссС), Π΄Π°Π»Π΅Π΅ индСкс ΠΈ само Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ этом сам индСкс ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· инкрСмСнтируСтся. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ возвращаСтся, Ρ‚.Π΅. функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ своим СстСствСнным ΠΏΡƒΡ‚Π΅ΠΌ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½Π½Ρ‹Π΅ значСния, Π² Ρ‚ΠΎΠΌ числС iter_valid, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ null ΠΈ Ρ†ΠΈΠΊΠ» прСкращаСтся ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ:

Имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ iter_valid ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Ρ‚ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² качСствС удобства, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ создаСтся врСмСнная пСрСмСнная, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ программист Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ сами напишСм ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€.

Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Β«Π° ΠΊΠ°ΠΊ ΠΆΠ΅ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ‚Π°ΠΌ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ __iter?Β» ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π². Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ самого сСбя ΠΈ описан ΡΠ»Π΅Π΄ΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Function β€” это ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ для всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΌ находятся ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ call ΠΈ apply, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ эквивалСнтны Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ Π² JavaScript.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ООП) Π² ObjectScript

Как ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈΠ· названия языка, ΠΎΠ½ просто обязан Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ООП Π²ΠΎ всСй своСй красС.

ОпишСм класс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим экзСмпляр Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса:

ЀактичСски Person β€” это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ вызываСтся, ΠΊΠ°ΠΊ функция, ObjectScript автоматичСски создаСт Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ __construct. Π’Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Если Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:

Из Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΠΈΡˆΠ΅ΠΊ слСдуСт Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ __get@fullname, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСявно вызываСтся ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° walk:

ΠœΠ΅Ρ‚ΠΎΠ΄ __get@fullname Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства fullname. ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для установки свойств, Π½ΠΎ ΠΎΠ± этом ΠΏΠΎΠ·ΠΆΠ΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Бвойства, getter-Ρ‹ ΠΈ setter-Ρ‹.

Из интСрСсного Ρ‚ΡƒΡ‚ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ __get@fullname содСрТит символ @, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ObjectScript являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ для Π»ΡŽΠ±Ρ‹Ρ… ΠΈΠΌΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π° ряду с символом $ Π½Ρƒ ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ стандартными символами.

НаслСдованиС

Π’Π΅ΠΏΠ΅Ρ€ΡŒ самоС врСмя ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Person.

НаслСдованиС дСлаСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ extends, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° выраТСния exp1 ΠΈ exp2, Π»ΡŽΠ±Ρ‹Ρ…, Π² Ρ‚ΠΎΠΌ числС расчитанных Π½Π° этапС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ эквивалСнтСн ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ:

Из интСрСсного Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ:

super Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса (ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°) с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС β€” это __construct, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ООП Π½Π° закуску

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€:

Бвойства, getter-Ρ‹ ΠΈ setter-Ρ‹

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

Π“Π΅Ρ‚Ρ‚Π΅Ρ€ (getter) β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства, сСттСр (setter) β€” устанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ObjectScript автоматичСски ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, считываСтся свойство ΠΈΠ»ΠΈ устанавливаСтся, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Как ΠΆΠ΅ это Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ свойства color ObjectScript ΠΈΡ‰Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ color. Если Ρ‚Π°ΠΊΠΎΠ²ΠΎΠ΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΎΠ½ΠΎ просто возвращаСтся. Если Π½Π΅Ρ‚, Ρ‚ΠΎ ищСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ __get@color, нашСлся β€” ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π·Π½Π°Ρ‡ΠΈΡ‚ ObjectScript Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Если Π½Π΅ нашСлся, Π½Π΅ Π±Π΅Π΄Π°, ObjectScript ΠΈΡ‰Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ __get. Если Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ присутствуСт, Ρ‚ΠΎ ObjectScript Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ свойства. Если Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ нашлось, Ρ‚ΠΎ возвращаСтся null ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°.

ΠŸΡ€ΠΈ установкС свойства, всС происходит Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Π½ΠΎ вмСсто __get ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ __set. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ delete, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ удаляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΈ использованиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __del.

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ свойства

ObjectScript ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ (ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языков) синтаксис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ эквивалСнтным:

А Ρ‡Ρ‚ΠΎ, Ссли Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ? Π’ ObjectScript это Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ!

ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ __setdim, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… β€” Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ свойства (ΠΈΡ… количСство ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ начиная ΠΎΡ‚ Π΄Π²ΡƒΡ…).

ΠŸΡƒΡΡ‚Ρ‹Π΅ свойства

А Ρ‡Ρ‚ΠΎ Π½Π° счСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?

Π’ΠΏΠΎΠ»Π½Π΅! ObjectScript Π² этом случаС Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ соотвСтствСнно: __getempty, __setempty, __delempty. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π».

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

На закуску нСсколько Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈ описании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π±Π»ΠΎΠΊΠ΅ пСрСчислСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², запятыС ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ:

Π’ функциях ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ arguments β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ масив всСх ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ функция Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°, . (Ρ‚Ρ€ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ) β€” масив Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ описаны Π² объявлСнии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ # Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° примСнСния ΠΌΠ΅Ρ‚ΠΎΠ΄ __len. Для строк ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство символов Π² строкС, Π° для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ масивов β€” количСство элСмСнтов. Π’Π°ΠΊΠΆΠ΅ Π² классС Object Π·Π°Π²Π΅Π΄Π΅Π½ΠΎ свойство:

А Ρ‚.ΠΊ. всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π² Ρ‚ΠΎΠΌ числС строка ΠΈ масивы, унаслСдованы ΠΎΡ‚ Object, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойство length, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² масивах, Π½Π° ΠΌΠ°Π½Π΅Ρ€ JavaScript.

Из Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… матСматичСских ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ** β€” Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ.

Из структурных конструкций Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹:

ΠžΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ строки ObjectScript Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² СдинствСнном экзСмплярС, это дСлаСтся автоматичСски. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, Π±Ρ‹Π»Π° строка ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° Π½Π° этапС выполнСния ΠΈΠ»ΠΈ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

ObjectScript ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… слова для Ρ†Π΅Π»Π΅ΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ β€” debugger (ΠΊΠ°ΠΊ Π² JavaScript). ΠŸΡ€ΠΈ срабатывании debugger ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° остановится Π² Π΄Π΅Π±Π°Π³Π΅Ρ€Π΅, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ΅ останова. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ β€” debuglocals, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ассоциативный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с названиями Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ использования debuglocals Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Ρ‹Ρ… ΠΈ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. НапримСр:

ObjectScript Ρ€Π°Π·ΠΏΠΎΠ·Π½Π°Π΅Ρ‚ tail call. Π­Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ возвращаСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π΄Ρ€. Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ этом случаС вызываСмая функция ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ call stack Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΠ²Π°Ρ‚ΡŒ call stack, добавляя сСбя Π² Π½Π΅Π³ΠΎ.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ‚ΠΈΠΏ boolean происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: значСния null, false ΠΈ NaN Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ false, всС Π΄Ρ€. значСния β€” true, Π² Ρ‚ΠΎΠΌ числС пустая строка ΠΈ число 0.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ && ΠΈ || Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΎ ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

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

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ typeof, valueof, numberof, stringof, arrayof, objectof, functionof, userdataof. БпСцификация этих ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² прорабатываСтся.

Ну Π²ΠΎΡ‚ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ. Если Π²Π°ΠΌ ObjectScript каТСтся интСрСсным, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ язык вмСстС. Π’Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ β€” сборщик мусора, багфикс, оптимизация, докумСнтация, environment для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ синтаксиса, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° многострочных констант, компиляция Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, компиляция Π² JavaScript (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ для Π²Π΅Π±Π°). ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΠΉΡ‚Π΅ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ языка Π² процСссС формирования, поэтому Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ интСрСсны.

Об ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с C++ расскаТу Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… статСй. Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅:

Как Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ описано Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅? Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ исходники, ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ с рСпозитория Π½Π° github, прямая ссылка для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΏΠ°ΠΏΠΊΡƒ OS\examples ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» test3.cmd.

Π’ Ρ„Π°ΠΉΠ»Π΅ test3.txt гСнСрируСтся отладочная информация Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ObjectScript скомпилировал исходник, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания процСссов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят Π²Π½ΡƒΡ‚Ρ€ΠΈ языка, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ сухом остаткС

ObjectScript ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ совмСстим с JSON, Ρ‚.ΠΊ. ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠ°ΠΊ свой Ρ€ΠΎΠ΄Π½ΠΎΠΉ, Π½ΠΎ добавляСт Π² описаниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ масивов свой Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ ΠΈ простой синтаксис. ObjectScript Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ всС ΠΏΠ»ΡŽΡΡ‹ Ρ‚Π°ΠΊΠΈΡ… языков, ΠΊΠ°ΠΊ JavaScript, Lua ΠΈ PHP, ΠΏΡ€ΠΈ этом добавляСт свои ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ возмоТности программирования. ObjectScript β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ всС Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new ΠΏΡ€ΠΈ этом Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, минимизируя ΠΊΠΎΠ΄ ΠΈ дСлая Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ. Бинтаксис ObjectScript ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ конструкции, Π½ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° простоту ΠΈ Ρ‡ΠΈΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ObjectScript ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для вставки Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° C++, позволяСт ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π‘++ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… (Π² Ρ‚ΠΎΠΌ числС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…). ObjectScript β€” ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΈΠΉ, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ исходники Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ 459 Кб. Π―Π·Ρ‹ΠΊ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ вСрсии ΠΈ находится Π² стадии формирования спСцификации ΠΈ балансировки.

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ я Π½Π°Ρ‡Π°Π» Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ использованию языка ObjectScript ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Π΅Ρ‚ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ссылкам:

Π² описании ΠΊ Π²ΠΈΠ΄Π΅ΠΎ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ссылки, ΠΎΡ‚ ΠΊΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹Π΅ исходники ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

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

PEP 572 (ВыраТСния присваивания Π² python 3.8)

PEP 572 β€” ВыраТСния ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ

Аннотация

Π­Ρ‚ΠΎ соглашСниС расскаТСт ΠΎ появившСйся возмоТности присваивания Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½ΠΎΠ²ΠΎΠ³ΠΎ обозначСния NAME := expr.

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ Π±Ρ‹Π» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ порядок вычислСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² словарСй (dictionary comprehension). Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° вычислится ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ значСния (это позволяСт ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² вычислСнии значСния, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ).

Π’ΠΎ врСмя обсуТдСния этого PEP, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ стал Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ извСстСн ΠΊΠ°ΠΊ Β«ΠΌΠΎΡ€ΠΆΠΎΠ²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Β» (the walrus operator). Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ имя конструкции β€” Β«Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ присваивания» (согласно Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ PEP: Assignment Expressions), Π½ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ Β«Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ выраТСния» (Named Expressions). НапримСр, эталонная рСализация Π² CPython ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ это Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

ОбоснованиС

ИмСнованиС являСтся Π²Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ программирования, которая позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅Β» имя вмСсто Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ выраТСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ настоящСС врСмя это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ лишь Π² Π²ΠΈΠ΄Π΅ инструкции, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ нСдоступной ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ списков (list comprehension), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… выраТСниях.

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

Π’Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

Π’ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этого PEP ΠΌΠ½ΠΎΠ³ΠΈΠ΅ люди (ΠΊΠ°ΠΊ сторонники, Ρ‚Π°ΠΊ ΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΈ) слишком ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π½Π° ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… с ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΈ Π½Π° Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎ слоТных ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

ΠžΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² двояка: ΠΎΠ½ΠΈ часто слишком абстрактны, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Β«ΠΎ, это Π½Π΅ΠΎΡ‚Ρ€Π°Π·ΠΈΠΌΠΎΒ», Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒ со словами Β«Π― Π±Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ‚Π°ΠΊ Π½Π΅ написал». ΠžΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΆΠ΅ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎ слоТных ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ срСду для ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΎΠ², ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰ΠΈΡ… ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» (Β«Π­Ρ‚ΠΎ слишком Π·Π°ΠΏΡƒΡ‚Π°Π½ΠΎΒ», говорят Ρ‚Π°ΠΊΠΈΠ΅ люди).

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

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° β€” это косвСнноС наблюдСниС Π·Π° Ρ‚Π΅ΠΌ, насколько программисты цСнят ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ. Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россум ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Dropbox ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ программисты ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ мСньшС строк ΠΊΠΎΠ΄Π°, Π½Π΅ΠΆΠ΅Π»ΠΈ Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

Π’ΠΎΡ‚ Π΅Ρ‰Ρ‘ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ программисты ΠΈΠ½ΠΎΠ³Π΄Π° Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ большС Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Β«ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒΒ» отступов:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ вычисляСт pattern2, Π΄Π°ΠΆΠ΅ Ссли pattern1 ΡƒΠΆΠ΅ совпал (Π² этом случаС Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄-условиС Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ выполнится). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ являСтся Π±ΠΎΠ»Π΅Π΅ эффСктивным, Π½ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ:

Бинтаксис ΠΈ сСмантика

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, Π³Π΄Π΅ Π² Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ выраТСния (arbitrary expressions), Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ выраТСния присваивания. Они ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΡƒ NAME := expr, Π³Π΄Π΅ expr β€” любоС допустимоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Python, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π±Π΅Π· скобок (unparenthesized tuple), Π° NAME β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ выраТСния совпадаСт с исходным, Π½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ эффСктом являСтся присвоСниС значСния Ρ†Π΅Π»Π΅Π²ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ:

Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ случаи

Π•ΡΡ‚ΡŒ нСсколько мСст, Π³Π΄Π΅ выраТСния присваивания Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ двусмыслСнности ΠΈΠ»ΠΈ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ срСди ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ:

НС Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² скобки выраТСния присваивания Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ Π² значСниях ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ всё выглядящСС, ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания Π² f-строкС, являСтся Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌ. ΠŸΠ°Ρ€ΡΠ΅Ρ€ f-строки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ символ «:» для указания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² форматирования. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΈ использовании ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания Π²Π½ΡƒΡ‚Ρ€ΠΈ f-строк ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² скобки. Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅, Ρ‚Π°ΠΊΠΎΠ΅ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания Π½Π΅ рСкомСндуСтся.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ присваивания Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ²ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ создана пСрСмСнная, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ пояснСний: ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ. Если ΠΏΡ€Π΅ΠΆΠ΄Π΅ пСрСмСнная использовала ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова nonlocal ΠΈΠ»ΠΈ global, Ρ‚ΠΎΠ³Π΄Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ присваивания ΡƒΡ‡Ρ‚Ρ‘Ρ‚ это. Волько лямбда (Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) считаСтся для этих Ρ†Π΅Π»Π΅ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости.

БущСствуСт ΠΎΠ΄ΠΈΠ½ особый случай: Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ присваивания, Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰Π΅Π΅ΡΡ Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… списков, мноТСств, словарСй ΠΈΠ»ΠΈ ΠΆΠ΅ Π² самих «выраТСниях Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…Β» (Π½ΠΈΠΆΠ΅ всС вмСстС ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΡ‹Π΅ Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈΒ» (comprehensions) ), привязываСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΊ области видимости, которая содСрТит Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, соблюдая ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ globab ΠΈΠ»ΠΈ nonglobal, Ссли Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ сущСствуСт.

ОбоснованиС для этого особого случая двояко. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это позволяСт Π½Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ «участника» Π² выраТСниях any () ΠΈ all(), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, это прСдоставляСт ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ способ обновлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

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

НапримСр, [i: = i + 1 for i in range(5)] нСдопустимо: Ρ†ΠΈΠΊΠ» for устанавливаСт, Ρ‡Ρ‚ΠΎ i являСтся локальной для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π½ΠΎ Ρ‡Π°ΡΡ‚ΡŒ Β«i := i+1Β» настаиваСт Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ i являСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· внСшнСй области видимости. По Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅ ΡΡ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚:

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

Для Ρ‚Π΅Π»Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° (Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом Β«forΒ») ΠΈ выраТСния-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° (Ρ‡Π°ΡΡ‚ΡŒ послС Β«ifΒ» ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π»ΡŽΠ±Ρ‹ΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Β«forΒ») это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ примСняСтся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² качСствС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Как ΠΌΡ‹ ΡƒΠΆΠ΅ сказали, Лямбда-выраТСния вводят Π½ΠΎΠ²ΡƒΡŽ ΡΠ²Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² выраТСниях Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. [ΠΏΡ€ΠΈΠΌ. ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π°ΠΊΠΈΡ… случаСв: [i for i in range(2, (lambda: (s:=2)() ))] ]

Из-Π·Π° конструктивных ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π² эталонной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ символов Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π»ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΈΠ· Π»Π΅Π²ΠΎΠΉ части Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π² ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части, Π³Π΄Π΅ находится ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅), поэтому выраТСния присваивания ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… (Π² части послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Β«inΒ» ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом Β«ifΒ» ΠΈΠ»ΠΈ Β«forΒ»). Π’ΠΎ Π΅ΡΡ‚ΡŒ всС эти случаи нСдопустимы:

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ присваивания примСняСтся Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² области видимости класса. Если ΠΏΡ€ΠΈ использовании Π²Ρ‹ΡˆΠ΅ пСрСчислСнных ΠΏΡ€Π°Π²ΠΈΠ» Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ созданиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠΉ Π² области видимости класса, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ присваивания нСдопустимо ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ возникновСнию SyntaxError:

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

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ B для ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ выраТСния присваивания находящиСся Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² эквивалСнтный ΠΊΠΎΠ΄.

ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ :=

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ := группируСтся сильнСС, Ρ‡Π΅ΠΌ запятая Π²ΠΎ всСх синтаксичСских позициях Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ слабСС, Ρ‡Π΅ΠΌ всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ or, and, not, ΠΈ условныС выраТСния (A if C else B). Как слСдуСт ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° Β«Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ случаи» Π²Ρ‹ΡˆΠ΅, выраТСния присваивания Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ Β«ΡƒΡ€ΠΎΠ²Π½Π΅Β», Ρ‡Ρ‚ΠΎ ΠΈ классичСскоС присваиваниС =. Если трСбуСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ порядок ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ := ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСпосрСдствСнно ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Однако нСпосрСдствСнно Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ это Π½Π΅ сработаСт. НСкоторыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΡƒΡ‚ΠΎΡ‡Π½ΡΡŽΡ‰ΠΈΠ΅, Ρ‡Ρ‚ΠΎ являСтся тСхничСски Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹ΠΌ, Π° Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ:

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ «допустимых» ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π½Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ люди, быстро ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ваш исходный ΠΊΠΎΠ΄, ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π΅Π³ΠΎ смысл. Но Π² простых случаях это Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ:

Π­Ρ‚ΠΎΡ‚ PEP Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всСгда ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ :=, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ PEP 8 для = для классичСского присваивания. (ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ послСднСй Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ =, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.)

ИзмСнСниС порядка вычислСний.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ сСмантику, Π΄Π°Π½Π½ΠΎΠ΅ соглашСниС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ порядок ΠΎΡ†Π΅Π½ΠΊΠΈ Π±Ρ‹Π» Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. ВСхничСски это Π½Π΅ являСтся Π½ΠΎΠ²Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Π’ Python ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‡Ρ‚ΠΎ подвыраТСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ. Однако выраТСния присваивания Π΄Π΅Π»Π°ΡŽΡ‚ эти Β«ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты» Π±ΠΎΠ»Π΅Π΅ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌΠΈ, ΠΈ ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ порядкС вычислСний:

Различия ΠΌΠ΅ΠΆΠ΄Ρƒ выраТСниями присваивания ΠΈ инструкциями присваивания.

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

БпСцификация измСняСтся Π²ΠΎ врСмя Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния Π±Ρ‹Π»ΠΈ сдСланы Π½Π° основС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ написания Π΄Π°Π½Π½ΠΎΠ³ΠΎ PEP ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ выпуском Python 3.8:

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Python

site.py

env_base ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² условии, поэтому присваиваниС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² if, ΠΊΠ°ΠΊ Β«Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊΒ» логичСского Π±Π»ΠΎΠΊΠ°.

_pydecimal.py

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… if, Ρ‚Π΅ΠΌ самым ΡƒΠ΄Π°Π»ΠΈΠ² ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ отступов.

copy.py

Код выглядит Π±ΠΎΠ»Π΅Π΅ классичСским, Π° Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ мноТСствСнной влоТСнности условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². (Π‘ΠΌ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ A, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ происхоТдСнии этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.)

datetime.py

tz ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для s += tz. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΡŒ if ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ использования.

sysconfig.py

Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² списков

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ списка ΠΌΠΎΠΆΠ΅Ρ‚ эффСктивно Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡƒΡ‚Π΅ΠΌ Β«Π·Π°Ρ…Π²Π°Ρ‚Π°Β» условия:

ПослС этого пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ использована Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ:

Π•Ρ‰Ρ‘ Ρ€Π°Π· ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ±ΠΎΠΈΡ… случаях пСрСмСнная y находится Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области видимости, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ result ΠΈ stuff.

Β«Π—Π°Ρ…Π²Π°Ρ‚Β» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² условиях

ВыраТСния присваивания ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² условиях ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if ΠΈΠ»ΠΈ while:

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π° UNIX: [ΠΏΡ€ΠΈΠΌ. Fork() β€” систСмный Π²Ρ‹Π·ΠΎΠ² Π² Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄-процСсс, ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ.]

ΠžΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Π½Ρ‹Π΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹

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

ИзмСнСниС области видимости для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии этого PEP ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»ΠΈΡΡŒ внСсти Ρ‚ΠΎΠ½ΠΊΠΈΠ΅ измСнСния Π² ΠΏΡ€Π°Π²ΠΈΠ»Π° области видимости для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌΠΈ для использования Π² области видимости классов. Однако эти прСдлоТСния ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ Π±Ρ‹ ΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ нСсовмСстимости, поэтому Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π½Π½Ρ‹ΠΉ PEP смог ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° выраТСниях присваивания.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ написания

Π’ Ρ†Π΅Π»ΠΎΠΌ, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ выраТСния присваивания ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Ρƒ ΠΆΠ΅ сСмантику, Π½ΠΎ ΠΏΠΈΡˆΡƒΡ‚ΡΡ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

Π’Π°ΠΊ ΠΊΠ°ΠΊ конструкция EXPR as NAME ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ сСмантичСский смысл Π² выраТСниях import, except ΠΈ with, это ΠΌΠΎΠ³Π»ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΏΡ€Π΅Ρ‚ выраТСния присваивания Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² этих конструкций).

(ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Β«with EXPR as VARΒ» Π½Π΅ просто присваиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ EXPR Π² VAR, Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ EXPR.__enter__() ΠΈ ΡƒΠΆΠ΅ послС присваиваСт ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² VAR.)

Π­Ρ‚ΠΎΡ‚ синтаксис основан Π½Π° Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ R ΠΈ Haskell, Π½Ρƒ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°Ρ…. (ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ стрСлки справа-Π½Π°Π»Π΅Π²ΠΎ y

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

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

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