Kako se radi o prekidaču izjava u F #?

May 28, 2025|

U carstvu programiranja, razumijevanje načina rada mehanizama protoka su temeljni za pisanje efikasnog i efikasnog koda. Jedan takav konstrukt kontrole protok je prekidač, koji nudi strukturirani način za rukovanje više mogućih slučajeva na osnovu jedinstvenog izraza. U ovom blogu ćemo se obvezati u načinu rada prekidača u F #, funkcionalnom programskom jeziku koji donosi jedinstvenu perspektivu u ovaj klasični koncept programiranja. Kao dobavljač prekidača, također ćemo dodirnuti kako se ovi programski koncepti mogu odnositi na stvarni - svjetski proizvodi koje nudimo.

Osnove prekidačke izjave u F #

U f #, prekidač - poput funkcionalnosti postiže se krozpodudaratiIzraz. Za razliku od tradicionalnogprebacitiIzjava pronađena na jezicima poput C # ili Java, ThepodudaratiIzraz u F # je snažniji i fleksibilniji. To je osnovni dio jezičnog uzorka - odgovarajućih mogućnosti.

Započnimo s jednostavnim primjerom. Pretpostavimo da imamo varijablu koja predstavlja dan u sedmici kao cijeli broj, gdje je 1 ponedjeljak, 2 je utorak, i tako dalje. Želimo ispisati odgovarajuću poruku za svaki dan.

Neka je dan = 3 dan utakmice sa | 1 -> printfn "Ponedjeljak je, vrijeme je za početak sedmice!" | 2 -> printfn "u utorak, ulazak u zamah stvari." | 3 -> printfn "srijeda, pola puta kroz sedmicu!" | 4 -> printfn "četvrtak, gotovo tamo!" | 5 -> printfn "petak, vikend dolazi!" | 6 -> printfn "subota, vrijeme za opuštanje." | 7 -> printfn "nedjelja, uživajte u posljednjem danu vikenda." | _ -> printfn "nevažeći broj dana."

U ovom kodupodudaratiIzraz uzimadanPromjenjiva i pokušava da se uskladi protiv niza obrazaca. Svaki obrazac slijedi strelica (->) a zatim izraz za izvršavanje ako se obrazac podudara. The_je zamjenski uzorak koji će odgovarati bilo kojoj vrijednosti, a on služi kao ulov - sv slučaj za vrijeme kada nijedan od prethodnih obrazaca ne podudaraju se.

Obrazac koji se podudara u dubini

F # 'spodudaratiIzraz može učiniti mnogo više od samo utakmice protiv jednostavnih cijelih vrijednosti. Može se podudarati protiv različitih vrsta struktura podataka, kao što su popisi, tupleta i diskriminiranih sindikata.

Odgovarajuće liste

Razmotrimo popis brojeva i želimo da izvršimo različite akcije na osnovu dužine i sadržaja liste.

pusti mylist = [1; 2; 3] Ukladite MyList sa | [] -> printfn "Lista je prazna." | [X] -> Printfn "Lista ima jedan element:% d" x | [x; y] -> printfn "Lista ima dva elementa:% d i% d" xy | _ -> printfn "Lista ima više od dva elementa."

Ovdje koristimo uzorke koji se podudaraju protiv različitih duljina liste. Prvi obrazac[]odgovara praznom popisu, drugi obrazac[x]odgovara listi sa jednim elementom i trećim uzorkom[x; i]odgovara listi sa dva elementa. The_Wildcard hvata sve ostale slučajeve.

Odgovaraju diskriminiranim sindikatima

Diskriminirani sindikati su moćna karakteristika u F # koja vam omogućuje definiranje vrste koja može biti jedan od nekoliko različitih slučajeva. Razmotrite sljedeći primjer jednostavne diskriminirane unije koja predstavlja različite oblike:

Tip oblika = | Krug plovka | Pravokutnik float * Float | Trokut float * Float * Float Put MyShape = krug (5.0) Utakmica MyShape sa | Krug (R) -> Printfn "Ovo je krug sa polumjerom% f" r | Pravokutnik (W, H) -> printfn "Ovo je pravokutnik sa širinom% F i visine% f" wh | Trougao (a, b, c) -> printfn "Ovo je trokut sa bočnim dužinama% f,% f i% f" abc

U ovom koduOblikaDiskriminirana unija može biti ili aKrug, aPravougaonik, ili aTrougao. ThepodudaratiPROVJERA IZRAŽAJA Koji slučajmyshapePromjenjiva je i izvlači relevantne podatke (radijus za krug, širinu i visinu za pravokutnike i bočne dužine za trokut), a zatim ispisuje odgovarajuću poruku.

Odnos prema stvarnim - svjetskim preklopnim proizvodima

Kao dobavljač prekidača razumijemo važnost prave izbora na osnovu različitih uvjeta, baš kao i apodudaratiIzraz u F # donosi odluke na osnovu različitih obrazaca. U industriji električne komponente koriste se različite vrste prekidača za različite aplikacije, svaka sa vlastitim skupom karakteristika i zahtjeva.

Na primjer,Komplementarni kombinirani prekidačDizajniran je za rukovanje određenim kombinacijama električnih opterećenja. Može se smatrati prekidačem koji "odgovara" određenom električnom scenariju i pruža odgovarajući odgovor. Baš kao ipodudaratiIzraz u F # Odabire desni blok koda na osnovu ulaza u ulaz, komplementarni kombinirani prekidač odabire pravi električni priključak na osnovu električnih uvjeta.

Slično tome,CJ19 serija Preklopna kondenzator Contor Contorje dizajniran za upravljanje kondenzatorom prebacivanjem u izmjeničnim krugovima. Odgovara različitim električnim državama u krugu, slično kao i apodudaratiIzraz reagira na različite ulazne vrijednosti.

TheSplit kompozitni prekidačje još jedan primer. Dizajniran je za rukovanje split - kompenzacijskim scenarijima u električnim sustavima. Može se posmatrati kao "pametni" prekidač koji donosi odluke na osnovu električnih uloga, slično tome kakopodudaratiIzraz u F # donosi odluke na osnovu ulaznih obrazaca.

Razmatranja performansi

U f #, thepodudaratiIzraz je uglavnom vrlo efikasan. Kompajler može optimizirati postupak podudaranja, posebno kada se bavi jednostavnim uzorcima. Međutim, kada se bave složenim obrascima ili velikim brojem slučajeva, mogu biti pogođeni nastup.

Na primjer, ako imatepodudaratiIzraz sa stotinama slučajeva, prevodilac možda neće biti u mogućnosti da ga optimizira kao efikasno. U takvim slučajevima može biti vrijedno razmatranja alternativnih pristupa, kao što su korištenje stola za pretraživanje ili prije rječnika - zasnovan na rječniku.

Rukovanje i potpunost grešaka

Jedna od sjajnih karakteristikapodudaratiIzraz u F # je da provodi kompletnost uzorka. Kompajler će dati grešku ako postoje moguće ulazne vrijednosti koje nisu obuhvaćene bilo kojim od uzoraka. To pomaže u pisanju robusnog koda koji obrađuje sve moguće slučajeve.

Na primjer, ako zaboravimo_Wildcard u našem danu - od - Tjedni primjer:

Neka je dan = 8 dana sa | 1 -> printfn "Ponedjeljak je, vrijeme je za početak sedmice!" | 2 -> printfn "u utorak, ulazak u zamah stvari." | 3 -> printfn "srijeda, pola puta kroz sedmicu!" | 4 -> Printfn "četvrtak, gotovo tamo!" | 5 -> printfn "petak, vikend dolazi!" | 6 -> printfn "subota, vrijeme za opuštanje." | 7 -> printfn "nedjelja, uživajte u posljednjem danu vikenda." // Nedostaje mi slučaj _

Kompajler će generirati upozorenje ili grešku koja ukazuje da je podudaranje uzorka nepotpuno, jer vrijednost8nije pokriven niti jedan od obrazaca.

Zaključak

ThepodudaratiIzraz u F # pruža snažan i fleksibilan način za rješavanje višestrukih slučajeva na osnovu različitih obrazaca. To je bitan dio jezičnih funkcionalnih programskih mogućnosti, omogućavajući sažeti i ekspresivni kod. Kao dobavljač prekidača vidimo paralele između odluke - izrade procesa u programiranju i operaciji naših električnih prekidača. Svaki prekidač dizajniran je tako da odgovori na određene uvjete, baš kao i apodudaratiIzraz reagira na određene ulazne obrasce.

cj19 contactorJNFK (7)

Ako ste na tržištu za visokokvalitetne prekidače za svoje električne aplikacije, pozivamo vas na [pokrenite kontakt za nabavku i pregovore]. Naš tim stručnjaka spreman je da vam pomogne u pronalaženju pravih preklopnih proizvoda koji ispunjavaju vaše specifične zahtjeve.

Reference

  • F # Vodič za programiranje - Microsoft Docs
  • Real - Svjetski funkcionalni programiranje Tomasa Petriceka, Jon Skeet-a i Donalda Symeta
Pošaljite upit