Övning – Använd blanksteg för att göra koden enklare att läsa
Utskrifts- och webbdesigners förstår att det överbelastar tittaren att lägga för mycket information i ett litet utrymme. Därför använder delar de avsiktligen upp informationen med hjälp av tomt utrymme, eller negativt utrymme, så att läsaren lättare kan ta till sig innehållets huvudsyfte.
Utvecklare kan använda en liknande metod när de skriver kod i ett redigeringsprogram. Genom att använda tomt utrymme för att förmedla innebörd kan utvecklare öka tydligheten i kodens avsikt.
Vad är tomt utrymme?
Termen ”tomt utrymme”" syftar på enskilda blanksteg som skapas med space bar, tabbar från tangenten tab och radbrytningar från tangenten enter.
Kompilatorn för C# ignorerar tomt utrymme. Om du vill förstå hur blanksteg ignoreras och hur du maximerar tydligheten med hjälp av blanksteg kan du gå igenom följande övning.
Lägg till kod för att illustrera hur tomt utrymme ignoreras av C#-kompilatorn
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 och öppna sedan mappen CsharpProjects .
I vyn Visual Studio Code EXPLORER väljer du Program.cs.
På menyn Markering i Visual Studio Code väljer du Välj alla och trycker sedan på Delete-tangenten.
Ange följande kod:
// Example 1: Console . WriteLine ( "Hello Example 1!" ) ; // Example 2: string firstWord="Hello";string lastWord="Example 2";Console.WriteLine(firstWord+" "+lastWord+"!");På menyn Visual Studio Code-fil väljer du Spara.
Högerklicka på TestProject för att öppna en terminal på mappen TestProject och välj sedan Öppna i integrerad terminal.
I terminalkommandot skriver du dotnet run och trycker sedan på Retur.
Du bör se följande utdata:
Hello Example 1! Hello Example 2!Ta en minut att tänka på vad det här resultatet visar om hur du ska använda blanksteg i koden.
Dessa två kodexempel illustrerar två viktiga idéer:
- Tomt utrymme spelar ingen roll för kompilatorn. Men …
- När tomt utrymme används korrekt kan det förbättra möjligheten att läsa och förstå koden.
Du skriver förmodligen koden en gång, men måste läsa koden flera gånger. Därför bör du fokusera på läsbarheten för den kod som du skriver. Med tiden får du en känsla för när och hur du använder blanksteg, till exempel blanksteg, flikar och nya linjer.
Tidig vägledning:
- Varje fullständigt kommando (en instruktion) hör hemma på en separat rad.
- Om en viss kodrad blir lång kan du dela upp den. Du bör dock undvika att godtyckligt dela upp en enda instruktion i flera rader såvida det inte finns en bra anledning att göra det.
- Använd utrymme till vänster och till höger om tilldelningsoperatorn.
Ersätt din befintliga kod med följande kod:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } else { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } }Observera att den här koden inte innehåller mycket blanksteg. Den här koden används för att illustrera en metod för att lägga till blanksteg i dina program. Effektiva blanksteg bör göra det lättare att förstå vad koden gör.
Kommentar
Koden använder
Randomklassen för att utveckla ett simulerat tärningsspel, där det totala värdet från tre kast används för att utvärdera en "vinnande" poäng. Koden tilldelar extra poäng för rullande dubbel eller tripplar. Du behöver inte helt förstå den här koden för att se fördelarna med att inkludera blanksteg.Ta en minut att tänka på hur du skulle använda blanksteg för att förbättra kodens läsbarhet.
Det finns två intressanta egenskaper hos den här koden:
- Det finns inget lodrätt tomt utrymme i det här kodexemplet. Med andra ord finns det inga tomma rader som skiljer kodraderna åt. Allt körs ihop i en enda kompakt kodlista.
- De kodblock som definieras av inledande och avslutande klammerparenteser
{ }är hoptryckta, vilket gör gränserna svåra att urskilja visuellt.
För att förbättra läsbarheten introducerar du i allmänhet en tom rad mellan två, tre eller fyra kodrader som gör liknande eller relaterade saker.
Formulering av kod via lodrätt tomt utrymme är subjektiv. Det är möjligt att två utvecklare inte kommer överens om vad som är mest läsbart eller när de ska lägga till blanksteg. Gör det som känns logiskt för dig.
Om du vill lägga till ett lodrätt blanksteg som förbättrar läsbarheten uppdaterar du koden på följande sätt:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } else { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } }Din första rad med blanksteg används för att separera deklarationen av variabeln
dicefrån de kodrader som används för att tilldela värden till dina rollvariabler. Den här separationen gör det lättare att se hurdiceanvänds i koden.Nästa rad med blanksteg separerar deklarationen för dina rollvariabler från deklarationen av
total. Det är praktiskt att gruppera deklarationen för dina tre rollvariabler på två sätt. Först skapar den en grupp med kodrader som innehåller relaterade variabler. För det andra är variabelnamnen så lika och deklarationen följer samma mönster. Så att gruppera dem tillsammans drar ditt öga till likheterna och hjälper till att exponera skillnaderna.Slutligen separerar den tredje raden med blanksteg en annan grupp relaterade instruktioner från dina kapslade
ifinstruktioner. Den grupp av instruktioner som innehåller deklarationentotalavConsole.WriteLine()och metoden är relaterad efter syfte snarare än utseende. Din kod fokuserar på det totala värdet som uppnås av de tre tärningarna och om kastet innehåller dubbla eller tredubblade värden. Dessa rader är relaterade eftersom du behöver beräknatotaloch rapportera resultatet av rullen till användaren.Vissa utvecklare kan hävda att du bör lägga till en tom rad mellan deklarationen
totalförConsole.WriteLine()och . Återigen, valet av blanksteg är upp till din bästa bedömning. Du bör bestämma vilken som är mer läsbar för dig och använda det formatet konsekvent.Allt du har kvar är -instruktionen
if. Du kan undersöka det nu.Om du fokuserar på kodraderna under nyckelordet
ifändrar du koden på följande sätt:Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } else { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } }Observera att du har flyttat de inledande och avslutande klammerparenteserna till sin egen linje för att förbättra avståndet.
Symbolerna
{och}skapar kodblock. Många konstruktioner i C# kräver kodblock. Dessa symboler bör placeras på en separat rad så att deras gränser syns tydligt.Dessutom är det viktigt att använda tangenten
tabför att justera symbolerna för kodblocken under det nyckelord som de hör till. Observera till exempel den kodrad som börjar med nyckelordetif. Under den raden finns symbolen{. Den här justeringen gör det enkelt att förstå att{"tillhör" -instruktionenif. Dessutom radas även den sista}symbolen upp med -instruktionenif. Kombinationen av justering och indrag gör det enkelt att förstå var kodblocket börjar och slutar.Kodraderna i det här kodblocket är indragna, vilket anger att de "tillhör" det här kodblocket.
Du följer ett liknande mönster med den inre
ifinstruktionen ochelse-instruktionen och koden inuti dessa kodblock.
Alla instämmer inte i den här stilguiden för att inkludera blanksteg. Du bör dock överväga att använda den här vägledningen som utgångspunkt när du skriver kod. I framtiden kan du vara målmedveten när du fattar ett beslut om att avvika från den här vägledningen.
Sammanfattning
Här är de viktigaste lärdomarna från den här övningen:
- Använd tomt utrymme där det är lämpligt för att förbättra kodens läsbarhet.
- Använd radmatningar för att skapa tomma rader som åtskiljer kodfraser. En fras innehåller kodrader som liknar varandra eller fungerar tillsammans.
- Använd radmatningar för att separera kodblockssymboler så att de står på en egen kodrad.
- Använd tangenten
tabför att justera ett kodblock med det nyckelord som blocket är associerat med. - Dra in kod i ett kodblock för att visa ägarskap.