Cunoștințe, prelegeri, expresii și operațiuni

În C #, ca în C ++, expresiile condiționale sunt permise. Desigur, puteți face fără ele, înlocuindu-le cu un operator condiționat. Iată un exemplu simplu de utilizare a acestora, explicând sintaxa înregistrării lor:

O expresie condiționată începe cu o condiție închisă în paranteze, urmată de un semn de întrebare și o pereche de expresii separate printr-un colon. Condiția este dată de o expresie de tip bool. Dacă este adevărat, atunci primul este selectat din perechea de expresii, altfel rezultatul este valoarea celei de-a doua expresii. În acest exemplu, variabila max va obține valoarea 9.

Observați că expresia condițională este un exemplu de expresie ternară - o expresie cu trei operanzi. Și aici, ca și în cazul operațiilor logice condiționale, nu este necesar ca toți operanzii să fie definiți. Dacă operanzul boolean este definit și este adevărat. apoi se evaluează al doilea operand, iar al treilea operand nu este evaluat și nu poate fi definit în acest moment.

Lucrare de asignare

Rămâne pentru noi să luăm în considerare ultima prioritate, dar nu importanța operațiunii de atribuire. Cesiunea sintactică în C # este un caz special al unei expresii și poate să apară oriunde sunt permise expresii. Expresia de atribuire este o expresie cu efect secundar. Aceasta nu numai că returnează valoarea unui tip ca rezultat, dar, de asemenea, modifică valorile uneia sau mai multor variabile ca efect secundar. În programele reale, atribuirea este cel mai adesea văzută nu ca o expresie, ci ca un operator de atribuire. Transformarea unei instrucțiuni de atribuire într-un operator de atribuire este ușoară. Trebuie să terminați expresia cu un caracter punct și virgulă și să o utilizați ori de câte ori sunt permise operatorii.

Să începem cu o definiție formală a sintaxei expresiei de atribuire:

Partea dreaptă a formulei sintactice care definește expresia de atribuire este o expresie care poate fi o expresie de atribuire la rândul său. Aceasta presupune permisiunea unei misiuni multiple. Următorul exemplu este corect din punct de vedere sintactic:

Instrucțiunea if conține o expresie care specifică mai multe asignări. Care este semantica, cum sunt evaluate expresiile de atribuire?

Operația de asignare este o operație din partea dreaptă, iar caracteristica de evaluare a expresiei de atribuire este aceea că este evaluată de la dreapta la stânga. În exemplul nostru, expresia cea mai dreaptă (u + v) / (u - v) va fi calculată mai întâi. valoarea care va fi 6. Mutarea în stânga în timpul alocării, valoarea expresiei se va schimba. Ultima expresie care trebuie evaluată este variabila x. Valoarea acestei expresii este -54, este valoarea finală a expresiei multiple de atribuire și va participa în comparație cu zero. Condiția din instrucțiunea if este setată la true și metoda WriteLine afișează valorile variabilelor pe care le-au primit ca rezultat secundar al evaluării expresiei de atribuire a consolei. Aceste valori sunt egale cu: -54, -55, 57, 54, 7, 5. Rețineți că parantezele din jurul expresiei de atribuire sunt necesare, altfel operația de comparare ar fi efectuată mai devreme decât alocarea, ceea ce ar duce la o eroare.

Pentru a explica detaliile semanticii expresiilor de atribuire, a fost folosită o construcție destul de exotică în declarația if. În programele reale, astfel de construcții nu ar trebui utilizate. Ei sunt "de la rău". Simplitatea înregistrării și înțelegerii sunt unul dintre principalele criterii pentru crearea unui cod industrial. Atunci când studiază posibilitățile limbii, este permis să se ia în considerare cazuri exotice.

Funcționare. - O nouă operațiune de C # 2.0

Această operațiune a fost deja luată în considerare în cursul precedent, când a fost o chestiune de tipuri care poate fi nulă. Rețineți că toate tipurile de referințe permit inițial ca valoare posibilă nul. Această valoare a variabilei de referință specifică o referință nedefinită, o referință la un obiect inexistent. Tipurile semnificative de valori nula nu conțin, dar puteți defini un tip semnificativ semnificativ. care include valoarea null. În mod sintactic, dacă T este un nume de tip semnificativ. atunci T. este numele tipului extins. Funcționare. este definit pe operanzii care acceptă null. Sarcina sa principală este de a atribui o variabilă o valoare diferită de nulă. așa că uneori se numește o operație de lipire, deoarece vă permite să "lipiți" o valoare nulă. Să luăm în considerare definiția sa:

Dacă operandul A nu este nul. atunci se întoarce la calitatea rezultatului operației. Dacă este nulă. atunci rezultatul este operandul B. Această operație este utilă în special atunci când se face tiparea T. la tipul T. Luați în considerare un exemplu simplu:

Rețineți că dacă între două alocări variabila x nu obține o altă valoare decât null. atunci variabila y va obține valoarea 0 ca rezultat.

În lipsa unei astfel de operațiuni, ar trebui să scriem o construcție echivalentă pentru calculul y:

Operatorul Lambda - o nouă operațiune în C # 3.0

În a treia versiune a limbii, a apărut o nouă operație, numită operatorul lambda, și, în consecință, un nou tip de expresie, numit expresii lambda. Această operație are aceeași prioritate ca operația de alocare și, ca cea din urmă, este o operație din partea dreaptă. Sintaxa expresiilor lambda este:

Expresia din partea dreaptă conține o descriere a funcției a cărei argumente sunt specificate în lista din partea stângă. Această descriere este o descriere a unei funcții anonime - o funcție fără nume - și poate fi folosită, de exemplu, pentru a specifica o instanță a unui delegat. Deseori funcția depinde de un argument, iar apoi din partea stângă puteți specifica doar numele acestui argument, omiterea parantezelor.

În detaliu, acest mecanism va fi luat în considerare într-o cursă separată a cursului nostru, dar pentru moment, să dăm primul exemplu simplu de utilizare a acestei operațiuni. Luați în considerare următoarea problemă. Fie ca o mulțime de numere X să fie dată și trebuie dată o funcție F (x). Este necesar să găsim valoarea minimă a acestei funcții atunci când argumentele sunt specificate de elementele matricei X. Desigur, puteți crea o metodă care implementează calculul funcției F (x). dar puteți folosi funcția anonimă specificată de expresia lambda, care este demonstrată prin următorul exemplu:

Cea mai mare parte a acestui exemplu este legată de modelarea gamei de numere și a coeficienților funcției. Găsirea funcției minime este dată de o singură linie:

Aici funcția Min traversează secvențial elementele matricei, formând argumentul x al funcției, iar expresia lambda o transformă într-o valoare a funcției din acest argument. Drept rezultat, valoarea minimă a funcției este returnată. Rezultatele metodei Lambda pot fi văzute în Fig. 3.5.

Cunoștințe, prelegeri, expresii și operațiuni

Acest lucru concluzionează luarea în considerare a operațiilor din limba C #, dar vom continua să discutăm despre unele aspecte legate de calcularea expresiilor.

Articole similare