| Struktuur | Süntaks | Operandite/väljendite tüüp | Tööpõhimõte | Kasutamise eripärad | Toetatud keeleversioonid (Inferred) | Allikas |
|---|---|---|---|---|---|---|
| if-operaator | if (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, enum | Võ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 tingimusoperaator | condition ? consequent : alternative | Esimene 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õrdlusega | switch (obj) { case type name when condition: instructions; break; } | Suvaline tüüp | Võ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äärtuse | Kompaktne 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-mustrid | expression switch { > 0 and <= 10 => …, _ => … } | Arvulised ja muud võrreldavad tüübid | Kasutab 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.
- Mis on peamine erinevus loogikaoperaatorite & ja && vahel?
- Kuidas töötab kolmiktingimusoperaator ?: ja milline on selle süntaks?
- Mis on lühistamine tingimuslike loogikaoperaatorite kontekstis?
- Millised on peamised erinevused switch-lause ja switch-avaldise vahel?
- Mis on operaatorite ?. ja ?[] eesmärk?
- Mis on case guard switch-lauses?
- Mis on kolmiktingimusoperaatori seostatavuse reegel?
- Millal on eelistatav kasutada if-else-lauset try-catch-lause asemel?
- Millised on C# tänapäevaste versioonide relatsioonimustrid?
- Millised on vaikelause kasutamise eripärad switch-lauses?
——————————————————————————–
Vastused testile
- & 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.
- 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.
- 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.
- 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.
- ?. 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.
- 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.
- Kolmikoperaatori assotsiatiivsus: Kolmikoperaator on parempoolselt assotsiatiivne. See tähendab, et avaldist kujul a ? b : c ? d : e hinnatakse kui a ? b : (c ? d : e).
- 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.
- 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.
- 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
- 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.
- 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?
- Null-turvalisuse mehhanismid C#-s: uurige null-tingimusoperaatorite ja null-absorptsioonioperaatorite rolli programmi krahhide vältimisel.
- Keeruliste avaldiste eelistus- ja hindamisloogika: selgitage operaatorite eelistuse (primaarsest omistamiseni) mõistmise olulisust ja hindamisjärjekorra mõju programmi tulemustele.
- Viidete tingimuslaused ja mäluhaldus: uurige muutujate viidete tingimuslike tagastuste süntaksit ja praktilist rakendamist ?:ref operaatori abil.
——————————————————————————–
Põhiterminite sõnastik
| Termin | Kirjeldus |
|---|---|
| Exception | Situatsioon, 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 pattern | Mustermehhanism, mis võimaldab võrrelda mitu väärtust korraga ühe switch-avaldises. |
| Positional pattern | Muster, mis kasutab objekti dekonstruerimise meetodit selle omaduste väljavõtmiseks ja nende hilisemaks võrdlemiseks. |
| Right-associativity | Operaatorite sama prioriteediga arvutamise järjekord paremalt vasakule. |
| Composite operator | Operaatorite grupp, mis on ümbritsetud looksulgudega { } ja mida kompilaator käsitleb kui ühtset tervikut. |
| Ternary operation | Operatsioon, mis võtab kolm operandi: tingimus ja kaks tulemusvarianti. |
| Target type | Andmetüüp, milleks peavad olema mõlema haru tulemused ternary operaatoris vaikimisi teisendatud. |
| Short-circuiting | Loogiliste 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). |
