Introduktion till programmering med C# : Applikationsflöde
Innehållsförteckning
Del 5.
Hantera applikationsflöden
Alla applikationer behöver kunna hantera beslut så att exekveringen av applikationen kan fortsätta en vald väg eller avbryta. Dessutom behöver vi ofta i applikationer kunna gå igenom listor av data och bearbeta informationen i dessa listor. Det är vad vi ska gå igenom nu.
Fatta beslut och välja väg
Varje applikation måste kunna välja fortsatt exekvering baserat på olika alternativ och fortsätta exekveringen.
Välja väg med if uttryck
if uttrycket bestämmer vilken väg som ska följas genom att utvärdera ett sant eller falskt uttryck. Om uttrycket är sant så utförs koden i if blocket. Vi kan ha alternativa väger i ett if uttryck med hjälp av else blocket, detta är helt valfritt att använda. Else kommer att exekveras om if är falskt.
Vi kan även kombinera ett if uttryck med fler if block med else if uttryck som exemplet nedan visar.
if(uttryck_1)
{
// Detta block körs i uttryck_1 är sant.
}
else if(uttryck_2)
{
// Detta block körs i uttryck_1 är falskt och uttryck_2 är sant.
}
else if(uttryck_3)
{
// Detta block körs i uttryck_1 är falskt och uttryck_2 är falskt
// och uttryck_3 är sant.
}
else
{
// Detta block körs i fall alla andra uttryck är falska.
}
VIKTIGT!
Som ni ser så använder jag måsvingar för att kapsla varje block. Detta är valfritt om det endast finns ett uttryck i kod blocket. Men undvik denna teknik, använd alltid måsvingar för att kapsla uttryck. Om vi inte gör detta så kan vi införa allvarliga buggar i våra applikationer.
Tänk på att vi skriver kod för ramverket .NET(Core) och att det är plattformsoberoende. Det är inte säkert att koden kommer att fungera buggfritt om vi t ex kompilerar koden att köras på en iOS enhet.
Det finns ingen effektivitet eller prestanda att vinna på att utesluta måsvingarna.
Välja väg med switch uttrycket
Om vi har väldigt många kombinationer av else if så kan koden lätt bli svåröverskådlig. Ett bättre alternativ är att använda switch uttrycket.
switch jämför ett uttryck och jämför detta uttrycket med en lista av möjliga case utfall. Varje case är kopplat till det uttryck eller värde som switch jämför med.
Regler för case uttryck, varje case måste avslutas med:
- break nyckelordet eller
- goto case nyckelordet eller
- inte ha något uttryck eller kod eller
- goto nyckelordet som refererar en namngiven etikett eller slutligen
- return som gör att exekveringen avbryts
Exempel:
int value = 10;
switch(value)
{
case 1: // Om value är 1 hamnar vi här
Console.WriteLine("Värdet är 1");
break;
case 2: // Om value är 2 hamnar vi här
Console.WriteLine("Värdet är 2");
break;
case 3: // Detta är ett fallthrough uttryck
case 4: // Endast tillåten om case 3 inte har någon kod.
Console.WriteLine("Värdet är 3 eller 4");
break;
case 5:
goto case 2; // Detta tar oss tillbaka till case 2.
case 6:
goto My_Label;
default: // Här hamnar vi om inte någon av ovanstående fall fångar
// upp värdet.
} // Slut på switch uttrycket
My_Label:
Console.WriteLine("Exekverar My_Label");
Arbeta med listor
Arbeta genom listor eller som vi brukar säga "iterera", innebär att ett block av kod exekveras tills ett villkor inte längre är sant. Eller tills det inte finns fler element i listan.
while loopen
while loopen utvärderar ett boeleskt värde (sant eller falskt) och fortsätter att exekvera så länge som värdet är sant.
Exempel:
int i = 0;
while(i < 5)
{
Console.WriteLine(i);
i++; // Glöm inte denna rad, annars går vi in i en oändlig loop.
}
do while loopen
Är väldigt lik while loopen med den skillnaden är kontrollen för fortsatt exekvering ligger sist i loopen. Detta för att garantera att loopen körs minst en gång.
Exempel:
string? password;
do
{
Console.WriteLine("Skriv in ditt lösenord");
password = Console.ReadLine(); // ReadLine väntar på inmatning av
// användaren och på Enter.
}
while(password != "Password");
Console.WriteLine("Du är inloggad");
for loopen
for loopen är lite mer komplex än while loopen. Orsaken är att den tar lite fler argument
- Ett initierings uttryck som körs första gången som loopen startar
- Ett villkor som kontrollerar om loopen ska fortsätta
- Ett uppräkningsuttryck som räknas upp varje gång som slutet på loopen nås
Exempel:
for(int i = 0; i <= 10; i++)
{
Console.WriteLine(i);
}
Vad vi säger här är att börja på värdet 0 och för varje iteration räkna upp i med 1 och kontrollera så att i fortfarande är mindre eller lika med 10.
foreach loopen
foreach loopen är en aning annorlunda är de föregående looparna. Den är utformad för att exekvera kod för varje element i en lista, en array eller en collection. Vanligtvis är varje element skrivskyddat, vilket betyder att om vi försöker ändra något element under iterationens gång så får vi ett fel(exception).
Exempel:
string[] manufacturers = {"Volvo", "BMW", "Kia", "Ford"};
foreach(string manufacturer in manufacturers)
{
Console.WriteLine(manufacturer);
}