should_authorize_via_email
email.input_code tel.input_code
 
email.code_actual_for tel.code_actual_for
apply_exit_text
session_ended
to_homepage
Jak psát kvalitní kód v jazyce C sharp?

Jak psát kvalitní kód v jazyce C sharp?

Poznej základy psaní čistého kódu v C# a zefektivni svou práci

Programovací jazyk C# nabízí širokou škálu využití. Můžeš v něm vytvářet webové aplikace i počítačové hry. Počítat ale musíš tím, že je potřeba zapracovat na svých programátorských skills. Pokud nebudeš psát kvalitní kód, bude pro tebe nebo tvého kolegu obtížné s ním v budoucnu pracovat.

V článku jsme si pro tebe připravili několik osvědčených postupů, které ti zaručeně pomohou psát kvalitní kód v jazyce C sharp. Ať už jsi začátečník, nebo už za sebou máš nějaké projekty, níže uvedené postupy se určitě vyplatí aplikovat do tvé praxe.

Snadno zapamatovatelné názvy 

Zaměř se na to, aby názvy proměnných byly snadno zapamatovatelné. Jde o poměrně častou chybu, kterou programátoři dělají. Tu zpravidla způsobuje nutkání zakomponovat do kódu více informací, než je potřeba.

Proto pamatuj, že při definici proměnné je lepší používat smysluplný název, který se snadno pamatuje i vyslovuje.

Špatný způsob:

var yyyymmddstr = DateTime.Now.ToString("YYYY/MM/DD");

Dobrý způsob:

var currentDate = DateTime.Now.ToString("YYYY/MM/DD");

 Máš pocit, že jde o naprostou banalitu? Jakmile začneš pracovat na větším projektu, přibude více proměnných.  Až se budeš po čase vracet ke své práci, budeš ještě rád*a, že sis na názvech dal*a záležet.

Drž se osvědčených zásad pojmenování

Řada programovacích jazyků má své osvědčené zásady pojmenování, které usnadňují čitelnost kódu, jeho srozumitelnost a udržitelnost. Zapamatuj si, že v jazyce C# se používá:

  • pascal case pro pojmenování třídy, rozhraní, struktury nebo typu delegáta. V tomhle případě je vždy první písmeno slova velké.
  • camel case pro zápis argumentu metody, místní proměnné a soukromé pole. Tento způsob zápisu má první písmeno slova malé, další pak jsou velká.

Příklad:

// PascalCase 
    public string FirstName { get; set; }
    public string LastName { get; set; }
 
// camelCase 
string firstName = "Alice";
string lastName = "Smith";

Vyhni se opakování

Další častou chybou, s níž se může setkat tvůj kód, je nadměrné opakování jmen nebo slov. Pokud se tento mnohdy nevědomý sklon k pojmenování neodnaučíš, zbytečně jím zaneseš svou práci. V rámci čitelnosti a udržitelnosti kódu je dobré, když se odnaučíš opakovat tam, kde to není třeba.

Špatný způsob

Bike MountainBike = new(){
   bikeBrand = "Trek",
   bikeModel = "MX Mountain",
   bikeColor = "Green"
};
 
void paintBike(Bike mountainBike, string color){
     mountainBike.bikeColor = color;
}

Dobrý způsob:

Bike MountainBike = new(){
   brand = "Trek",
   model = "MX Mountain",
   color = "Green"
};
 
void paintBike(Bike mountainBike, string color){
     mountainBike.color = color;
} 

Už na první pohled vidíš, že příklad ukazující dobrý způsob je snáze čitelný.

Používej jednotné názvy pro proměnné

Řada vývojářů při definování proměnné má tendenci vytvářet odlišnou strukturu. Jednoduše se dá říct, že pro označení stejné proměnné se používá jiný lexikální význam.

Při psaní kódu je zapotřebí, abys usiloval*a o jednoduchost. Proto měj na paměti, že bys v rámci jedné proměnné měl*a používat stejná slova, nikoliv jejich synonyma.

Špatný způsob

getUserInfo();
getClientData();
getCustomerRecord();

Špatný způsob

getUser();

V ilustračním příkladu vidíš, jak takové nadužívání synonymních výrazů vypadá.  Tento postup může být časem matoucí jak pro tebe, tak pro vývojáře, který bude s tvým kódem pracovat.

Vyhni se magic numbers a strings

Hodnota, která je napevno zakódována přímo v kódu, se označuje jako tzv. „magic numbers“ nebo „magic strings“, což může ztížit údržbu i úpravu. Předejít možným chybám se dá tak, že hodnotu definuješ jako konstantu nebo enum.

Tento postup zlepšuje udržitelnost kódu, protože centralizuje hodnotu a zaručuje snazší aktualizaci i úpravu kódu do budoucna.

Špatný způsob

if (userRole == "Admin")
{
    // logic in here
}

Dobrý způsob

const string ADMIN_ROLE = "Admin"
if (userRole == ADMIN_ROLE)
{
    // logic in here
}

Tímto způsobem zabráníš tomu, aby se řetězce duplikovaly a způsobovaly chyby v případě, že v některém z nich provedeš změnu.

Omezení vnořování bloků kódu

Pro zlepšení čitelnosti a udržitelnosti kódu je nezbytné omezit hloubku vnořených bloků. Nadměrné vnořování může způsobit, že kód bude nepřehledný a náročný na sledování.

Z toho důvodu složitou logiku rozděl do samostatných metod nebo tříd a dodržuj princip jediné odpovědnosti (SRP). Tento postup podporuje opakované použití kódu, jeho čitelnost a úpravu.

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
 
public class EmployeeRegistration
{
    public void Register(Employee employee)
    {
        StaticData.Employees.Add(employee);
    }
}
 
public class StaticData
{
    public static List Employees { get; set; } = new List();
}

V tomto příkladu třída Employee uchovává údaje o zaměstnancích, třída EmployeeRegistration uchovává registrační operace a třída StaticData uchovává údaje o zaměstnancích.

Využívej efektivní komentáře kódu

Komentáře hrají důležitou roli při dokumentování kódu a napomáhají jeho pochopení. Přidáním popisných poznámek přidáváš kontext a vysvětluješ, co kód dělá. Ostatní vývojáři mohou snáze pochopit tvůj záměr a efektivněji udržovat nebo upravovat kódovou základnu.

Nezapomínej na jasné pravidlo. Tvůj komentář musí být stručný, jasný a aktuální. 

Kontrola null pomocí příkazu if

Příkaz if může mít značné množství funkcí a způsobů využití. Jedním z nich je jeho použití při kontrole null. Nedá se říct, že by šlo vyloženě o chybu, ale přílišné nadužívání if může vést k chybám.

Špatný způsob:

if (application != null)
{
    if (application.protected != null)
    {
        return application.protected.shieldLastRun;
    }
}

Dobrý způsob:

return application?.protected?.shieldLastRun;

Vše se dá vyřešit null-conditionalem (?.), který kód výrazně zkracuje, zamezuje chybám a je udržitelnější. 

Využití generik a LINQ

Generika a LINQ jsou klíčové funkce jazyka C#, které vám umožňují psát efektivní a opakovaně použitelný kód. Generika nabízejí možnost vytvářet algoritmy a datové struktury, které jsou schopné pracovat s libovolnými datovými typy, čímž zvyšují flexibilitu a znovupoužitelnost tvého kódu. 

Language Integrated Query poskytuje výkonný a stručný způsob, jak se dotazovat a manipulovat s kolekcemi dat, což zahrnuje pole, seznamy, a dokonce i zdroje dat, jako jsou databáze nebo XML soubory. 

Použitím LINQ můžeš psát dotazy, které jsou snadno čitelné a údržbové, zatímco generika ti umožní psát obecnější kód, jenž se dá snáze znovu použít a a adaptovat na různé typy dat. 

Způsobů, jak psát kvalitní kód, je více

V článku jsme ti shrnuli základní postupy, které ti zaručeně pomohou při psaní kvalitního kódu. Nezapomínej ale, že jde o proces učení, jenž tě bude provázet na tvé cestě vývojáře. Proto je dobré rozšiřovat své znalosti v oblasti psaní kvalitního i čistého kódu. S tím ti může pomoci náš kurz Clean code & design patterns.

Pro více tipů a novinek ze světa IT, programování či umělé inteligence sleduj náš blog nebo sociální sítě.

Autor: Martin Šlat

Více článků
Vývojové nástroje, které se používají nejčastěji.
Kam směřuje technologie AR? Podívej se na příklady i preview rozšířené reality