Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)

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

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

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

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

Π’ чистом Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈ явный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ присваивания

ΠžΠ±Ρ‰ΠΈΠΉ синтаксис простого присваивания выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Β«Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ слСва» Π΄ΠΎΠ»ΠΆΠ½ΠΎ послС вычислСния привСсти ΠΊ ΠΌΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ячСйки памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ запись. Π’Π°ΠΊΠΈΠ΅ ссылки Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «лСвосторонними значСниями» (Π°Π½Π³Π». lvalue ). Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ лСвостороннСго значСния β€” имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ( x ), ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² пространствС ΠΈΠΌΡ‘Π½ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ( Namespace.Library.Object.AnotherObject.Property ), ΠΏΡƒΡ‚ΡŒ ΠΊ массиву с Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° мСстС индСкса ( this.a[i+j*k] ), Π½ΠΎ Π½ΠΈΠΆΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹.

Β«Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ справа» Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ способом Ρ‚Ρƒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ присвоСна ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π°ΠΆΠ΅ Ссли справа стои́т имя Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ слСва, интСрпрСтируСтся ΠΎΠ½ΠΎ ΠΈΠ½Π°Ρ‡Π΅ β€” Ρ‚Π°ΠΊΠΈΠ΅ ссылки Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «правосторонними значСниями» (Π°Π½Π³Π». rvalue ). Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ ограничСния Π½Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ язык: Ρ‚Π°ΠΊ, Π² статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ цСлСвая пСрСмСнная, Π»ΠΈΠ±ΠΎ Ρ‚ΠΈΠΏ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΊ Π½Π΅ΠΌΡƒ; Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘ΠΈ ΠΈΠ»ΠΈ a=b=c ).

Данная запись эквивалСнтна Π²Ρ‹Π·ΠΎΠ²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Аналогично, Π² ΠšΠžΠ‘ΠžΠ›Π΅ старого стиля:

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания

Π‘ΠΈΠΌΠ²ΠΎΠ» присваивания

Π’Ρ‹Π±ΠΎΡ€ символа присваивания являСтся ΠΏΠΎΠ²ΠΎΠ΄ΠΎΠΌ для споров Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² языков. БущСствуСт ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ использованиС символа = для присвоСния Π·Π°ΠΏΡƒΡ‚Ρ‹Π²Π°Π΅Ρ‚ программистов, Π° Ρ‚Π°ΠΊΠΆΠ΅ ставит слоТный для Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ вопрос ΠΎ Π²Ρ‹Π±ΠΎΡ€Π΅ символа для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° равСнства.

Π­Ρ‚Π° плохая идСя Π½ΠΈΠ·Π²Π΅Ρ€Π³Π°Π΅Ρ‚ Π²Π΅ΠΊΠΎΠ²ΡƒΡŽ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΡŽ использования Π·Π½Π°ΠΊΠ° Β«=Β» для обозначСния сравнСния Π½Π° равСнство, ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π°, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ значСния «истина» ΠΈΠ»ΠΈ «лоТь».

Π’Ρ‹Π±ΠΎΡ€ символа ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° равСнства Π² языкС ΠΏΡ€ΠΈ использовании = ΠΊΠ°ΠΊ присваивания Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ:

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

НапримСр, Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ языка ΠŸΠ›/1:

БСмантичСскиС особСнности

Π”Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда Β«ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉΒ» (для программистов ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… языков) способ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ присваивания являСтся СдинствСнно Π²Π΅Ρ€Π½Ρ‹ΠΌ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ.

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

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

БлСдствиСм Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ провСсти присваиваниС Π΄Π°Π½Π½Ρ‹Ρ…, сформированных(располоТСнных) Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания.

Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ:

ΠΈΠ»ΠΈ Ρ‚Π°ΠΊ Ρ‚ΠΎ ΠΆΠ΅ самоС(сСмантичСски):

ΠΠ΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ присваивания

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Β«Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСния 2+1 (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 3) присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ X Β» ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ «опСрация 2+1 присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ X Β». Если язык статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‚ΠΎ двусмыслСнности Π½Π΅Ρ‚, ΠΎΠ½Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚ΠΈΠΏΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ X (Β«Ρ†Π΅Π»ΠΎΠ΅ число» ΠΈΠ»ΠΈ «опСрация»). Π’ языкС ΠŸΡ€ΠΎΠ»ΠΎΠ³ типизация динамичСская, поэтому ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присвоСния: is β€” присвоСниС эквивалСнтного значСния ΠΈ = β€” присвоСниС ΠΎΠ±Ρ€Π°Π·Ρ†Π°. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС:

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ·Π½Π°Π½Π° Π²Π΅Ρ€Π½ΠΎΠΉ, вторая β€” Π»ΠΎΠΆΠ½ΠΎΠΉ.

Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° ссылок

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈ слоТной структуры ΠΌΠ½ΠΎΠ³ΠΈΠ΅ языки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ «сСмантику ссылок». Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ присвоСния Π² классичСском смыслС Π½Π΅ происходит, Π½ΠΎ считаСтся, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ располагаСтся Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ мСстС, Ρ‡Ρ‚ΠΎ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ исходной. НапримСр (

ПодмСна ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

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

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

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ конструкции присваивания

Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания

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

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Одной ΠΈΠ· Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² простого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ присвоСния значСния выраТСния нСскольким ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. НапримСр, Π² языкС ΠŸΠ›/1 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

АналогичноС присвоСниС Π² языкС

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠŸΠ›/1, Ады ΠΈ ΠŸΠΈΡ‚ΠΎΠ½Π°, Π³Π΄Π΅ мноТСствСнноС присвоСниС считаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сокращённой Ρ„ΠΎΡ€ΠΌΠΎΠΉ записи, Π² языках Π‘ΠΈ, Лисп ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΉ синтаксис ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ основу: просто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присвоСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ присвоСнноС ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (см. Π²Ρ‹ΡˆΠ΅). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, послСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” это Π½Π° самом Π΄Π΅Π»Π΅:

Π‘Ρ‚Ρ€ΠΎΡ‡ΠΊΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° сработаСт Π² Π‘ΠΈ (Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой Π² ΠΊΠΎΠ½Ρ†Π΅), Π½ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ присваиваниС

НСкоторыС языки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π ΡƒΠ±ΠΈ ΠΈ

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

запись с использованиСм ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ присваивания«традиционноС» присвоСниС: Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Ρ‚Ρ€Ρ‘Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

НСкоторыС языки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

УсловныС Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

НСкоторыС языки программирования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C++ ΠΈ

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ условного присваивания (Π ΡƒΠ±ΠΈ):

БоставныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присваивания

Боставной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания позволяСт сокращённо Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ присвоСния. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого способа ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ запись присвоСния, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ цСлСвая пСрСмСнная ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π² ΠΏΡ€Π°Π²ΠΎΠΉ части выраТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π£Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присваивания

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для формирования Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присвоСния

ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° СдиницуэквивалСнтная Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ запись

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π² языкС Π‘ΠΈ часто ΡΠ²Π»ΡΡŽΡ‚ΡΡ сокращённой записью для формирования Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, содСрТащих индСксы массивов.

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

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅

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

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

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

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

Π’ чистом Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈ явный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ присваивания

ΠžΠ±Ρ‰ΠΈΠΉ синтаксис простого присваивания выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Β«Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ слСва» Π΄ΠΎΠ»ΠΆΠ½ΠΎ послС вычислСния привСсти ΠΊ ΠΌΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ячСйки памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ запись. Π’Π°ΠΊΠΈΠ΅ ссылки Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «лСвосторонними значСниями» (Π°Π½Π³Π». lvalue ). Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ лСвостороннСго значСния β€” имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ( x ), ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² пространствС ΠΈΠΌΡ‘Π½ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ( Namespace.Library.Object.AnotherObject.Property ), ΠΏΡƒΡ‚ΡŒ ΠΊ массиву с Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° мСстС индСкса ( this.a[i+j*k] ), Π½ΠΎ Π½ΠΈΠΆΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹.

Β«Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ справа» Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ способом Ρ‚Ρƒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ присвоСна ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π°ΠΆΠ΅ Ссли справа стои́т имя Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ слСва, интСрпрСтируСтся ΠΎΠ½ΠΎ ΠΈΠ½Π°Ρ‡Π΅ β€” Ρ‚Π°ΠΊΠΈΠ΅ ссылки Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «правосторонними значСниями» (Π°Π½Π³Π». rvalue ). Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ ограничСния Π½Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ язык: Ρ‚Π°ΠΊ, Π² статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ цСлСвая пСрСмСнная, Π»ΠΈΠ±ΠΎ Ρ‚ΠΈΠΏ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΊ Π½Π΅ΠΌΡƒ; Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘ΠΈ ΠΈΠ»ΠΈ Python) Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ другая опСрация присваивания ( a=b=c ).

Данная запись эквивалСнтна Π²Ρ‹Π·ΠΎΠ²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Аналогично, Π² ΠšΠžΠ‘ΠžΠ›Π΅ старого стиля:

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания

Π‘ΠΈΠΌΠ²ΠΎΠ» присваивания

Π’Ρ‹Π±ΠΎΡ€ символа присваивания являСтся ΠΏΠΎΠ²ΠΎΠ΄ΠΎΠΌ для споров Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² языков. БущСствуСт ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ использованиС символа = для присвоСния Π·Π°ΠΏΡƒΡ‚Ρ‹Π²Π°Π΅Ρ‚ программистов, Π° Ρ‚Π°ΠΊΠΆΠ΅ ставит слоТный для Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ вопрос ΠΎ Π²Ρ‹Π±ΠΎΡ€Π΅ символа для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° сравнСния.

Π­Ρ‚Π° плохая идСя Π½ΠΈΠ·Π²Π΅Ρ€Π³Π°Π΅Ρ‚ Π²Π΅ΠΊΠΎΠ²ΡƒΡŽ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΡŽ использования Π·Π½Π°ΠΊΠ° Β«=Β» для обозначСния сравнСния Π½Π° равСнство, ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π°, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ значСния «истина» ΠΈΠ»ΠΈ «лоТь».

Π’Ρ‹Π±ΠΎΡ€ символа ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° равСнства Π² языкС ΠΏΡ€ΠΈ использовании = ΠΊΠ°ΠΊ присваивания Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ:

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

НапримСр, Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ языка ΠŸΠ›/1:

БСмантичСскиС особСнности

Π”Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда Β«ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉΒ» (для программистов ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… языков) способ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ присваивания являСтся СдинствСнно Π²Π΅Ρ€Π½Ρ‹ΠΌ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ.

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

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

БлСдствиСм Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ провСсти присваиваниС Π΄Π°Π½Π½Ρ‹Ρ…, сформированных(располоТСнных) Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания.

Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ:

ΠΈΠ»ΠΈ Ρ‚Π°ΠΊ Ρ‚ΠΎ ΠΆΠ΅ самоС(сСмантичСски):

ΠΠ΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ присваивания

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Β«Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСния 2+1 (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 3) присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ X Β» ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ «опСрация 2+1 присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ X Β». Если язык статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‚ΠΎ двусмыслСнности Π½Π΅Ρ‚, ΠΎΠ½Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚ΠΈΠΏΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ X (Β«Ρ†Π΅Π»ΠΎΠ΅ число» ΠΈΠ»ΠΈ «опСрация»). Π’ языкС ΠŸΡ€ΠΎΠ»ΠΎΠ³ типизация динамичСская, поэтому ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присвоСния: is β€” присвоСниС эквивалСнтного значСния ΠΈ = β€” присвоСниС ΠΎΠ±Ρ€Π°Π·Ρ†Π°. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС:

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ·Π½Π°Π½Π° Π²Π΅Ρ€Π½ΠΎΠΉ, вторая β€” Π»ΠΎΠΆΠ½ΠΎΠΉ.

Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° ссылок

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈ слоТной структуры ΠΌΠ½ΠΎΠ³ΠΈΠ΅ языки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ «сСмантику ссылок». Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ присвоСния Π² классичСском смыслС Π½Π΅ происходит, Π½ΠΎ считаСтся, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ располагаСтся Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ мСстС, Ρ‡Ρ‚ΠΎ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ исходной. НапримСр (Python):

ПодмСна ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

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

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

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ конструкции присваивания

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

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Одной ΠΈΠ· Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² простого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ присвоСния значСния выраТСния нСскольким ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. НапримСр, Π² языкС ΠŸΠ›/1 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

АналогичноС присвоСниС Π² языкС Python ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠŸΠ›/1, Ады ΠΈ ΠŸΠΈΡ‚ΠΎΠ½Π°, Π³Π΄Π΅ мноТСствСнноС присвоСниС считаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сокращённой Ρ„ΠΎΡ€ΠΌΠΎΠΉ записи, Π² языках Π‘ΠΈ, Лисп ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΉ синтаксис ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ основу: просто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присвоСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ присвоСнноС ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (см. Π²Ρ‹ΡˆΠ΅). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, послСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” это Π½Π° самом Π΄Π΅Π»Π΅:

Π‘Ρ‚Ρ€ΠΎΡ‡ΠΊΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° сработаСт Π² Π‘ΠΈ (Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой Π² ΠΊΠΎΠ½Ρ†Π΅), Π½ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ присваиваниС

НСкоторыС языки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π ΡƒΠ±ΠΈ ΠΈ Python, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ синтаксис присвоСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ присвоСниСм:

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

запись с использованиСм ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ присваивания«традиционноС» присвоСниС: Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Ρ‚Ρ€Ρ‘Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

НСкоторыС языки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PHP) ΠΈΠΌΠ΅ΡŽΡ‚ конструкции, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡΡ‹ΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ присваиваниС:

УсловныС Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

НСкоторыС языки программирования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C++ ΠΈ Java, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ использованиС Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… присвоСния условных Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ условного присваивания (Π ΡƒΠ±ΠΈ):

БоставныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присваивания

Боставной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания позволяСт сокращённо Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ присвоСния. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого способа ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ запись присвоСния, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ цСлСвая пСрСмСнная ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π² ΠΏΡ€Π°Π²ΠΎΠΉ части выраТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π£Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присваивания

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для формирования Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присвоСния

ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° СдиницуэквивалСнтная Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ запись

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π² языкС Π‘ΠΈ часто ΡΠ²Π»ΡΡŽΡ‚ΡΡ сокращённой записью для формирования Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, содСрТащих индСксы массивов.

РСализация

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

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

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅

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

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

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

Π’ чистом Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈ явный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

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

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

ΠžΠ±Ρ‰ΠΈΠΉ синтаксис простого присваивания выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Β«Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ слСва» Π΄ΠΎΠ»ΠΆΠ½ΠΎ послС вычислСния привСсти ΠΊ ΠΌΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ячСйки памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ запись. Π’Π°ΠΊΠΈΠ΅ ссылки Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «лСвосторонними значСниями» (Π°Π½Π³Π». lvalue ). Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ лСвостороннСго значСния β€” имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ( x ), ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² пространствС ΠΈΠΌΡ‘Π½ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ( Namespace.Library.Object.AnotherObject.Property ), ΠΏΡƒΡ‚ΡŒ ΠΊ массиву с Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° мСстС индСкса ( this.a[i+j*k] ), Π½ΠΎ Π½ΠΈΠΆΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹.

Β«Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ справа» Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ способом Ρ‚Ρƒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ присвоСна ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π°ΠΆΠ΅ Ссли справа стои́т имя Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ слСва, интСрпрСтируСтся ΠΎΠ½ΠΎ ΠΈΠ½Π°Ρ‡Π΅ β€” Ρ‚Π°ΠΊΠΈΠ΅ ссылки Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «правосторонними значСниями» (Π°Π½Π³Π». rvalue ). Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ ограничСния Π½Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ язык: Ρ‚Π°ΠΊ, Π² статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ цСлСвая пСрСмСнная, Π»ΠΈΠ±ΠΎ Ρ‚ΠΈΠΏ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΊ Π½Π΅ΠΌΡƒ; Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘ΠΈ ΠΈΠ»ΠΈ Python) Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ другая опСрация присваивания ( a=b=c ).

Данная запись эквивалСнтна Π²Ρ‹Π·ΠΎΠ²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Аналогично, Π² ΠšΠžΠ‘ΠžΠ›Π΅ старого стиля:

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π’Ρ‹Π±ΠΎΡ€ символа присваивания являСтся ΠΏΠΎΠ²ΠΎΠ΄ΠΎΠΌ для споров Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² языков. БущСствуСт ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ использованиС символа = для присвоСния Π·Π°ΠΏΡƒΡ‚Ρ‹Π²Π°Π΅Ρ‚ программистов, Π° Ρ‚Π°ΠΊΠΆΠ΅ ставит слоТный для Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ вопрос ΠΎ Π²Ρ‹Π±ΠΎΡ€Π΅ символа для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° сравнСния.

ΠžΠ±Ρ‰Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½Ρ‹ΠΌ ΠΏΠ»ΠΎΡ…ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ являСтся Π²Ρ‹Π±ΠΎΡ€ Π·Π½Π°ΠΊΠ° равСнства для обозначСния присваивания, восходящий ΠΊ языку Fortran Π² 1957 Π³ΠΎΠ΄Ρƒ ΠΈ слСпо повторяСмый Π΄ΠΎ сих ΠΏΠΎΡ€ массой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² языков. Π­Ρ‚Π° плохая идСя Π½ΠΈΠ·Π²Π΅Ρ€Π³Π°Π΅Ρ‚ Π²Π΅ΠΊΠΎΠ²ΡƒΡŽ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΡŽ использования Π·Π½Π°ΠΊΠ° Β«=Β» для обозначСния сравнСния Π½Π° равСнство, ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π°, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ значСния «истина» ΠΈΠ»ΠΈ «лоТь». Но Π² Fortran этот символ стал ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ присваиваниС, ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊ равСнству. Π’ этом случаС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ находятся Π² Π½Π΅Ρ€Π°Π²Π½ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ: Π»Π΅Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, пСрСмСнная, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ сдСлан Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρƒ, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ x = y Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ y = x.

A notorious example for a bad idea was the choice of the equal sign to denote assignment. It goes back to Fortran in 1957 and has blindly been copied by armies of language designers. Why is it a bad idea? Because it overthrows a century old tradition to let β€œ=” denote a comparison for equality, a predicate which is either true or false. But Fortran made it to mean assignment, the enforcing of equality. In this case, the operands are on unequal footing: The left operand (a variable) is to be made equal to the right operand (an expression). x = y does not mean the same thing as y = x. [2]

Π’Ρ‹Π±ΠΎΡ€ символа ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° равСнства Π² языкС ΠΏΡ€ΠΈ использовании = ΠΊΠ°ΠΊ присваивания Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ:

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

НапримСр, Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ языка ΠŸΠ›/1:

БСмантичСскиС особСнности

Π”Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда Β«ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉΒ» (для программистов ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… языков) способ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ присваивания являСтся СдинствСнно Π²Π΅Ρ€Π½Ρ‹ΠΌ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ.

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

НапримСр, Π² языкС Π€ΠΎΡ€Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ присваиваниСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ адрСс ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² стСк Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сдСлано Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ выполнСния собствСнно присваивания.

Π’ΠΎ ΠΆΠ΅ самоС Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π°Ρ‡Π΅:

ΠΠ΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Β«Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСния 2+1 (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 3) присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ X Β» ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ «опСрация 2+1 присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ X Β». Если язык статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‚ΠΎ двусмыслСнности Π½Π΅Ρ‚, ΠΎΠ½Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚ΠΈΠΏΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ X (Β«Ρ†Π΅Π»ΠΎΠ΅ число» ΠΈΠ»ΠΈ «опСрация»). Π’ языкС ΠŸΡ€ΠΎΠ»ΠΎΠ³ типизация динамичСская, поэтому ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присвоСния: is β€” присвоСниС эквивалСнтного значСния ΠΈ = β€” присвоСниС ΠΎΠ±Ρ€Π°Π·Ρ†Π°. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС:

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ·Π½Π°Π½Π° Π²Π΅Ρ€Π½ΠΎΠΉ, вторая β€” Π»ΠΎΠΆΠ½ΠΎΠΉ.

Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° ссылок

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈ слоТной структуры ΠΌΠ½ΠΎΠ³ΠΈΠ΅ языки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ «сСмантику ссылок». Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ присвоСния Π² классичСском смыслС Π½Π΅ происходит, Π½ΠΎ считаСтся, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ располагаСтся Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ мСстС, Ρ‡Ρ‚ΠΎ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ исходной. НапримСр (Python):

ПодмСна ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

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

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

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ конструкции

Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания

Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ измСряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания

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

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Одной ΠΈΠ· Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² простого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ присвоСния значСния выраТСния нСскольким ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. НапримСр, Π² языкС ΠŸΠ›/1 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

АналогичноС присвоСниС Π² языкС Python ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠŸΠ›/1, Ады ΠΈ ΠŸΠΈΡ‚ΠΎΠ½Π°, Π³Π΄Π΅ мноТСствСнноС присвоСниС считаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сокращённой Ρ„ΠΎΡ€ΠΌΠΎΠΉ записи, Π² языках Π‘ΠΈ, Лисп ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΉ синтаксис ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ основу: просто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присвоСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ присвоСнноС ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (см. Π²Ρ‹ΡˆΠ΅). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, послСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” это Π½Π° самом Π΄Π΅Π»Π΅:

Π‘Ρ‚Ρ€ΠΎΡ‡ΠΊΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° сработаСт Π² Π‘ΠΈ (Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой Π² ΠΊΠΎΠ½Ρ†Π΅), Π½ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ присваиваниС

НСкоторыС языки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π ΡƒΠ±ΠΈ ΠΈ Python, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ синтаксис присвоСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ присвоСниСм:

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

запись с использованиСм ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ присваивания«традиционноС» присвоСниС: Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Ρ‚Ρ€Ρ‘Ρ… опСраций«экономноС» присвоСниС: Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Ρ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

ПослСдний Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с арифмСтичСскими опСрациями нСбСзопасСн Π² языках программирования ΠΈΠ»ΠΈ Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ арифмСтичСских ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ.

НСкоторыС языки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PHP) ΠΈΠΌΠ΅ΡŽΡ‚ конструкции, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡΡ‹ΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ присваиваниС:

УсловныС Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

НСкоторыС языки программирования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C++, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ использованиС Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… присвоСния условных Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НапримСр, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ условного присваивания (Π ΡƒΠ±ΠΈ):

БоставныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Боставной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания позволяСт сокращённо Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ присвоСния. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого способа ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ запись присвоСния, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ цСлСвая пСрСмСнная ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π² ΠΏΡ€Π°Π²ΠΎΠΉ части выраТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π£Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для формирования Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присвоСния:

ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° СдиницуэквивалСнтная Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ запись

Π₯ΠΎΡ‚ΡŒ это ΠΈ Π½Π΅ выглядит присваиваниСм, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌ являСтся. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Ρ€Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π΅Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ выполнСния присваивания.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π² языкС Π‘ΠΈ часто ΡΠ²Π»ΡΡŽΡ‚ΡΡ сокращённой записью для формирования Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, содСрТащих индСксы массивов.

РСализация

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

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

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

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