Kattalashtirilgan topshiriq - Augmented assignment

Kattalashtirilgan topshiriq (yoki aralash topshiriq) - ma'lum narsalarga berilgan ism topshiriq operatorlar albatta dasturlash tillari (ayniqsa, olingan C ). Kattalashtirilgan topshiriq odatda operator a ni qabul qiladigan bayonotni almashtirish uchun ishlatiladi o'zgaruvchan uning argumentlaridan biri sifatida va natijani yana o'sha o'zgaruvchiga qaytaradi. Oddiy misol x + = 1 kengaytirilgan x = x + (1). Shunga o'xshash inshootlar ko'pincha turli xil ikkilik operatorlar uchun mavjud.

Umuman olganda, ushbu xususiyatni taqdim etadigan tillarda o'zgaruvchini o'z argumentlaridan biri sifatida qabul qiladigan va bir xil turdagi natijani qaytaradigan operatorlarning aksariyati natijani o'rniga o'zgaruvchiga qaytaradigan, masalan, arifmetik operatorlar, bitshift-ga qo'shilgan ekvivalent ekvivalentiga ega. operatorlar va bitli operatorlar.

Munozara

Masalan, quyidagi bayonotni yoki uning o'zgarishini ko'plab dasturlarda topish mumkin:

x = x + 1

Bu "o'zgaruvchida saqlangan raqamni toping" degan ma'noni anglatadi x, unga 1 qo'shing va qo'shilgan natijani o'zgaruvchiga saqlang x. "Bu qanchalik sodda bo'lsa ham, o'zgaruvchining joylashuvi samarasiz bo'lishi mumkin x agar bo'lsa, ikki marta qarash kerak kompilyator ifodaning ikki qismi bir xil ekanligini tan olmaydi: x ba'zi bir element elementlari yoki boshqa murakkabliklarga havola bo'lishi mumkin. Taqqoslash uchun, bu erda kengaytirilgan topshiriq versiyasi:

x + = 1

Ushbu versiya bilan, o'zgaruvchining o'rnini qidiradigan kodni ishlab chiqarmaganligi uchun kompilyator uchun hech qanday sabab yo'q x faqat bir marta va uni joyida o'zgartiradi, agar, albatta, mashina kodi bunday ketma-ketlikni qo'llab-quvvatlasa. Masalan, agar x oddiy o'zgaruvchi bo'lsa, the mashina kodi ketma-ketlik shunga o'xshash bo'lishi mumkin

 Yuklash x 1 do'kon qo'shish x

va ikkala shakl uchun ham bir xil kod yaratiladi. Ammo maxsus op-kod bo'lsa, u bo'lishi mumkin

 MDM x, 1

x ga 1 qo'shib "Xotirani o'zgartirish" degan ma'noni anglatadi va yaxshi kompilyator ikkala shakl uchun ham bir xil kod ishlab chiqaradi. Ba'zi bir mashinalar kodlari INC va DEC operatsiyalarini taklif qiladi (birini qo'shish yoki olib tashlash uchun), boshqalari birinchisidan boshqa doimiylarga ruxsat berishi mumkin.

Umuman olganda, shakl

x ?= ifoda

qaerda ? ba'zi operatorlarni anglatadi (har doim ham emas +) va yordam beradigan maxsus op kodlari bo'lmasligi mumkin. Hali ham shunday bo'lishi mumkin x kompilyatorga kirishning takrorlanishiga yo'l qo'ymaslik tavsiya etiladi xva, albatta, agar x uzoq ism, shuning uchun kamroq yozish kerak bo'ladi. Bu oxirgi o'xshash xususiyatga asos bo'ldi ALGOL orqali taqdim etilgan kompilyatorlar Burrouzlar B6700 tayinlangan o'zgaruvchini ko'rsatish uchun tilde belgisidan foydalangan holda tizimlar

LongName: = x + sqrt (LongName) * 7;

bo'lar edi

LongName: = x + sqrt (~) * 7;

va hokazo. Bu shunchaki umumiyroq x: = ~ + 1; Tegmaslik kodini ishlab chiqarish kompilyatorning viloyati bo'lib qoladi.

Semantik

Yilda ifoda yo'naltirilgan dasturlash tillari masalan, C, tayinlash va kattalashtirilgan topshiriq - bu qiymatga ega bo'lgan iboralar. Bu ularni murakkab iboralarda ishlatishga imkon beradi. Biroq, bu o'qilishi yoki tushunishi qiyin bo'lgan belgilar ketma-ketligini keltirib chiqarishi mumkin, bundan ham yomoni, noto'g'ri yozish osonlikcha turli xil ketma-ketlikni keltirib chiqarishi mumkin, ammo kompilyator tomonidan qabul qilingan bo'lsa ham kerakli natijalarni bermaydi. Boshqa tillarda, masalan, Pythonda, topshiriq va kengaytirilgan topshiriq iboralar emas, iboralar va shuning uchun ularni murakkab iboralarda ishlatish mumkin emas. Masalan, quyidagilar haqiqiy C, ammo Pythonga tegishli emas:

a += b += v

Topshiriq singari, ushbu tillarda kengaytirilgan topshiriq shaklidir o'ng assotsiativ topshiriq.

Hisoblangan tayinlash joylari

C, C ++ va Python kabi tillarda, tayinlash joyi funktsiya chaqiruvlarini o'z ichiga olgan kengaytirilgan topshiriq, funktsiyalarni faqat bir marta chaqirishi kerak. Ya'ni bayonotda:

my_array[f1()] += 1

Funktsiya f1 bu vakolatli faqat bir marta qo'ng'iroq qilish.

Agar til kengaytirilgan topshiriqni so'l kengayishi bilan amalga oshirsa:

my_array[f1()] = my_array[f1()] + 1

Keyin f1 ikki marta chaqiriladi.

Til bo'yicha

C avlodlari

Yilda C, C ++ va C #, tayinlash operatori =quyidagicha ko'paytiriladi:

OperatorTavsif
+=Qo'shish
-=Chiqarish
*=Ko'paytirish
/=Bo'lim
%=Modul
<<=Chap bit siljishi
>>=Bitning o'ng tomonga siljishi
&=Bitwise va
^=Bitwise eksklyuziv YOKI
|=Bit-bitli yoki OR

Ularning har biri a aralash topshiriq aytilgan tillarda operator.[1][2][3]

Qo'llab-quvvatlovchi tillar

Quyidagi ro'yxat to'liq yoki to'liq qamrab olinmagan bo'lsa-da, kengaytirilgan tayinlash operatorlarini qo'llab-quvvatlaydigan ba'zi bir asosiy dasturlash tillarini sanab o'tadi.

Shuningdek qarang

Adabiyotlar

  1. ^ "ISO / IEC 9899: 201x qo'mitasi loyihasi 2011 yil 12 aprel N1570".
  2. ^ "Topshiriq va birikma tayinlash operatorlari".
  3. ^ "C # tilining spetsifikatsiyasi". Microsoft. Olingan 17 mart 2014.