Cvičení – použití prázdných znaků k usnadnění čtení kódu

Dokončeno

Návrháři tisku a webů chápou, že příliš mnoho informací v malém prostoru zahltí čtenáře. Proto záměrně používají prázdný nebo negativní prostor k rozdělení informací, aby se schopnost čtenáře pochopit jejich primární sdělení maximalizovala.

Vývojáři můžou při psaní kódu v editoru použít podobnou strategii. Využitím prázdných znaků k vyjádření záměru můžou vývojáři zvýšit přehlednost svého kódu.

Co jsou prázdné znaky?

Termín „prázdné znaky“ označuje jednotlivé mezery vytvořené pomocí space bar, tabulátory vytvořené pomocí klávesy tab a nové řádky vytvořené pomocí klávesy enter.

Kompilátor jazyka C# ignoruje prázdné znaky. Pokud chcete zjistit, jak se prázdné znaky ignorují a jak maximalizovat srozumitelnost pomocí prázdného místa, projděte si následující cvičení.

Přidání kódu pro ilustraci ignorování prázdných znaků kompilátorem jazyka C#

  1. Ujistěte se, že máte v editoru Visual Studio Code otevřený prázdný soubor Program.cs.

    V případě potřeby otevřete Visual Studio Code a pak následujícím postupem připravte soubor Program.cs v Editoru:

    1. V nabídce Soubor vyberte Otevřít složku.

    2. Pomocí dialogového okna Otevřít složku přejděte na složku CsharpProjects a otevřete ji.

    3. V zobrazení Průzkumníka editoru Visual Studio Code vyberte Program.cs.

    4. V nabídce Výběru editoru Visual Studio Code vyberte Vybrat vše a stiskněte klávesu Delete.

  2. Zadejte následující kód:

    // Example 1:
    Console
    .
    WriteLine
    (
    "Hello Example 1!"
    )
    ;
    
    // Example 2:
    string firstWord="Hello";string lastWord="Example 2";Console.WriteLine(firstWord+" "+lastWord+"!");
    
  3. V nabídce Soubor editoru Visual Studio Code vyberte Uložit.

  4. Chcete-li v zobrazení PRŮZKUMNÍKa otevřít terminál v umístění složky TestProject, klepněte pravým tlačítkem myši na TestProject a pak vyberte Otevřít v integrovaném terminálu.

  5. Na příkazovém řádku terminálu zadejte příkaz dotnet run a stiskněte Enter.

    Měl by se zobrazit následující výstup:

    Hello Example 1!
    Hello Example 2!
    
  6. Zvažte, co vám tento výsledek řekne o tom, jak byste měli v kódu používat prázdné znaky.

    Tyto dva příklady kódu ukazují dva důležité poznatky:

    • Kompilátor nebere ohled na prázdné znaky. Avšak...
    • Prázdné znaky, pokud se používají vhodně, můžou zvýšit čitelnost a srozumitelnost kódu.

    Kód pravděpodobně napíšete jednou, ale potřebujete kód přečíst několikrát. Proto byste se měli zaměřit na čitelnost kódu, který píšete. V průběhu času budete mít pocit, kdy a jak používat prázdné znaky, například znak mezery, tabulátory a nové řádky.

    Úvodní pokyny:

    • Každý úplný výraz (příkaz) patří na samostatný řádek.
    • Pokud je jeden řádek kódu dlouhý, můžete ho rozdělit. Neměli byste ale svévolně rozdělovat jeden příkaz na několik řádků, pokud k tomu nebudete mít dobrý důvod.
    • Nalevo a napravo od operátoru přiřazení použijte mezeru.
  7. Nahraďte stávající kód následujícím kódem:

    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;
        }
    }
    

    Všimněte si, že tento kód neobsahuje mnoho prázdných znaků. Tento kód se použije k ilustraci přístupu pro přidání prázdných znaků do vašich aplikací. Efektivní prázdné znaky by měly usnadnit pochopení toho, co váš kód dělá.

    Poznámka:

    Kód používá Random třídu k vývoji simulované kostky hry, kde se k vyhodnocení "vítězného" skóre používá celková hodnota ze tří hodů. Kód uděluje dodatečné body za dvojité nebo trojité. Abyste viděli výhodu zahrnutí prázdných znaků, nemusíte tento kód plně pochopit.

  8. Chvíli zvažte, jak byste pomocí prázdných znaků zlepšili čitelnost tohoto kódu.

    Všimněte si v tomto kódu dvou věcí:

    • V tomto příkladu kódu nejsou žádné mezery ve svislém směru. Jinými slovy, řádky kódu neoddělují od sebe žádné prázdné řádky. Vše se zobrazuje společně jako jeden hustý výpis kódu.
    • Bloky kódu, které se definují pomocí symbolů otevíracích a uzavíracích složených závorek { }, jsou natlačené navzájem k sobě, takže vizuální rozlišení jejich hranic je obtížné.

    Obecně řečeno, abyste zlepšili čitelnost, zavádíte prázdný řádek mezi dvěma, třemi nebo čtyřmi řádky kódu, které dělají podobné nebo související věci.

    Frázování kódu pomocí mezer ve svislém směru je subjektivní záležitostí. Je možné, že dva vývojáři nebudou souhlasit s tím, co je nejčitelné nebo kdy přidat prázdné znaky. Použijte svůj vlastní úsudek.

  9. Pokud chcete přidat svislé prázdné znaky, které zlepšují čitelnost, aktualizujte kód následujícím způsobem:

    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;
        }
    }
    

    První řádek prázdných znaků slouží k oddělení deklarace dice proměnné od řádků kódu, které slouží k přiřazení hodnot do proměnných roll. Toto oddělení usnadňuje zobrazení způsobu dice použití v kódu.

    Další řádek prázdných znaků odděluje deklaraci proměnných roll od deklarace proměnné total. Seskupování deklarace tří proměnných roll je užitečné dvěma způsoby. Nejprve vytvoří skupinu řádků kódu, které obsahují související proměnné. Za druhé, názvy proměnných jsou tak podobné a deklarace se řídí stejným vzorem. Seskupením seskupíte je tak, že nahlédněte do podobností a pomůžete odhalit rozdíly.

    Třetí řádek prázdných znaků nakonec odděluje další skupinu souvisejících příkazů od vnořených if příkazů. Skupina příkazů, které zahrnují deklaraci total a metodu Console.WriteLine() souvisí účelem, a nikoli vzhledem. Váš kód se zaměřuje na celkovou hodnotu dosaženo třemi kostkami a na to, jestli hod zahrnoval dvojité nebo trojité hodnoty. Tyto řádky souvisejí, protože potřebujete vypočítat total a nahlásit výsledky uvedení uživateli.

    Někteří vývojáři mohou argumentovat, že byste měli přidat prázdný řádek mezi deklaraci total a Console.WriteLine(). Volba prázdných znaků je opět na vašem nejlepším úsudku. Měli byste se rozhodnout, který styl je pro vás čitelnější a používat ho konzistentně.

    Všechno, co jste nechali, je příkaz if . Teď to můžete prozkoumat.

  10. Když se zaměříte na řádky kódu pod klíčovým slovem if , upravte kód následujícím způsobem:

    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;
        }
    }
    
  11. Všimněte si, že jste přesunuli levou a pravou složenou závorku na vlastní řádek, abyste zlepšili mezery.

    Symboly { a } vytvářejí bloky kódu. Mnoho konstruktorů jazyka C# vyžaduje bloky kódu. Tyto symboly by se měly umístit na samostatný řádek, aby jejich hranice byly jasně viditelné a čitelné.

    Navíc je důležité zarovnávat symboly bloků kódu pod klíčové slovo, ke kterému patří, pomocí klávesy tab. Všimněte si například řádku kódu, který začíná klíčovým slovem if. Pod tímto řádkem je symbol {. Toto zarovnání usnadňuje pochopení, že { příkaz "patří" if . Kromě toho poslední } symbol zaplní if i příkaz. Kombinace zarovnání a odsazení usnadňuje pochopení, kde začíná a končí blok kódu.

    Řádky kódu uvnitř tohoto bloku kódu jsou odsazené, což znamená, že patří do tohoto bloku kódu.

    Podobný vzor použijete s vnitřním if příkazem a else příkazem a kód uvnitř těchto bloků kódu.

Ne všichni souhlasí s tímto stylem pokynů pro zahrnutí prázdných znaků. Při psaní kódu byste ale měli zvážit použití těchto doprovodných materiálů jako výchozího bodu. V budoucnu můžete být účelní při rozhodování o odchylce od těchto pokynů.

Rekapitulace

Hlavní poznatky z tohoto cvičení:

  • Používejte prázdné znaky uvážlivě tak, aby se zlepšila čitelnost kódu.
  • Používejte odřádkování k vytváření prázdných řádků za účelem oddělení frází kódu. Fráze obsahuje řádky kódu, které jsou podobné, nebo spolupracují.
  • Používejte odřádkování k oddělení symbolů bloků kódu tak, aby tyto symboly měly svůj vlastní řádek kódu.
  • Používejte klávesu tab k zarovnání bloku kódu s klíčovým slovem, ke kterému je přidružený.
  • Odsazujte kód uvnitř bloku kódu tak, aby se zobrazovalo vlastnictví.