it-swarm-eu.dev

Jak ve svém kódu používáte prázdné řádky?

O prázdném prostoru již bylo řečeno několik poznámek o umístění složených závorek.

Já sám mám sklon posypat můj kód prázdnými řádky ve snaze oddělit věci, které jdou společně do „logických“ skupin, a doufám, že usnadní dalšímu člověku, aby přišel přečíst kód, který jsem právě vytvořil.

Ve skutečnosti bych řekl, že strukturuji svůj kód tak, jak píšu: Vytvářím odstavce, ne více než několik řádků (rozhodně kratších než 10), a snažím se učinit každý odstavec samostatným.

Například:

  • ve třídě budu seskupovat metody, které jdou spolu, zatímco je oddělím prázdným řádkem od další skupiny.
  • pokud potřebuji napsat komentář, obvykle vložím před komentář prázdný řádek
  • v metodě udělám jeden odstavec na krok procesu

Celkově vzato, jen zřídka mám více než 4/5 řádků seskupených dohromady, což znamená velmi řídký kód.

Nepovažuji všechno toto prázdné místo za odpad, protože ho ve skutečnosti používám ke strukturování kódu (protože ve skutečnosti používám odsazení), a proto cítím, že stojí za to, aby to bylo na obrazovce.

Například:

for (int i = 0; i < 10; ++i)
{
    if (i % 3 == 0) continue;

    array[i] += 2;
}

Domnívám se, že tato dvě prohlášení mají jasně odlišné účely, a proto si zaslouží oddělení, aby bylo zřejmé.

Jak tedy ve skutečnosti používáte (nebo ne) prázdné řádky v kódu?

31
Matthieu M.

Vždy

Whitespace je zásadní pro vyčištění čitelného kódu. Prázdný řádek (nebo dva) pomáhá vizuálně oddělit logické bloky kódu.

Například z Steve McConnell's Code Complete, Second Edition kapitoly o rozvržení a stylu:

Subjekty zaznamenaly o 20 až 30 procent vyšší test na porozumění, když programy měly schéma odsazení ze dvou na čtyři prostory, než tomu bylo v případě, kdy programy vůbec nebyly odsazeny. Stejná studie zjistila, že je důležité podtrhnout ani zdůraznit logickou strukturu programu. Nejnižší skóre porozumění bylo dosaženo u programů, které nebyly vůbec odsazeny. Druhé nejnižší bylo dosaženo u programů, které používaly odsazení šesti mezerami. Studie dospěla k závěru, že odsazení dvou až čtyř prostorů bylo optimální. Je zajímavé, že mnoho subjektů v experimentu mělo pocit, že šestimístné odsazení bylo jednodušší než menší odsazení, i když jejich skóre bylo nižší. Pravděpodobně je to proto, že šestimístné odsazení prostoru je příjemné. Ale bez ohledu na to, jak pěkně to vypadá, je šestimístné odsazení méně čitelné. Toto je příklad kolize: doplnění estetické přitažlivosti a čitelnosti.

87
Josh K

Ano pro přehlednost.

Stejně jako v této odpovědi.

21
user2567

Dělám, ale ujistím se, že to zdokumentuji vložením

(This line intentionally left blank.)

na lince

13
Don

Ano, ale nezneužívám to.

Viděl jsem kód, kde každý řádek kódu uvnitř metody je oddělen prázdným řádkem a dva prázdné řádky se používají tam, kde dochází k logickému oddělení. Díky tomu je podle mého názoru ještě méně čitelná. Také jsem viděl mezeru, která se používala k šíleným zarovnáním, jako je toto:

//Prot.   Return type                    Name                 Arg1        Arg2
//=====   ============================== ==================== =========== ========

private   int                            AMethodWithALongName(string s,   object o)
{
    ...
}

private   IDictionary<MyLongObject, int> SomethingCrazy      (string s)
{
    ...
}

protected void                           Foo                 (string str, object o)
{
    ...
}

Stejné zneužití horizontálního mezeru lze použít i na vertikální mezeru. Jako každý nástroj jej používejte moudře.

12
Allon Guralnek

Jsem všichni za to, aby byl kód co nejjasnější, a bílé znaky jsou v tomto úsilí často užitečným nástrojem. Ale nezapomeňte na refaktoring:

  • ve třídě budu seskupovat metody, které jdou spolu, zatímco je oddělím prázdným řádkem od další skupiny.

Protože máte několik souvisejících členů, jsou kandidáty na novou třídu.

  • pokud potřebuji napsat komentář, obvykle vložím před komentář prázdný řádek

Kdykoli je kód dostatečně nejasný, abych chtěl komentář, zeptám se, jestli mohu refaktorem učinit kód dostatečně jasný, abych nepotřeboval komentář.

  • v metodě, udělám jeden odstavec na krok procesu

Proč neudělat jednu metodu pro každý „odstavec“?

Pokud ve vaší třídě skončíte s mnoha metodami, přečtěte si výše uvedenou poznámku o extrahování nové třídy.

5
Jay Bazuzi

Ano. Usnadňuje vizuální skenování souboru. Mimo jiné objasňuje, s jakou řádkou se komentář týká.

Some code here
// Which line does this comment go with?
More code here

// It's pretty clear which line this comment goes with
More code here

Still more code here
5
Nathan Long

Jsem hodně kritizován za psaní kódu tímto způsobem. Nechápu, proč by to někdo tak neučinil.

Čitelnost je tak důležitá, když se po delší době vrátíte do projektu a slyšel jsem přísloví „Vždy napište kód, pokud je dalším chlapem, který jej čte, psychopat, který zná vaši polohu“.

5
Bryan Harrington

Ne vždy píšu software, ale když ano, používám pro přehlednost prázdné řádky.

5
Trinidad

Prázdné řádky používám střídmě a důsledně a důsledně je důležitější než střídmě. Nicméně:

  • Pokud je každý řádek kódu oddělen od dalšího řádku prázdným řádkem, je příliš mnoho prázdných řádků.
  • Pokud neexistuje rým ani důvod snadno rozeznatelný pro umístění prázdných řádků, jedná se o rozptýlení a obvykle jich je příliš mnoho.
  • Pokud je funkce tak velká, že potřebuje mnoho prázdných řádků, je příliš velká.
  • Pokud blok kódu potřebuje více než jeden prázdný řádek před nebo za ním, je něco vážně na scestí.
  • Pokud máte mezi funkcemi více než dva prázdné řádky, pravděpodobně máte příliš mnoho prázdných řádků.

Většina z toho není hrozně kontroverzní; co by mohlo následovat. Poznamenávám, že zápis K&R s otevřenými složenými závorkami na konci řádku je depresivně často následován prázdným řádkem. Osobně se mi nelíbí rovnátka na konci řádku a smíchám je s prázdným řádkem poté, co rovnátka dělá nesmysl notace (IMNSHO). Umístěte otevřenou vzpěru na další řádek samostatně a máte většinou prázdný řádek (a, IMNSHO, čitelnější kód). Pokud musíte na konci řádku použít výztuhu K&R, nerozhýbejte svislou úsporu místa zbytečnými prázdnými řádky.

// I don't like this
if (something == anotherthing) {
    print ...
    update ...
}

// I much prefer this
if (something == anotherthing)
{
    print ...
    update ...
}

// I loathe this - not least for its inconsistent spacing
if (something == anotherthing) {

    print ...
    update ...
}

// I loathe this too, for its absurd waste of vertical space
if (something == anotherthing) {

    print ...
    update ...

}
4

Napište to, co je nejčitelnější a nejméně překvapující.

function validEmail($addr) {
    $regex = "/.../";   
    return preg_match($regex, $addr);
}

Tato funkce nepotřebuje 12 řádků komentářů k dokumentu.

Ve skutečnosti to nevyžaduje žádné komentáře.

Nebo prázdné řádky.

Zbavili by se jeho podstaty.

3
KevBurnsJr

Uvnitř funkce? Zřídka

Pokud mám jasně odlišný blok, jedná se o refaktoring na novou funkci. Pokud to málo případů nestojí za to.

Pro mě jsou mezery uvnitř funkce jedním z nejvíce nesprávných „osvědčených postupů“.

3
Maniero

Najednou jsem volně posypal prázdné řádky celým kódem. Dnes mám tendenci být šetrnější. Myslím, že to je část toho, o čem Steve Yegge mluvil zde :

Doufejme, že ta scéna, kterou jsem dosud namaloval, ti pomůže pochopit, proč se někdy podíváš na kód a ty ho okamžitě nenávidíš. Pokud jste n00b, podíváte se na zkušený kód a řeknete, že je neproniknutelný, nedisciplinovaný svinstvo napsané někým, kdo se nikdy nenaučil základům moderního softwarového inženýrství. Pokud jste veterán, podíváte se na kód n00b a řeknete, že je to příliš komentovaný, ozdobný chmýří, který stážista mohl napsat v jednu noc silného pití.

Bod lepení je tolerance vůči stlačení. Jak píšete kód během své kariéry, zejména pokud se jedná o kód překlenující velmi odlišné jazyky a problémové domény, vaše tolerance ke kompresi kódu se zvyšuje. To se neliší od postupu od čtení dětských knih s obřím textem až po stále složitější romány s menším textem a většími slovy.

...

Programátorovi s vysokou tolerancí ke kompresi je ve skutečnosti bráněno rozprávění o vyprávění. Proč? Protože pro pochopení základny kódu musíte být schopni zabalit co nejvíce z toho do hlavy. Pokud je to složitý algoritmus, chce veteránský programátor celou obrazovku vidět, což znamená snížení počtu prázdných řádků a vložených komentářů - zejména komentářů, které jednoduše opakují, co kód dělá. To je přesně opak toho, co chce n00b programátor. n00bs se chtějí soustředit na jeden výrok nebo výraz najednou, přesouvat celý kód mimo něj, aby se mohli soustředit, a křičet nahlas.

V zásadě s ním souhlasím. Je mnohem lepší komprimovat kód, abyste na jednu obrazovku mohli získat co nejvíce z toho, abyste jej příliš rozložili. To neznamená, že byste měli nikdy používat prázdné řádky. Je to jen o tom, že pokud seskupení, které se snažíte vytvořit, nezvyšuje čitelnost nesmírně, je to více škody než užitku.

2
Jason Baker

Profesor Emeritus dal dva velké kousky rady

  1. Whitespace je zdarma
  2. Nepoužívejte svorky, které se hrabou zpět přes přední část papíru, jinak vás selžím.
2
Wonko the Sane

často

Použijte pro logické bloky kódu, které jsou zpracovávány podobně. Jakmile přidáte komentář, abyste ukázali, že děláte jiný krok - je čas na extrakci metody.

Dobrý mezera

{
    int x = computeX();
    x += ADJUSTMENT_FACTOR_X;

    int y = computeY();
    y += ADJUSTMENT_FACTORY_Y;

    setPosition(x, y);
}

Bad Whitespace

{
    //Open a connection
    String serverAddress = lookupAddress();
    Connection connection = openConnection(serverAddress);
    connection.login(user, password);


    //Go get stuff from the server
    item1 = connection.get(1);
    item2 = connection.get(2);

    //Close connection
    connection.close();

    //log data
    log(item1);
    log(item2);

    //Update client
    gui.updateView(item1, item2);        
}    

vs

{
    Connection connection = openConnection();
    updateData(connection);
    closeConnection(connection);
    logUpdate();
    updateGui();
}

vs

{
     updateDataFromServer();
     logUpdate();
     updateGui();
}
2
Steve Jackson

Používám nejen mezeru, ale pro přehlednost používám rovnátka.

Šle používám k tomu, abych řekl, že to mohou být funkce.

code
{
    code
    code
    code
    code
}
{
    code
    code=code
    code
    code

    code()
    code()
}
2
user2528

Rád přemýšlím o mezerách stejně jako o odstavování. Seskupujete řádky, které přispívají k jednomu nápadu.

Pokud zahajujete nový nápad nebo nový aspekt stejného nápadu, začnete nový odstavec - jako je tento.

V imperativním kódu seskupuji úkoly, které vykonávají jeden soudržný úkol; v deklarativním kódu seskupuji kód, který popisuje jedno soudržné vyjádření nápadu.

Zjevně nemáte žádné potíže s tím v angličtině (někteří lidé jsou hrozné s odstavováním odstavců), takže s trochou praxe by použití stejné dovednosti na kód nemělo být žádným úsekem.

1
Rei Miyasaka

Podle mého názoru jsou prázdné řádky nutností. Používám je k oddělení různých logických bloků kódu. Umožňuje čitelnost kódu. Čitelný kód je dobrý kód;)

Můj ideální kódový kus by byl každý logický blok oddělený prázdným řádkem a komentářem nad každým blokem, který má hlavní logiku.

Samozřejmě, pokud to lidé dělají přidáním více prázdných řádků všude, považuji to za velmi dráždivé :(

1
Karun AB

Mezery používám pouze v rámci funkce/metody k oddělení deklarací a kódu.

Pokud cítíte, že je třeba mít nějaké řádky k oddělení dílčích bloků kódu implementujících nějakou logiku, pak by měly být, ale v jiné funkci/soukromé metodě. Záleží na vašem kompilátoru, aby se příliš nestál nad hlavou.

obvykle v peusdo kódu:

def function(arg1, argn, ...)
    INITIALIZERS

    CODE
    BLOCK_START
        INITIALIZERS

        CODE
    BLOCK_END
    CODE
end

Pokud vidím zbytečné mezery, obvykle se krču.

1
haylem

Moje pravidla jsou tato:

  1. Pokud mám potíže se čtením kódu, který jsem napsal včera, pravděpodobně potřebuji extrahovat metodu nebo tři.

  2. Pokud je moje definice třídy příliš dlouhá na to, aby byla snadno čitelná, pravděpodobně potřebuji extrahovat modul/rozhraní/objekt.

  3. Definice metody: přidejte řádek

  4. Definice modulu/třídy: přidejte dva řádky

1
philosodad

Ano. Pro čitelnost. Někdy jsem dokonce do kódu vložil prázdné řádky, které jsem nepsal. Zjistil jsem, že je snazší pochopit kód, když mají logické seskupení pomocí prázdných řádků - jako u toho můžete „rychle číst“.

0
javacruiser

Měli bychom používat prázdné řádky mezi codeblocks jako my, když píšeme dopis.

Například mezi funkcemi nebo uvnitř funkce, když dokončíme smyčku ...

Lidé vám děkují čistý kód, pokud na něm musí provádět údržbu;)

0
user7242

Používáme mezery doporučené Microsoft StyleCop. Kromě čitelnosti a konzistence jsem zjistil, že (společně s malými třídami) řádně uspořádaný kód usnadňuje správu fúzí, když různí lidé v týmu náhodou pracují ve stejných oblastech.

Nejsem si jistý, zda je to jen moje představivost, ale zdá se, že rozdílné nástroje dokážou lépe rozpoznat, kde ekvivalentní kód začíná a končí při slučování, když je uspořádán úhledně. Pěkně uspořádaný kód je radost sloučit. Dobře, to byla lež - ale bolest se udržovala alespoň na zvládnutelné úrovni.

0
FinnNk

Prázdný prostor je nesmírně cenný.

Zde je řešení ... blbci, kteří píšou komplikovaný kód jako E = MC2 skvěle předvádí své programovací dovednosti.

Nyní skočme dopředu o šest měsíců a je 2:00 dopoledne a systém, na který se po šest měsíců nikdo nedíval, se zlomil na samém řádku E = MC2. To je téměř nemožné ladit ... každý se šílí.

Předpokládejme, že kód vypadal spíš takto ...

See Dick
See Jane
See Dick and Jan

Pokud je 2:00 dop. A kód je rozbitý. Rychlý pohled vám ukáže, že řádek tři měl být

See Dick and Jane

Problém je vyřešen.

Sečteno a podtrženo ... použijte mezeru.

Nikdy prázdný řádek, ne celý soubor. To neznamená, že v kódu nejsou zlomy:

 code;
 //
 morecode;

Prázdné řádky slouží k otevírání částí kódu, na kterých chcete pracovat, v editoru máte několik klávesových zkratek, které vás přenese na předchozí/následující prázdný řádek.

0
Mark

Jak již mnozí uvedli, prázdné řádky usnadňují čtení kódu. Existují však některé jazyky, které tento standard prosazují. Ten, na který si pomyslím mimo temeno hlavy (ne tolik o prázdných řádcích, ale o správné odsazení), je Python.

0
Skudd

Souhlasím, stejně používám mezeru. Pokud však zjistím, že používám mezeru, abych rozdělil metodu na příliš mnoho částí, je to znamení, že budu muset tento kód změnit na několik metod. Příliš mnoho logických částí v metodě může signalizovat, že metoda bude těžší testovat.

0
user7187

Používám je k rozdělení kódu na logické jednotky. Viděl jsem jen velmi málo ukázek kódu, které nepoužívaly prázdné řádky, samozřejmě je vyloučeno zmatení.

0
kirk.burleson

Odpověď Psychopata je nejlepší, ale nahradil bych ji předpokládáním, že další osoba je idiot a že budou předpokládat, že jste, a budete je chtít prokázat špatně.

Pro čitelnost je stejně důležité použití komentářů. Každou funkci nebo podprogram otevírám blok komentáře, vysvětluji v jasném textu, co to je, co dělá, jaké jsou argumenty a jaké jsou očekávané výsledky (včetně seznamu chybových stavů). Pak není pochyb o tom, co je určeno a/nebo navrženo. To, čeho dosahuje, se může lišit, ale to je dále.

Myslím, že příliš mnoho kodérů buď předpokládá, že to budou oni sami, kteří budou dělat „opravy“ kódu, nebo se prostě nestarají.

0
Peter

Prázdné řádky jsou důležité. Plýtvání celým prázdným řádkem na úvodní závorce však snižuje množství kódu, který můžete vidět na obrazovce. Mělo by:

for (int i; i < 10; ++i)
{  if (i % 3 == 0) continue;

   array[i] += 2;
}

(Nenechte mě začít tím, že by se rovnátka "{" nacházela na stejném řádku jako "pro" ... to je meshuggah).

0
user7195