Instrucció switch
En els llenguatges de programació informàtica, una instrucció switch (commutador) és un tipus de mecanisme de control de selecció utilitzat per permetre que el valor d'una variable o expressió canviï el flux de control de l'execució del programa mitjançant la cerca i el mapa.[1]
Les sentències Switch funcionen de manera similar a la sentència if
que s'utilitza en llenguatges de programació com C / C++, C#, Visual Basic. NET, Java i existeixen en la majoria de llenguatges de programació imperatiu d'alt nivell com Pascal, Ada, C / C++, C#,[2] :374-375Visual Basic. NET, Java,[3] :157-167i en molts altres tipus d'idioma, utilitzant paraules clau com switch
, case
, select
o inspect
.
Les declaracions de commutació tenen dues variants principals: un interruptor estructurat, com en Pascal, que pren exactament una branca, i un interruptor no estructurat, com en C, que funciona com un tipus de goto. Les principals raons per utilitzar un interruptor inclouen millorar la claredat, reduint la codificació repetitiva i (si l' heurística ho permet) també oferir el potencial d'execució més ràpida mitjançant una optimització més fàcil del compilador en molts casos.
Sintaxi típica
[modifica]En la majoria dels idiomes, els programadors escriuen una declaració switch en moltes línies individuals utilitzant una o dues paraules clau. Una sintaxi típica implica:
- la primera
select
, seguida d'una expressió que sovint s'anomena expressió de control o variable de control de la sentència switch - línies posteriors que defineixen els casos reals (els valors), amb les seqüències corresponents d'instruccions per a l'execució quan es produeix una coincidència
- En els idiomes amb un comportament de caiguda, una declaració
break
normalment segueix una declaraciócase
per acabar aquesta declaració. [Pots] - En alguns idiomes, per exemple, PL/I, l'expressió de control és opcional; si no hi ha cap expressió de control, aleshores cada alternativa comença amb una clàusula
WHEN
que conté una expressió booleana i es produeix una coincidència per al primer cas en què aquesta expressió s'avalua com a cert. Aquest ús és similar a les estructures if/then/elseif/else en alguns altres idiomes, per exemple, Perl. - En alguns idiomes, per exemple, Rexx, no es permet cap expressió de control i cada alternativa comença amb una clàusula
WHEN
que conté una expressió booleana i es produeix una coincidència per al primer cas en què aquesta expressió s'avalua com a vertadera.
switch (age) {
case 1: printf("You're one."); break;
case 2: printf("You're two."); break;
case 3: printf("You're three.");
case 4: printf("You're three or four."); break;
default: printf("You're not 1, 2, 3 or 4!");
}
|
Compilació
[modifica]L'optimització de compiladors com GCC o Clang pot compilar una instrucció switch en una taula de branques o en una cerca binària a través dels valors dels casos. Una taula de branques permet que la instrucció switch determini amb un nombre petit i constant d'instruccions quina branca s'ha d'executar sense haver de passar per una llista de comparacions, mentre que una cerca binària només pren un nombre logarítmic de comparacions, mesurat en el nombre de casos en la declaració switch.
Referències
[modifica]- ↑ BillWagner. «if and switch statements - select a code path to execute - C#» (en anglès americà), 28-04-2023. [Consulta: 29 novembre 2023].
- ↑ Skeet, Jon. C# in Depth (en anglès). Manning, 23 març 2019. ISBN 978-1617294532.
- ↑ Bloch, Joshua. "Effective Java: Programming Language Guide" (en anglès). third. Addison-Wesley, 2018. ISBN 978-0134685991.
- ↑ «Switch Statement in C» (en anglès americà), 04-10-2022. [Consulta: 29 novembre 2023].