Les sentències switch en Objective-C són una manera eficient de gestionar múltiples condicions basades en el valor d'una expressió. Són una alternativa a les sentències if-else quan es tracta de comparar una variable amb diversos valors possibles. En aquest tema, aprendrem com utilitzar les sentències switch, la seva sintaxi, i veurem exemples pràctics.
Sintaxi de les Sentències Switch
La sintaxi bàsica d'una sentència switch en Objective-C és la següent:
switch (expressió) {
case valor1:
// Codi a executar si expressió == valor1
break;
case valor2:
// Codi a executar si expressió == valor2
break;
// Més casos...
default:
// Codi a executar si cap dels casos anteriors coincideix
break;
}Components Clau
- expressió: És l'expressió que es compara amb els diferents valors dels casos. Pot ser una variable o una expressió que retorna un valor.
- case valor: Cada cas representa un valor amb el qual es compara l'expressió. Si coincideix, s'executa el codi associat a aquest cas.
- break: La sentència
breaks'utilitza per sortir delswitchdesprés d'executar el codi d'un cas. Si s'omet, l'execució continuarà amb el següent cas (això es coneix com a "fall-through"). - default: El bloc
defaultés opcional i s'executa si cap dels casos coincideix amb l'expressió.
Exemple Pràctic
Vegem un exemple pràctic per entendre millor com funcionen les sentències switch en Objective-C.
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
int diaDeLaSetmana = 3;
switch (diaDeLaSetmana) {
case 1:
NSLog(@"Dilluns");
break;
case 2:
NSLog(@"Dimarts");
break;
case 3:
NSLog(@"Dimecres");
break;
case 4:
NSLog(@"Dijous");
break;
case 5:
NSLog(@"Divendres");
break;
case 6:
NSLog(@"Dissabte");
break;
case 7:
NSLog(@"Diumenge");
break;
default:
NSLog(@"Dia invàlid");
break;
}
}
return 0;
}Explicació del Codi
- Declaració de la Variable: Declarem una variable
diaDeLaSetmanai li assignem el valor3. - Sentència Switch: Utilitzem una sentència
switchper comparar el valor dediaDeLaSetmanaamb diferents casos. - Casos: Cada cas representa un dia de la setmana. Si
diaDeLaSetmanaés3, s'executarà el codi dins del cas3, que imprimeix "Dimecres". - Default: Si
diaDeLaSetmanano coincideix amb cap dels casos, s'executarà el blocdefault, que imprimeix "Dia invàlid".
Exercicis Pràctics
Exercici 1
Escriu una sentència switch que imprimeixi el nom del mes basat en un valor enter (1 per gener, 2 per febrer, etc.). Si el valor no està entre 1 i 12, imprimeix "Mes invàlid".
Solució
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
int mes = 5;
switch (mes) {
case 1:
NSLog(@"Gener");
break;
case 2:
NSLog(@"Febrer");
break;
case 3:
NSLog(@"Març");
break;
case 4:
NSLog(@"Abril");
break;
case 5:
NSLog(@"Maig");
break;
case 6:
NSLog(@"Juny");
break;
case 7:
NSLog(@"Juliol");
break;
case 8:
NSLog(@"Agost");
break;
case 9:
NSLog(@"Setembre");
break;
case 10:
NSLog(@"Octubre");
break;
case 11:
NSLog(@"Novembre");
break;
case 12:
NSLog(@"Desembre");
break;
default:
NSLog(@"Mes invàlid");
break;
}
}
return 0;
}Exercici 2
Modifica l'exemple anterior per incloure un cas on el valor de mes sigui 0, i imprimeix "No hi ha mes 0".
Solució
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
int mes = 0;
switch (mes) {
case 0:
NSLog(@"No hi ha mes 0");
break;
case 1:
NSLog(@"Gener");
break;
case 2:
NSLog(@"Febrer");
break;
case 3:
NSLog(@"Març");
break;
case 4:
NSLog(@"Abril");
break;
case 5:
NSLog(@"Maig");
break;
case 6:
NSLog(@"Juny");
break;
case 7:
NSLog(@"Juliol");
break;
case 8:
NSLog(@"Agost");
break;
case 9:
NSLog(@"Setembre");
break;
case 10:
NSLog(@"Octubre");
break;
case 11:
NSLog(@"Novembre");
break;
case 12:
NSLog(@"Desembre");
break;
default:
NSLog(@"Mes invàlid");
break;
}
}
return 0;
}Errors Comuns i Consells
- Ometre el
break: Si oblides incloure la sentènciabreakal final de cada cas, l'execució continuarà amb el següent cas, cosa que pot provocar comportaments inesperats. - No incloure un
default: Tot i que és opcional, és una bona pràctica incloure un blocdefaultper gestionar valors inesperats. - Comparar valors no enters: Les sentències
switchen Objective-C només poden comparar valors enters. Si necessites comparar cadenes o altres tipus de dades, hauràs d'utilitzar sentènciesif-else.
Conclusió
Les sentències switch són una eina poderosa per gestionar múltiples condicions de manera clara i eficient. Hem vist la seva sintaxi, exemples pràctics i hem practicat amb exercicis per reforçar els conceptes apresos. Ara estàs preparat per utilitzar les sentències switch en els teus projectes Objective-C!
Curs de Programació en Objective-C
Mòdul 1: Introducció a Objective-C
- Introducció a Objective-C
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Tipus de Dades i Variables
- Operadors i Expressions
Mòdul 2: Flux de Control
Mòdul 3: Funcions i Mètodes
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Sintaxi de Mètodes en Objective-C
- Mètodes de Classe i d'Instància
Mòdul 4: Programació Orientada a Objectes
Mòdul 5: Gestió de Memòria
- Introducció a la Gestió de Memòria
- Comptatge Automàtic de Referències (ARC)
- Retenció i Alliberament Manual
- Millors Pràctiques de Gestió de Memòria
Mòdul 6: Temes Avançats
Mòdul 7: Treballant amb Dades
- Gestió d'Arxius
- Serialització i Deserialització
- Conceptes Bàsics de Xarxes
- Treballant amb JSON i XML
Mòdul 8: Desenvolupament d'Interfícies d'Usuari
- Introducció a UIKit
- Vistes i Controladors de Vista
- Disseny Automàtic
- Gestió de l'Entrada de l'Usuari
