Tingimuslik operaator

StruktuurSüntaksOperandite/väljendite tüüpTööpõhimõteKasutamise eripäradToetatud keeleversioonid (Inferred)Allikas
if-operaatorif (condition) { instructions } [else { instructions }]bool (loogiline avaldis)Täidab koodiploki, kui tingimus on tõene (true). Kui on olemas else, siis täidetakse alternatiivne plokk, kui tingimus on väär (false).Võimaldab luua keerukaid tingimusstruktuure (else if). Kui plokk sisaldab ainult ühte käsku, võib looksulud ära jätta.C# 1.0+[1, 2]
switch-operaator (klassikaline)switch (expression) { case constant: instructions; break; default: instructions; break; }Täisarvulised tüübid (int, long), char, string, bool, enumVõrdleb valikuavaldist case-konstantidega. Sobivuse korral täidetakse vastav plokk kuni siirdeoperaatorini (break, return, goto).Nõuab iga täidetud case-ploki lõpus selget väljumist. Võimaldab grupeerida mitu case-märgendit ühe ploki alla.C# 1.0+[3-5]
Ternaarne tingimusoperaatorcondition ? consequent : alternativeEsimene operand — bool; teine ja kolmas — sama tüüpi (või teisendatavad)Hindab tingimust ja tagastab esimese avaldise tulemuse (kui true) või teise (kui false).On avaldis, mis tagastab väärtuse. Omab parempoolset assotsiatiivsust. Ei saa kasutaja poolt üle laadida.C# 1.0+[1, 4, 6]
switch-operaator mustrivõrdlusegaswitch (obj) { case type name when condition: instructions; break; }Suvaline tüüpVõrdleb avaldist mustritega (tüübid, omadused või konstandid). Kasutab lisatingimusi (when) filtreerimiseks.Võimaldab kontrollida andmetüüpe ja väärtuste vahemikke otse case-plokkides. Mustreid hinnatakse ülalt alla.C# 7.0+[2-5]
switch-avaldis (switch expression)var result = expression switch { pattern => result_expression, _ => default_expression };Suvaline tüüp; tagastab väärtuseKompaktne switch-vorm, kasutab noolsüntaksit (=>). Tagastab valitud avaldise väärtuse.Ei kasuta võtmesõnu case ja break. Kasutab sümbolit _ default asemel. Peab alati tagastama väärtuse.C# 8.0+[2, 3, 5]
Kaasaegsed switch-mustridexpression switch { > 0 and <= 10 => …, _ => … }Arvulised ja muud võrreldavad tüübidKasutab võrdlusoperaatoreid (<, >, <=, >=) ja loogilisi sidureid (and, or, not) otse mustrites.Muudab koodi lakooniliseks ja loetavaks ilma when kasutamata lihtsate vahemike kirjeldamisel.C# 9.0+[3, 5]

Hargnevate algoritmide programmeerimine C#-s: õpetus

See juhend sünteesib teavet C# keele juhtimisvoogude mehhanismide kohta, sealhulgas tingimuslaused, juhtumilaused, ternaarsed operaatorid ja loogikaavaldised. See on loodud hargnemisalgoritmide süntaksi ja loogika põhjalikuks uurimiseks, mis põhineb praegustel keelespetsifikatsioonidel.

——————————————————————————–

Test oma teadmiste kontrollimiseks

Juhised: Vasta küsimustele antud materjalide põhjal. Iga vastus peaks koosnema 2-3 lausest.

  1. Mis on peamine erinevus loogikaoperaatorite & ja && vahel?
  2. Kuidas töötab kolmiktingimusoperaator ?: ja milline on selle süntaks?
  3. Mis on lühistamine tingimuslike loogikaoperaatorite kontekstis?
  4. Millised on peamised erinevused switch-lause ja switch-avaldise vahel?
  5. Mis on operaatorite ?. ja ?[] eesmärk?
  6. Mis on case guard switch-lauses?
  7. Mis on kolmiktingimusoperaatori seostatavuse reegel?
  8. Millal on eelistatav kasutada if-else-lauset try-catch-lause asemel?
  9. Millised on C# tänapäevaste versioonide relatsioonimustrid?
  10. Millised on vaikelause kasutamise eripärad switch-lauses?

——————————————————————————–

Vastused testile

  1. & ja && erinevus: Operaator & hindab alati mõlemat operandi, olenemata vasakpoolse operandi väärtusest. Seevastu tingimuslik loogiline operaator && hindab oma paremat operandi ainult siis, kui vasakpoolne operand on tõene.
  2. Kolmeoperaator: See hindab loogikaavaldist ja tagastab ühe kahest avaldisest tulemuse olenevalt sellest, kas tingimus on tõene või väär. Süntaks on: tingimus ? avaldis_kui_tõene : avaldis_kui_väär.
  3. Lühisühendus: See on mehhanism, mille abil operaatorid && ja || peatavad edasise hindamise, kui tulemus on juba esimese operandi poolt ette määratud. Näiteks operatsioonis x || y, kui x on tõene, siis y-d ei hinnata, kuna üldine tulemus on niikuinii tõene.
  4. Lülituslause vs. lülitiavaldis: Lülitilauset kasutatakse koodiplokkide täitmise voo juhtimiseks ja see nõuab case ja break märksõnade kasutamist. Lülitiavaldis tagastab kindla väärtuse, on kokkuvõtlikum, kasutab lambda-nooli (=>) ja seda kasutatakse tavaliselt omistamise kontekstis.
  5. ?. ja ?[] operaatorid: Need operaatorid pakuvad turvalist juurdepääsu objekti liikmetele või massiivi elementidele, mis võivad olla tühiväärtusega. Kui objekt on tühiväärtus, tagastab avaldis nullväärtuse NullReferenceExceptioni asemel.
  6. Juhtumikaitse: See on täiendav loogiline tingimus, mis määratakse pärast märksõna when ja mis peab koos mustri sobitamisega olema täidetud. See võimaldab teil täpsustada konkreetse lülitusharu käivitamise tingimust, muutes mustri sobitamise paindlikumaks.
  7. Kolmikoperaatori assotsiatiivsus: Kolmikoperaator on parempoolselt assotsiatiivne. See tähendab, et avaldist kujul a ? b : c ? d : e hinnatakse kui a ? b : (c ? d : e).
  8. Valimine if-else ja try-catch vahel: if-else konstruktsiooni (nt int.TryParse) on kõige parem kasutada ennustatavate vigade korral, kuna sellel on madalam jõudluskulu. Try-catch plokid tuleks reserveerida erandjuhtudeks, mida on raske või võimatu ette näha.
  9. Relatsioonimustrid: Need võimaldavad avaldise tulemust võrrelda konstandiga, kasutades võrdlusoperaatoreid (<, >, <=, >=) otse switch-lausetes. See välistab vajaduse kirjutada keerulisi when-tingimusi lihtsate numbrivahemike jaoks.
  10. Vaikimisi lause: See plokk käivitatakse, kui switch-lauses olev avaldis ei vasta ühelegi määratud juhtumimustrile. See võib ilmuda switch-lauses kõikjal, kuid hinnatakse alati viimasena, välja arvatud juhul, kui käivitatakse goto default käsk.

——————————————————————————–

Essee teemad

  1. Switch-lause evolutsioon C#-s: uurige selle arengut klassikalisest C# 1.0 konstruktsioonist, mis töötas ainult konstantidega, võimsa mustrite sobitamise tööriistani versioonides 7.0–9.0.
  2. If-else ja switch-lause võrdlus: millistes stsenaariumides on kumbki neist tööriistadest kõige tõhusam koodi loetavuse, jõudluse ja loogilise struktuuri osas?
  3. Null-turvalisuse mehhanismid C#-s: uurige null-tingimusoperaatorite ja null-absorptsioonioperaatorite rolli programmi krahhide vältimisel.
  4. Keeruliste avaldiste eelistus- ja hindamisloogika: selgitage operaatorite eelistuse (primaarsest omistamiseni) mõistmise olulisust ja hindamisjärjekorra mõju programmi tulemustele.
  5. Viidete tingimuslaused ja mäluhaldus: uurige muutujate viidete tingimuslike tagastuste süntaksit ja praktilist rakendamist ?:ref operaatori abil.

——————————————————————————–

Põhiterminite sõnastik

TerminKirjeldus
ExceptionSituatsioon, mis tekib programmi käivitamisel ja mida on raske või võimatu ette näha (näiteks võrguühenduse katkemine või nulliga jagamine).
Konjuktsioon (&&)Loogiline operatsioon “AND”, mille tulemus on tõene ainult siis, kui mõlemad operandid on tõene.
Disjunktsioon (
Tuple patternMustermehhanism, mis võimaldab võrrelda mitu väärtust korraga ühe switch-avaldises.
Positional patternMuster, mis kasutab objekti dekonstruerimise meetodit selle omaduste väljavõtmiseks ja nende hilisemaks võrdlemiseks.
Right-associativityOperaatorite sama prioriteediga arvutamise järjekord paremalt vasakule.
Composite operatorOperaatorite grupp, mis on ümbritsetud looksulgudega { } ja mida kompilaator käsitleb kui ühtset tervikut.
Ternary operationOperatsioon, mis võtab kolm operandi: tingimus ja kaks tulemusvarianti.
Target typeAndmetüüp, milleks peavad olema mõlema haru tulemused ternary operaatoris vaikimisi teisendatud.
Short-circuitingLoogiliste avaldiste optimeerimine, kus avaldise parem pool ei arvutata, kui tulemus on juba teada vasaku poole põhjal.
when (case guard)Võtmesõna filtrite loomiseks switch-harudes, võimaldab lisada mustrile täiendava loogilise tingimuse.
_ (Discard)Alusjoone sümbol, mida kasutatakse switch-avaldises vaikimisi haru tähistamiseks (analoog default).