Cada llenguatge de programació té les seves pròpies regles d'escriptura: com se separen les instruccions, com s'agrupen blocs de codi, com es nomenen les coses. A aquestes regles les anomenem, en conjunt, sintaxi. En aquesta lliçó aprendràs les regles de sintaxi fonamentals del C# —majúscules i minúscules, punt i coma, claus, comentaris, convencions de nomenclatura i identificadors vàlids— que faràs servir en absolutament tot el codi que escriguis a partir d'ara. Dominar bé aquestes regles t'estalviarà bona part dels errors de compilació que solen frustrar qui comença a programar.
Contingut
- Sensibilitat a majúscules i minúscules
- Punt i coma, claus i blocs de codi
- Comentaris:
//,/* */i/// - Convencions de nomenclatura: PascalCase i camelCase
- Estructura general d'un fitxer C#
- Identificadors vàlids
Sensibilitat a majúscules i minúscules
El C# és un llenguatge case-sensitive (sensible a majúscules i minúscules). Això
significa que laMevaVariable, LaMevaVariable i LAMEVAVARIABLE es consideren tres noms
diferents pel compilador. Això afecta tot: noms de variables, de mètodes, de classes, i
també les mateixes paraules clau del llenguatge.
Console.WriteLine("Aixo compila correctament");
// console.writeline("Aixo NO compila"); // 'console' amb minuscula no existeixAquest detall és molt important perquè és una font habitual d'errors per a qui ve d'altres contextos (per exemple, alguns sistemes de fitxers o llenguatges que no distingeixen majúscules de minúscules). En C#, sempre cal respectar exactament les majúscules i minúscules de cada paraula clau i de cada nom que facis servir.
Punt i coma, claus i blocs de codi
El punt i coma ;
En C#, (gairebé) tota instrucció acaba amb un punt i coma ;. El punt i coma indica al
compilador "aquí acaba aquesta instrucció, la següent és independent":
Oblidar el punt i coma és, probablement, l'error de sintaxi més comú en començar a programar en C#. El compilador t'avisarà amb un missatge d'error indicant la línia exacta.
Les claus { } i els blocs de codi
Les claus delimiten blocs de codi: un conjunt d'instruccions que es tracten com una
unitat. Ja hem vist a la lliçó anterior que un espai de noms, una classe i un mètode són,
cadascun, un bloc delimitat per claus. El mateix passarà, més endavant en el curs, amb els
blocs de les estructures de control (if, bucles, etc. — Mòdul 2).
Una convenció molt estesa (i la que seguirem en aquest curs) és la indentació: sagnar (afegir espais o tabulacions) el codi que és dins d'un bloc, perquè sigui visualment evident què pertany a què. El C# no obliga a indentar el codi perquè compili —a diferència de Python, per exemple— però un codi ben indentat és molt més fàcil de llegir i mantenir.
// Codi correctament indentat (recomanat)
if (true)
{
Console.WriteLine("Bloc indentat correctament");
}
// Codi sense indentar (compila igual, pero es dificil de llegir)
if (true) {
Console.WriteLine("Bloc sense indentar");
}No et preocupis encara pel significat de l'if; l'estudiarem amb detall al Mòdul 2. Aquí
només ens interessa la forma, no el contingut.
Comentaris: //, /* */ i ///
Els comentaris són fragments de text que el compilador ignora completament: serveixen únicament perquè les persones que llegeixin el codi (inclòs tu mateix, en el futur) entenguin què fa o per què s'ha fet d'una determinada manera. El C# ofereix tres tipus:
| Tipus | Sintaxi | Ús habitual |
|---|---|---|
| Comentari d'una línia | // text |
Aclariments breus al costat d'una línia de codi |
| Comentari de bloc | /* text */ |
Comentaris que ocupen diverses línies, o desactivar temporalment un fragment de codi |
| Comentari de documentació | /// text |
Documentar classes i mètodes de manera que eines externes (com el mateix editor) puguin mostrar aquesta documentació com a ajuda |
Comentari d'una línia
// Aquest es un comentari d'una linia
Console.WriteLine("Hola"); // Tambe es pot comentar al final d'una linia de codiComentari de bloc
/*
Aquest comentari ocupa
diverses linies de text.
Molt util per a explicacions llargues.
*/
Console.WriteLine("BiblioTech");Comentari de documentació
/// <summary>
/// Mostra un missatge de benvinguda al sistema BiblioTech.
/// </summary>
Console.WriteLine("Benvingut a BiblioTech!");Els comentaris de documentació (///) fan servir una sintaxi especial basada en etiquetes
XML, com <summary>. Encara que en aquest mòdul no escrivim encara mètodes ni classes
pròpies (això arriba al Mòdul 3), és important que reconeguis aquesta sintaxi: molts
editors mostren automàticament el contingut d'aquests comentaris com a ajuda emergent quan
uses un mètode, i en projectes professionals és una pràctica molt valorada documentar així
el codi públic.
Convencions de nomenclatura: PascalCase i camelCase
Una convenció de nomenclatura és un acord (no una regla obligatòria del compilador) sobre com escriure els noms de les coses al codi, perquè sigui coherent i fàcil de llegir per a qualsevol persona familiaritzada amb el llenguatge. En C#, la comunitat i el mateix equip de .NET segueixen, de forma molt consistent, aquestes dues convencions:
| Convenció | Regla | Exemple | S'usa per a |
|---|---|---|---|
| PascalCase | Cada paraula comença amb majúscula, sense separadors | TitolLlibre, NombrePagines, Program |
Noms de classes, mètodes, propietats |
| camelCase | La primera paraula en minúscula, les següents amb majúscula inicial | titolLlibre, nombrePagines |
Noms de variables locals i paràmetres |
Exemple comparant tots dos estils sobre dades de BiblioTech:
// camelCase: variables locals
string titolLlibre = "Cent anys de solitud";
int numeroPagines = 471;
bool estaDisponible = true;
// PascalCase: s'usara per a classes i metodes (Modul 3), i ja ho veiem en 'Program' i 'Console'
Console.WriteLine(titolLlibre);Encara que el compilador no t'obliga a seguir aquestes convencions (compilaria igual si
fessis servir majúscules i minúscules d'una altra manera), seguir-les és una pràctica
professional fonamental: fa que el teu codi sigui reconeixible i coherent amb la resta de
l'ecosistema .NET, incloses totes les biblioteques estàndard (Console, WriteLine, etc.,
ja segueixen PascalCase).
Altres recomanacions habituals
- Els noms han de ser descriptius: millor
numeroPaginesquenonp. - S'evita, en general, l'ús de guions baixos
_com a separador dins del nom (per exemple, es prefereixtitolLlibreatitol_llibre), encara que sí que s'utilitza de vegades un guió baix com a prefix en certs contextos (per exemple, en camps privats d'una classe, cosa que veurem al Mòdul 3). - No s'usen accents,
ñni caràcters especials en els noms de variables, per evitar problemes de compatibilitat entre teclats, editors i sistemes.
Estructura general d'un fitxer C#
Recordant el que hem vist a la lliçó anterior, un fitxer .cs típic (en la seva forma
clàssica) segueix aquesta estructura general, de fora cap a dins:
using System; // 1. Directives using
namespace BiblioTechConsola // 2. Espai de noms
{
class Program // 3. Declaracio de tipus (classe)
{
static void Main(string[] args) // 4. Membre (metode)
{
// 5. Instruccions
Console.WriteLine("Benvingut a BiblioTech!");
}
}
}| Pas | Element | Explicació |
|---|---|---|
| 1 | Directives using |
Indiquen quins espais de noms externs es faran servir al fitxer. Es col·loquen sempre al principi. |
| 2 | Espai de noms | Agrupa el codi del projecte sota un nom comú, evitant conflictes amb altres biblioteques. |
| 3 | Declaració de tipus | Una classe (o, més endavant en el curs, un struct, una interfície, un record...) que conté els membres del programa. |
| 4 | Membres | Mètodes, i més endavant (Mòdul 3) propietats i camps, definits dins del tipus. |
| 5 | Instruccions | El codi que realment s'executa, dins d'un mètode. |
Com hem vist a la lliçó anterior, en projectes moderns amb top-level statements els
passos 2, 3 i 4 queden implícits: només escrius el pas 1 (si cal algun using addicional)
i el pas 5 directament. El compilador continua generant "per sota" aquesta mateixa
estructura.
Usings implícits
Recordaràs que, en veure el fitxer .csproj generat a la lliçó anterior, apareixia
l'opció <ImplicitUsings>enable</ImplicitUsings>. Aquesta opció, disponible en projectes
moderns de .NET, fa que certs espais de noms molt habituals (com System, on viu
Console) estiguin disponibles automàticament a tot el projecte, sense necessitat
d'escriure using System; al principi de cada fitxer. Aquesta és la raó per la qual, en
els exemples de les lliçons anteriors, hem pogut fer servir Console.WriteLine
directament sense cap línia using visible.
Identificadors vàlids
Un identificador és el nom que dones a qualsevol element del teu codi: una variable, un mètode, una classe, etc. El C# imposa algunes regles obligatòries (que, si no es compleixen, el programa directament no compila):
- Ha de començar per una lletra o per un guió baix
_(mai per un número). - La resta de caràcters poden ser lletres, números o guions baixos.
- No pot coincidir exactament amb una paraula clau reservada del llenguatge (com
class,namespace,if,int...), tret que s'escrigui amb el prefix especial@(una tècnica molt poc habitual, reservada per a casos excepcionals). - No pot contenir espais ni símbols com
-,.,ñ, accents, etc.
| Identificador | És vàlid? | Motiu |
|---|---|---|
titolLlibre |
Sí | Comença per lletra, sense caràcters especials |
_isbn |
Sí | Comença per guió baix, és vàlid |
numeroDePagines2 |
Sí | Els números es permeten, mentre no siguin el primer caràcter |
2numeroPagines |
No | Comença per un número |
titol-llibre |
No | El guió - no està permès en identificadors |
títol |
No recomanat | Encara que alguns compiladors moderns l'accepten, s'evita per convenció i compatibilitat |
class |
No | Coincideix amb una paraula clau reservada del llenguatge |
Aquestes regles s'apliquen no només a variables sinó, com veurem en mòduls posteriors, a noms de mètodes, classes, propietats i qualsevol altre element que definim nosaltres mateixos.
Errors Comuns i Consells
- Oblidar el punt i coma: ja ho hem mencionat, però val la pena repetir-ho perquè és, de llarg, l'error més freqüent en començar.
- Barrejar majúscules i minúscules sense adonar-se'n: escriure
Console.writeline(...)en lloc deConsole.WriteLine(...)provoca un error de compilació, ja que el C# distingeix majúscules de minúscules. - Niar claus sense indentar: encara que compili igual, el codi sense indentar és molt difícil de depurar quan el programa creix. Acostuma el teu editor a indentar automàticament (la majoria ho fan en prémer Retorn).
- Fer servir noms poc descriptius: variables com
x,a1,tempdificulten entendre el codi més endavant. Prefereix sempre noms descriptius comtitolLlibreoestaDisponible. - Confondre convenció amb obligació: PascalCase i camelCase són convencions, no regles del compilador; però seguir-les és el que s'espera de qualsevol codi C# professional, i les seguirem durant tot el curs.
- Consell: quan el compilador assenyali un error de sintaxi en una línia, revisa també la línia anterior: moltes vegades l'error real (com un punt i coma oblidat) és just abans d'on s'informa del problema.
Exercicis
-
De la següent llista d'identificadors, indica quins són vàlids en C# i, per als que no ho siguin, explica per què:
numeroPagines,3isbn,_titol,nom complet,namespace,Autor2. -
Reescriu el següent fragment de codi aplicant correctament les convencions de nomenclatura (camelCase per a variables) i una indentació adequada:
string TITOL = "El Quixot"; int Pagines=863; bool Disponible=true; Console.WriteLine(TITOL); -
Afegeix al teu fragment corregit de l'exercici anterior: un comentari d'una línia que expliqui què fa la variable
pagines, i un comentari de bloc (/* */) al principi del fitxer que expliqui breument què fa tot el programa.
Solucions
-
numeroPagines→ Vàlid (comença per lletra).3isbn→ No vàlid (comença per un número)._titol→ Vàlid (comença per guió baix).nom complet→ No vàlid (conté un espai).namespace→ No vàlid (és una paraula clau reservada del llenguatge).Autor2→ Vàlid (comença per lletra, conté un número que no és el primer caràcter).
-
Versió corregida:
string titol = "El Quixot"; int pagines = 863; bool disponible = true; Console.WriteLine(titol);S'ha canviat
TITOL,PaginesiDisponible(amb majúscula inicial, propi de PascalCase) atitol,paginesidisponibleen camelCase, adequat per a variables locals; també s'ha afegit un espai al voltant del signe=per llegibilitat, encara que el compilador acceptaria totes dues formes. -
Exemple de solució:
/* Programa d'exemple de BiblioTech. Mostra per pantalla el titol d'un llibre del cataleg. */ string titol = "El Quixot"; int pagines = 863; // Nombre total de pagines del llibre bool disponible = true; Console.WriteLine(titol);
Conclusió
En aquesta lliçó has après les regles de sintaxi que governen qualsevol programa en C#: la distinció entre majúscules i minúscules, l'ús del punt i coma i les claus per delimitar instruccions i blocs, els diferents tipus de comentaris, les convencions de nomenclatura PascalCase i camelCase, l'estructura general d'un fitxer i les regles perquè un identificador sigui vàlid. Amb aquesta base ja pots llegir i escriure codi C# sintàcticament correcte i ben organitzat.
A la propera lliçó, Variables i Tipus de Dades, posarem en pràctica aquestes regles de nomenclatura declarant variables reals amb diferents tipus de dades —números, text, valors booleans— fent servir com a exemple les dades d'un llibre de BiblioTech: el seu títol, el seu ISBN, el seu nombre de pàgines i si està disponible o no.
Curs de Programació en C#
Mòdul 1: Introducció al C#
- Introducció al C#
- Configuració de l'Entorn de Desenvolupament
- Programa Hola Món
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Arrays i Cadenes de Text
Mòdul 2: Estructures de Control
Mòdul 3: Programació Orientada a Objectes
- Classes i Objectes
- Mètodes
- Constructors i Destructors
- Herència
- Polimorfisme
- Encapsulació
- Abstracció
- Structs i Records: Tipus per Valor i per Referència
Mòdul 4: Conceptes Avançats de C#
- Interfícies
- Delegats i Esdeveniments
- Pattern Matching i Característiques Modernes de C#
- Genèrics
- Col·leccions
- LINQ (Consulta Integrada en el Llenguatge)
- Programació Asíncrona
Mòdul 5: Treballant amb Dades
- Entrada/Sortida de Fitxers
- Serialització
- Connectivitat amb Bases de Dades
- Entity Framework
- Treball amb JSON i Consum d'APIs REST
Mòdul 6: Temes Avançats
- Reflexió
- Atributs
- Programació Dinàmica
- Gestió de Memòria i Recollida d'Escombraries
- Multifil i Programació Paral·lela
Mòdul 7: Construcció d'Aplicacions
Mòdul 8: Bones Pràctiques i Patrons de Disseny
- Estàndards de Codificació i Bones Pràctiques
- Patrons de Disseny
- Injecció de Dependències i Inversió de Control
- Proves Unitàries
- Revisió i Refactorització de Codi
