← Webbserverprogrammering 1 Område 2 · C# på serversidan Felsökning

Webbserverprogrammering 1 · område 2 · v.37–41

C# på serversidan

Nu skriver du kod. Området går igenom språkets grunder – typer, villkor, loopar, listor, metoder och klasser – och du övar tills de sitter. Allt körs på servern och resultatet syns på en sida: det finns inget konsolfönster i den här kursen.

1. Nio lektioner

Tisdagarna bär det nya, onsdagarna befäster. Kolumnen längst till höger säger vad du gör om du var borta.

#DatumLängdVad vi görMissade du passet?
6tis 8 sept85 min Datatyper, variabler och utdata. int, double, bool, string, interpolation, int.TryParse. Guiden steg 1–5, sedan övning 1–7
7ons 9 sept45 min Övningspass: uttryck och typer. Eget arbete, två övningar gemensamt på slutet. Övning 1–7
8tis 15 sept85 min Villkor och logik. if, else if, switch, villkor i markupen, ett värde ur adressen. Guiden steg 6–9
9ons 16 sept45 min Övningspass: villkor. Parvis felsökning av tre färdiga kodstycken. Övning 8–14 och de tre kodstyckena
10tis 22 sept85 min Loopar, listor och arrayer. for, foreach, while, List<T>, tabell ur en loop. Guiden steg 10–13
11ons 23 sept45 min Övningspass: loopar och listor. Eget arbete med handledning. Övning 15–21
12tis 29 sept85 min Metoder, klasser och objekt. Modellklassen, new, objekt i en lista, namngivning enligt C#-praxis. Guiden steg 14–17, sedan övning 22–28
13ons 30 sept45 min Arbetspass och repetition. Sista finputs, och vad provet prövar. Vad provet prövar och checklistan
14tis 6 okt85 min Prov 1. Skriftligt, 80 minuter, utan dator. Går inte att ta igen på egen hand – anmäl frånvaron och gör uppsamlingsprovet

2. Det här ska sitta

3. Fyra sidor, inte en

Övningarna ligger på fyra sidor i ditt projekt, en per tema. Det är inte pyssel – det finns två konkreta skäl.

Sida i ditt projektÖvningarTema
/ovningar/typer1–7Uttryck, typer, utdata
/ovningar/villkor8–14Villkor och logik
/ovningar/loopar15–21Loopar, listor, arrayer
/ovningar/metoder22–28Metoder, klasser, objekt
Ett fel stoppar hela sidan

Kompilerar inte övning 17 går övning 1–16 inte att visa heller – sidan blir tom. Fyra sidor begränsar skadan till ett tema. Får du plötsligt en tom sida: läs det första felet i terminalen, inte det sista.

Prefixa variabelnamnen

Alla @code-block på en sida blir samma klass. Två övningar som båda använder summa ger CS0102: already contains a definition. Döp fälten efter övningens nummer från början – o3Pris, o3MedMoms – så slipper du döpa om tolv variabler i vecka fyra.

4. Kom igång

Du behöver ett projekt att öva i. Skapa ett nytt, eller fortsätt i projektet från område 1 – blanda då inte ihop sidorna.

StegDet du gör
1Skapa ett tomt, publikt repo på github.com som heter ovningsbanken. Inga bockar.
2Skapa projektet: dotnet new blazor -o Ovningsbanken -int None
3Gå in i mappen och kör det: cd Ovningsbanken och dotnet run
4Skapa de fyra sidorna i Components/Pages/, med @page "/ovningar/typer" och så vidare.
5Lägg in de fyra sidorna i menyn, Components/Layout/NavMenu.razor.
6Koppla på GitHub: git init, git add ., git commit -m "Fyra tomma övningssidor", git branch -M main, git remote add origin …, git push -u origin main

Committa efter varje övningspass, inte allt sista kvällen. Fem commits är ett krav i uppgiften just därför.

5. Felsökning

Sök på felmeddelandet du fick, eller på ett ord ur det.

14 rader

SymptomTrolig orsakÅtgärd
CS0102: already contains a definition for 'x'Två övningar på samma sida använder samma variabelnamnDöp om efter övningsnumret: o3Summa i stället för summa.
CS0029: Cannot implicitly convert type 'string' to 'int'Du tilldelar text till ett heltalAntingen fel typ på variabeln, eller så behövs int.TryParse.
CS0161: not all code paths return a valueEn gren i din metod saknar returnVarje väg genom metoden måste lämna tillbaka något.
CS0165: Use of unassigned local variableVariabeln är deklarerad men aldrig given ett värdeint summa = 0;, inte bara int summa;
CS8509: switch expression does not handle all possible valuesDin switch saknar fallet för allt annatLägg till _ => "okänt". En varning är inte en åsikt.
SwitchExpressionException, sidan svarar 500Samma sak som ovan, men värdet kom faktisktLägg till _ =>-grenen och ladda om.
Divisionen blir 0 eller ett misstänkt jämnt talHeltalsdivision – decimalerna kastas bortGör om ett av talen till double: (double)summa / antal
Summan blir samma som sista värdetsumma nollställs inuti loopenFlytta deklarationen utanför loopen.
Sidan svarar aldrig, terminalen hängerOändlig while-loopCtrl+C. Kontrollera att villkoret kan bli falskt.
Sidan är tom fast bara en övning är trasigEtt kompileringsfel stoppar hela komponentenLäs det första felet i terminalen och rätta det.
The name 'Film' does not existSidan hittar inte modellklassenLägg till @using DittProjekt.Models högst upp.
Tabellen visar True i stället för JaSå skriver C# ut ett bool@(varde ? "Ja" : "Nej"), eller en metod som formaterar.
Numreringen börjar på 0Index i en lista börjar på noll@(i + 1) när du skriver ut numret.
bin/ och obj/ ligger i repot.gitignore saknasgit rm -r --cached bin obj, och lägg till en .gitignore.

6. Orden

Orden nedan används från och med nu utan förklaring. Träna tills du kan dem – en av provets fyra frågetyper är förklara.

Ordträning

OrdBetyder
datatypVad ett värde är för sorts sak: text, heltal, decimaltal, sant eller falskt.
variabelEtt namn som håller ett värde.
fältEn variabel som hör till komponenten och lever så länge sidan byggs.
interpolationAtt sätta in värden mitt i en text med $"..." i stället för att limma ihop den med plus.
heltalsdivisionNär båda talen är heltal kastas decimalerna bort. 7 delat med 2 blir 3.
moduloResten vid en division, skrivet %. 142 % 60 är 22.
villkorEn fråga som besvaras med sant eller falskt.
operatorEtt tecken som gör något med värden: +, >=, &&.
loopKod som körs flera gånger.
indexPlatsen i en lista. Den första platsen är 0.
listaEn samling värden i en variabel, List<T>.
metodEtt namngivet kodstycke som tar emot värden och lämnar tillbaka ett svar.
parameterVärdet en metod tar emot, namngivet inuti metoden.
returvärdeDet metoden lämnar tillbaka till den som anropade den.
klassEn beskrivning av vad något är: vilka egenskaper det har.
objektEn sak skapad ur en klass med new.
egenskapEtt namngivet värde som hör till ett objekt. Skrivs i PascalCase.
PascalCaseStor bokstav i varje ord: LangdMinuter. Används på klasser, metoder och egenskaper.
camelCaseLiten bokstav först: antalMinuter. Används på variabler och parametrar.
frågesträngVärdena efter ? i adressen. Läses med [SupplyParameterFromQuery].