Övning – Ta bort kodblock från if-instruktioner
Programvaruutvecklare gillar när de kan skriva kod som sparar tangenttryckningar och visuellt utrymme utan att offra läsbarheten. Använd bara frasen "mindre är mer" i utvecklingsprocessen när den gör koden mer läsbar och begriplig.
Om ett kodblock bara behöver en kodrad är chansen stor att du inte behöver definiera ett formellt kodblock med hjälp av klammerparenteser. Även om du tekniskt sett inte ens behöver dela upp koden i flera rader, kan en kombination av instruktioner på en enda rad göra koden svår att läsa.
Att ta bort klammerparenteserna enligt beskrivningen ovan är en stilistisk ändring som inte bör påverka kodens funktioner. Du bör dock vidta åtgärder för att se till att ändringarna inte påverkar hur läsbar koden är negativt. Du kan utvärdera effekten av att ta bort klammerparenteser och tomt utrymme och sedan återgå till den ursprungliga koden om du upptäcker att ändringarna gjorde koden mindre läsbar.
Skapa ett exempel på en if-instruktion som använder ett kodblock
Kontrollera att du har en tom Program.cs fil öppen i Visual Studio Code.
Om det behövs öppnar du Visual Studio Code och utför sedan följande steg för att förbereda en Program.cs fil i redigeraren:
På menyn Arkiv väljer du Öppna mapp.
Använd dialogrutan Öppna mapp för att navigera till CsharpProjects-mappen och öppna den sedan.
I panelen Visual Studio Code EXPLORER väljer du Program.cs.
På menyn Val i Visual Studio Code väljer du Välj alla och tryck sedan på Delete-tangenten.
Skriv följande kod i Visual Studio Code-redigeraren:
bool flag = true; if (flag) { Console.WriteLine(flag); }Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
Ange
dotnet runfrån Terminal-kommandotolken för att köra koden.Kontrollera att du ser följande utdata:
TrueDin kod representerar en bra startpunkt, men du har ett kodblock som innehåller en enda kodrad. Är det nödvändigt att definiera ett kodblock i det här fallet?
Ta bort måsvingarna
Koden ovan kör ett kodblock när flag är true. Eftersom det här kodblocket innehåller en enda kodrad kan du ta bort klammerparenteserna.
Uppdatera koden i Visual Studio Code-redigeraren på följande sätt:
bool flag = true; if (flag) Console.WriteLine(flag);Anmärkning
Att ta bort klammerparenteserna förändrar inte det faktum att
Console.WriteLine(flag);är kodblocket förif-instruktionen.Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
Observera att utdata är samma som tidigare.
Du bör fortfarande se följande utdata:
TrueDet finns dock två färre kodrader. Viktigast av allt, med kodraden under indraget
ifär koden fortfarande lätt att läsa.
Granska läsbarheten för enrads if-satser
I det här steget ska du titta på ett fall där kodläsbarhet kan påverkas negativt.
Eftersom både -instruktionen if och metodanropet till Console.WriteLine() är korta kan du frestas att kombinera dem på en enda rad. Med C#-syntaxen för -instruktionen if kan du trots allt kombinera instruktioner på det här sättet.
Uppdatera koden i Visual Studio Code-redigeraren på följande sätt:
bool flag = true; if (flag) Console.WriteLine(flag);Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
Observera att utdata fortfarande är desamma.
Ta en minut att överväga kodläsbarhet.
Föreställ dig de föregående två kodexemplen kapslade i ett större kodavsnitt. Att kombinera kodinstruktioner (som du gjorde i steg 4) kan göra det svårare att läsa.
När du implementerar en
ifsats som innehåller ett kodblock med ett enstaka uttryck rekommenderar Microsoft att du tar hänsyn till följande konventioner:- Använd aldrig enradsformulär (till exempel: if (flag) Console.WriteLine(flag);
- Användning av klammerparenteser accepteras alltid och krävs om något block i en if/else if/.../else sammansatt instruktion använder klammerparenteser eller om en enda instruktionstext sträcker sig över flera rader.
- Klammerparenteser får utelämnas endast om brödtexten för varje block som är associerat med en if/else if/.../else sammansatt sats placeras på en enda rad.
Om du vill undersöka läsbarhetspåverkan för större if-elseif-else-konstruktioner uppdaterar du koden på följande sätt:
string name = "steve"; if (name == "bob") Console.WriteLine("Found Bob"); else if (name == "steve") Console.WriteLine("Found Steve"); else Console.WriteLine("Found Chuck");Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
När du kör koden bör den generera följande utdata:
Found SteveKoden körs, men de här kodraderna är täta och svåra att läsa. Du kanske vill formatera om koden så att den inkluderar en radbrytning efter
if,else ifochelse-uttryck.Jämför koden som du precis körde med följande kod:
string name = "steve"; if (name == "bob") Console.WriteLine("Found Bob"); else if (name == "steve") Console.WriteLine("Found Steve"); else Console.WriteLine("Found Chuck");Observera hur mycket enklare det är att läsa det andra kodexemplet.
Sammanfattning
Här följer några viktiga saker att komma ihåg om if uttalande kodblock och läsbarhet:
- Om du inser att du bara har en kodrad i kodblocken i en
if-elseif-else-instruktion kan du ta bort klammerparenteserna i kodblocket och det tomma utrymmet. Microsoft rekommenderar att klammerparenteser används konsekvent för alla kodblock i enif-elseif-elseinstruktion (antingen finns eller tas bort konsekvent). - Ta bara bort klammerparenteserna för ett kodblock när det gör koden mer läsbar. Det är alltid acceptabelt att inkludera klammerparenteser.
- Ta bara bort radflödet om det gör koden mer läsbar. Microsoft föreslår att din kod blir mer läsbar när varje instruktion placeras på sin egen kodrad.