Měly by se složené závorky objevit na jejich vlastní linii? [uzavřeno]
On 14 února, 2021 by adminKomentáře
- Považuji " == true " rušivější než volba umístění vzpěry.
- @Dan: Myslím si, že vždy vysvětlit podmíněný výraz velmi pomáhá v jasnosti.
- Jediný důvod, proč by to záležitost by byla, kdyby vaše IDE / editor nepodporuje ' odpovídající rozpoznávání složených závorek.
- @ leeand00: někteří z nás stále tisknou složitý / neznámý kód za účelem jeho studia / anotace. Dobrá hezká tiskárna však zmírňuje většinu problémů.
- smutné, otázka je uzavřena. Po nějaké době použití syntaxe na základě odsazení jsem přešel na (možná divnou) jinou strukturu složených závorek. Jako vaše první, ale uzavírací závorka v posledním řádku bloku. (za řádkem kódu)
Odpověď
Když jsem byl student, dával jsem na stejné místo složené závorky řádek, aby jich bylo méně, a kód se vytiskne na méně stránek. Pohled na jediný znak v závorce vytištěný jako jediná věc v řádku je nepříjemný. (prostředí, plýtvání papírem)
Ale při kódování velkých aplikací je povoleno povolit některé řádky, které mají pouze složené závorky, vzhledem k tomu, jaký „seskupovací“ pocit to dává.
Bez ohledu na styl, který si vyberete , buďte konzistentní , aby se váš mozek nestal režií zpracování více stylů v související části kódu . V různých scénářích (jako výše) bych řekl, že je v pořádku používat různé styly, je snazší „přepínat kontext“ na vysoké úrovni.
Komentáře
- Na druhou stranu, výztuha na nové lince je ANSI STANDARD, K & R není. Krása na standardech však spočívá v tom, že je jich tolik různé (viz také uncyclopedia.wikia.com/wiki/AAAAAAAAA ! v uncyclopedia).
- " existuje méně řádků " Mám terabajty prostoru a spoustu pixelů. Proč by mi mělo záležet na použití více řádků?
- @ 12431234123412341234123: I myslí si, že to myslí, protože někteří lidé vytisknou kód pro kontrolu kódu. A každý ne zcela nezbytný nový řádek je zbytečný papír nebo km ² lesů promarněných v měřítku. Pokud však don ' t to nevytiskněte (určitě ne ' t), pak je ANSI mnohem lepší než K & R. Kdokoli, kdo má v úmyslu tisknout, by měl pravděpodobně používat automatizovaný formátovač kódu – takže by to měla být otázka nástrojů, nikoli styl kódování.
- Souhlasím, že byste měli zůstat konzistentní, I ' m už roky používám složené závorky na nových řádcích, ale v mém kódu musím kombinovat jiným způsobem, například při volání funkcí, anonymních funkcí, literálů objektů atd. Jakékoli jazyky založené na výrazech / anonymní kód výrazně usnadňuje závorky na stejném řádku
Odpověď
Nikdy byste neměli dělat třetí metodu.
Skimpování na složených závorkách vám může poprvé ušetřit několik stisků kláves, ale další kodér, který přijde spolu, přidá něco do vaší jiné klauzule, aniž by si všiml, že v bloku chybí složené závorky, které budou mít spoustu bolesti.
Napište svůj kód pro další lidi.
Komentáře
- Přeji si, abych věděl, kde ta trocha moudrosti pochází. Protože psaní kódu pro lidi, kteří se ' neobtěžují číst, je asi tak zbytečné, jak můžete …
- Druhý programátor může přidat svůj vlastní složené závorky, když něco přidá. ' není hloupý a v kódovací konvenci, která podporuje vynechání složených závorek pro jednoduché věci, jako je tento, ' bude vědět, jak vypadat.
- Volitelné závorky nejsou volitelné. Existuje několik horších konstrukčních rozhodnutí, která byla učiněna v C a přenesena do jeho potomků. To, že to žije v tak nedávném jazyce, jako je C #, mě rozzuří.
- Nezáleží ' na tom, jak chytrý jste nebo jak zakořeněný je standard kódování kolem vynechaných kudrnatých řádků: pokud ' Při hledání řešení problému nebo chyby budete pravděpodobně chybět, že byly kudrlinky vynechány. A je to celkem celkem 2 sekundy práce, je opravdu tak špatné být explicitní?
- Existuje ' jedna výhoda stylu # 3, kterou si ' chybí vše: Na obrazovce se zobrazí více kódu najednou.
Odpovědět
Dlouho jsem tvrdil, že mají stejnou hodnotu, nebo jsou velmi blízké stejné že možný zisk ze správné volby byl daleko, daleko pod náklady na dohadování o tom.
Být konzistentní je však důležité . Řekl jsem tedy, že hodíme mincí a pokračujeme v psaní kódu.
Viděl jsem programátory odolat takovým změnám dříve. Přenes se přes to! Během své kariéry jsem mnohokrát přešel. Ve svém C # používám dokonce i jiné styly než v mém PowerShellu.
Před několika lety jsem pracoval v týmu (~ 20 vývojářů), který se rozhodl požádat o vstup, a pak se rozhodnout a poté to prosadit na celé kódové základně. Máme „1 týden na rozhodnutí.
Spousta stén & oko -motorování. Spousta „líbí se mi moje cesta, protože je to„ lepší “, ale žádná podstata.
Když jsme studovali jemnější body otázky, někdo se zeptal, jak se s tímto problémem vypořádat v rovině -same-line style:
void MyFunction( int parameterOne, int parameterTwo) { int localOne, int localTwo }
Všimněte si, že není okamžitě zřejmé, kde seznam parametrů končí, a tělo začíná. Porovnat s:
void MyFunction( int parameterOne, int parameterTwo) { int localOne, int localTwo }
Provedli jsme několik čtení o tom, jak se lidé z celého světa s tímto problémem vypořádali, a našli jsme vzor přidání prázdného řádku po otevření složená závorka:
void MyFunction( int parameterOne, int parameterTwo) { int localOne, int localTwo }
Pokud se chystáte udělat vizuální přestávku, můžete to udělat také se složenou závorkou. Pak budou vaše vizuální přestávky také konzistentní .
Upravit : Dvě alternativy řešení „extra prázdný řádek“ při použití K & R:
1 / Odsadit argumenty funkce odlišně od těla funkce
2 / Umístit první argument na stejný řádek jako název funkce a sladit další argumenty na nových řádcích s tímto prvním argumentem
Příklady:
1 /
void MyFunction( int parameterOne, int parameterTwo) { int localOne, int localTwo }
2 /
void MyFunction(int parameterOne, int parameterTwo) { int localOne, int localTwo }
/ Upravit
Stále tvrdím, že konzistence je důležitější než jiné úvahy, ale pokud nemáme vytvořený precedens , pak je cesta správným směrováním.
Komentáře
- Pro vaši informaci, mohu znít jako rozumný člověk, ale ' jsem vlastně oříšek. U jednoduchých jednořádkových bloků nebudu používat ani složené závorky ani nové řádky, takže ' if (foo) bar () ' vše jeden čára. Snažím se, aby byl můj kód natolik jednoduchý, že ' to není problém.
- Přišel sem a zveřejnil přesně toto. Spousta lidí, kteří udržují úvodní složenou závorku na stejném řádku, navazuje na prázdný řádek (zejména na začátku tříd a metod), protože jinak ' je těžké oddělit záhlaví třídy / metody od těla. Pokud přesto ' použijete další řádek, můžete tam také umístit vzpěru a získat další výhodu odsazení, které bude lépe vidět.
- jsem ' neviděl jsem prázdný řádek – jsem ' obeznámen s dvojitou odrážkou parametrů pro MyFunction (), když zabloudí na jiný řádek.
- Rozdělení parametrů na více řádků je šílené.
- Funkční parametr " " argument je červený sledě. Je zřejmé, že argumenty by měly být zamýšleny dvakrát. Žádný problém jej odlišit od následujícího kódu.
Odpovědět
Kardinální pravidla jsou:
- Řiďte se stávajícím kódovacím standardem projektu.
- Pokud neexistuje žádný kódovací standard a upravujete existující kódovou základnu ve vlastnictví někoho jiného – buďte v souladu se stylem stávající kód, bez ohledu na to, jak se vám líbí / nelíbí.
- Pokud pracujete na projektu na zelené louce – diskutujte s ostatními členy týmu a dohodněte se na formálním nebo neformálním standardu kódování.
- Pokud pracujete na projektu na zelené louce jako jediný vývojář – udělejte si vlastní názor a buďte bezohledně důslední .
I když nemáte žádná vnější omezení, je (IMO) nejlepší hledat existující (široce používaný) standard kódování nebo pokyny pro styl a pokusit se jimi řídit. Pokud použijete svůj vlastní styl, je velká šance, že ho za pár let budete litovat.
Nakonec je styl, který je implementován / implementovatelný pomocí existujících nástrojů pro kontrolu stylu a formátovačů kódu, lepší než ten, který je třeba „vynutit“ ručně.
Komentáře
- Tato odpověď si zaslouží více hlasů.
- konzistence je klíč
Odpověď
Výhodou první metody je, že je vertikálně kompaktnější , takže se vám na obrazovku vejde více kódu, a proto ho dávám přednost. Jediným argumentem, který jsem slyšel ve prospěch druhé metody, je to, že usnadňuje párování otevírací a zavírací závorky, ale většina IDE má klávesová zkratka a ve skutečnosti jde o falešné prohlášení – místo spárování úvodní závorky s uzavírací závorkou můžete spárovat uzavírací závorku s výrazem „začátek bloku“ (pokud, jinak, pro, zatímco) na stejné úroveň odsazení, takže je stejně snadné ji určit kde je začátek bloku.
Nevidím důvod plýtvat celým řádkem pouze pro závorku, když předchozí konstrukce pro / while / if již vizuálně označuje začátek bloku.
To znamená, věřím, že koncová závorka by měla být ve svém vlastním řádku, protože potřebujeme něco, co by viditelně označilo konec bloku a jeho strukturu odsazení.
Komentáře
- Ne … Říkám ' proč snížit množství kódu, který může přizpůsobit se vaší obrazovce provedením něčeho, co ' nepřidá kódu ' jasnost?
- Když začínal s kódováním Líbilo se mi každé složené závorce na jeho vlastní linii, teď dávám přednost první metodě.
- Existuje obrovské množství výzkumů, které sahají až do raného věku Steam (Weinberg, " Psychologie počítačového programování "), která ukazuje, že programátorské porozumění DRAMATICKY odpadá, když množství kódu, které je třeba zobrazit, je větší, než je možné vidět na jednou (tj. jedna obrazovka, jedna stránka tiskárny). Tento jev SILNĚ argumentuje za to, že vertikální prostor považujeme za hodnotný zdroj, který by neměl být zbytečně plýtván, a proto je upřednostňována první metoda. CELÝ řádek ". PRO BOHA! Ne, že!! = P
- @Julio Na škole jsem silně upřednostňoval metodu 1 a nemohl jsem ' přečíst metodu 2. Po práci ve společnosti, která používá C # , kde je standardem metoda 2, se mi to také ' líbí. Nyní mohu číst nebo používat buď; ani jeden mě neobtěžuje. Lidé, kteří mají silně averzní reakci na to či ono, obvykle přehnaně reagují na něco, co jim není známo.
Odpovědět
Dávám přednost
if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); }
před
if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); }
protože řádek you.postAnswer();
je mnohem snazší číst a najít na první pohled. Druhým způsobem se mísí s řádkem nad ním (you.hasAnswer()
), takže moje oči se musí více soustředit, aby si to přečetly.
Komentáře
- To platí, dokud váš program nepřekročí výšku obrazovky. 😉
- @ weberc2 Myslím, že když váš program přesáhne výšku obrazovky, o dva řádky méně se ' hodně nezmění.
- Před 10 lety bych souhlasil s prostorem na obrazovce. Dnes používám obrazovku 1920 * 1200. Hodilo se to na hodně kódu, víc, než dokáže můj mozek zpracovat najednou. První metoda mi umožňuje vytáhnout zpět a vidět různé otevírání / zavírání rozsahu, aniž bych ho musel číst.
- Nikdy jsem nemohl pochopit, proč jsem tuto metodu upřednostňoval, ale ' s přesně tohle.
- @Mageek To je opožděné, ale ' to není 2 řádky, ' s 2 řádky pro každý obor. To ' s O (N), ne O (1). Nemám ' ve skutečnosti to tak silně; ' je mnohem důležitější vybrat styl, díky kterému budou dlouhé seznamy parametrů čitelné.
Odpovědět
Dávám přednost první metodě. Závorky rozhodně nestojí za samostatný řádek.
Věc je, že závorky nejsou důležité. Jsou to jen syntaktické koše , což je naprosto zbytečné pro pochopení toho, k čemu kód slouží, jeho účelu a způsob, jakým je implementován. Jsou jen poctou starým jazykům typu C, kde vizuální seskupování operátorů nebylo možné kvůli nedostatku místa na obrazovce.
Existují jazyky (Python, Haskell, Ruby), které jsou v pořádku bez složených závorek. To jen potvrzuje, že složené závorky jsou odpadky, a neměly by si pro ně zasloužit řádek, kdykoli je to možné:
if (you.hasAnswer()){ you.postAnswer(); }else{ you.doSomething(); }
Komentáře
- Nevím ' nevím o Haskellovi nebo Ruby, ale Python je citlivý na prázdné znaky, a proto nevyžaduje ' t závorky nebo jiné oddělovače k označení bloků. Šle nejsou jen syntaktický šum; slouží skutečnému účelu.
- @Robert, v jazyce C musíte udělat jak mezery, tak i složené závorky. V Pythonu byste měli dělat pouze mezery. Co je lepší?
- @Pavel, v C ' nemusíte ' dělat bílý prostor.
- Programy @KenBloom C bez mezer nelze přečíst. Takže je musíte stejně udělat.
- Bez ohledu na to, zda jsou složené závorky dobrý nápad nebo ne, pouhá existence jazyků, které je ' nepoužívají, nepoužívá ' to nevypadá jako argument pro nebo proti nim. Pouze to naznačuje, že je možné mít jazyk bez nich, ne že by se jednalo o dobrý nebo špatný jazykový design.
Odpověď
Použijte Python a úplně se vyhněte argumentu.
Komentáře
- +1
SyntaxError: not a chance
- To pro drtivou většinu projektů prostě není možné. Navíc má odsazení pro seskupení ' podíl na problémech.
- @Bryan, uvědomuji si, že to není ' t velmi praktické. Jen jsem si myslel, že to musí být úhel pohledu, silnější než pouhý komentář. A ' nikdy nenarazím na problémy způsobené odsazením, které naznačujete, pravděpodobně proto, že nemíchám ' karty a mezery.
- Použijte Go a úplně se vyhněte argumentu (plus statické psaní, rychlost a kompilátor!) 🙂
- Poté stiskněte mezerník příliš mnohokrát a sledujte smích překladače / tlumočníka na tebe. K tomu ' nedojde ve většině připravených jazyků.
Odpověď
Pozice složených závorek by měla být
meta data
konfigurovatelná v IDE programátorem. Takto budou ty otravné závorky v celém kódu bez ohledu na autora vypadat stejně.
Komentáře
- Naprosto souhlasím. Jedná se o ' prezentaci a ne o data.
- Problém je v tom, že pokud necháte každého nastavit si vlastní, věci se rychle zkomplikují, jakmile budou hotové závazky.
- @Andy: To ' je přesně ten bod, IDE změní jejich vzhled, ale pouze v IDE! Skutečného zdroje se nedotknete. Pro správu verzí můžete přidat háčky, které překládají jakékoli nastavení složených závorek do běžné situace, takže každý zkontroluje kód stejným způsobem.
- @klaar Každé moderní IDE i změní karty na mezery a přesune závorky na vlastní řádek nebo na konec " úvodního " řádek; ' Nejsem si jistý, proč si myslíte, že se zdroje v těchto případech ' nedotknete, a to je důvod mého komentáře. Obvykle se mění IDE v závislosti na nastavení vývojářů, což znamená, že během revize uvidím ' spoustu změn, které jsou jen šumem, když se závorky přesunuly na jejich vlastní řádek, a tím skrýt SKUTEČNOU změnu, kterou někdo udělal.
- @Andy: Není zde ' možnost použít háčky, které převádějí tyto nesrovnalosti týkající se mezer a závorek na jednotný standard uppon commit, obejít hluk, který jsi popsal? Ať tak či onak, správný systém verzí by měl překračovat drobné věci, jako jsou mezery nebo jiné nesmyslné věci.
Odpovědět
Dávám přednost prvnímu, protože v tomto příkladu je pro mě chyba vidět těžší.
if (value > maximum); { dosomething(); }
než je tomu v tomto příkladu
if (value > maximum); { dosomething(); }
; {
mi připadá více špatný než řádek končící ;
takže si to pravděpodobněji všimnu.
Komentáře
- Uděláte dobrý argument, ale osobně se to nikdy nestalo stalo se mi jednou za 5 let programování. Nedokázal jsem ' přijít na to, proč to nebylo ' t vykonáno, zveřejnil jsem to na SO a někdo mi rychle ukázal středník. Pokaždé, když je kondenzováno použít o 1 řádek méně, je mi těžší číst.
- "; {" vypadá jako druh mrkající nevrlé tváře nebo možná osoba s knírem.
- +1 Skvělý příklad odpovědi: velmi jemná chyba, snadno přehlédnutelná. Vyvolání myšlenek také na rozložení, které to ukazuje.
- Samozřejmě každý slušný IDE označí prázdné kontrolní prohlášení a každý slušný kompilátor vydá varování.
- @Dunk Jedinou chybou ve vašem Argument (s nímž energicky souhlasím) je, že tolik lidí dnes používá interpretované jazyky (JavaScript, PHP atd.), že mnoho " programátorů " by ' neznal překladač z dvojitého latte.
odpověď
Záleží na tom.
Pokud kóduji v Javascriptu nebo jQuery, použiji první formulář:
jQuery(function($) { if ($ instanceOf jQuery) { alert("$ is the jQuery object!"); } });
Ale pokud kóduji v C #, používám druhý formulář, protože to je kanonický způsob, jak to udělat v C #.
public int CalculateAge(DateTime birthDate, DateTime now) { int age = now.Year - birthDate.Year; if (now.Month < birthDate.Month || (now.Month == birthDate.Month && now.Day < birthDate.Day)) age--; return age; }
Všimněte si, že váš příklad lze napsat
if (you.hasAnswer()) you.postAnswer(); else you.doSomething();
v jazyce C #.
Komentáře
- Může být napsán v mnoha jazycích, jako je tento, protože je to blokové prohlášení je prohlášení. Přidávání! 🙂
- Podle " pokynů pro rámcový design " " kanonickým způsobem " je umístění úvodní závorky na stejný řádek (tj. první formulář). Stačí říct ' …
- @Uwe: Možná. Microsoft však přijal přístup " zarovnané závorky " pro všechny své příklady MSDN C # a ' s zapečené do Visual Studio, takže …
- @Uwe: That ' s Cwalina ' Kniha a ta ' je strašně pojmenovaná, protože je mnohem víc než jen to. FDG na MSDN o tom nemá co říct. Také by mě zajímalo, proč by rámcové designové pokyny říkaly něco o C # kódování ?
- Měli byste ve skutečnosti dát složené závorky na stejný řádek v Javascript. Pokud jsou složené závorky na jejich vlastním řádku, můžete způsobit chyby. Například viz encosia.com/…
Odpověď
Dávám přednost mírné variantě 1)
if (you.hasAnswer()) { you.postAnswer(); } // note the break here else { you.doSomething(); }
Proč?
-
Myslím, že vždy umístění závorek na vlastní řádek snižuje čitelnost. Na obrazovku se mi vejde jen určité množství zdrojového kódu. Styl závorky 2) dělá bolestivé algoritmy s mnoha vnořenými smyčkami a podmíněně bolestivě dlouhé.
-
Chci však, aby
else
začal na novém řádku, protožeif
aelse
vizuálně patří k sobě. Pokud je předelse
závorka, je mnohem obtížnější zjistit, co k čemu patří. -
3 ) diskvalifikuje se. Všichni víme, jaké špatné věci se mohou stát, pokud vynecháte závorky a zapomenete na to.
Komentáře
- Viděl jsem tenhle, kde pracuji. Je to ' zajímavé.
- Tento styl se mi také líbí lépe, protože mi umožňuje umístit komentář nad
else
podle potřeby a / nebo vložte prázdný řádek mezi blok if-block a else-block, aby věci vypadaly méně přeplněné. Styl závorky č. 2 nedělá nic jiného než distancování akcí od podmínek. S tím bylo řečeno, že můj oblíbený je určitě python ' s no bracket style 🙂 - Pokud je důležité maximalizovat počet kódových řádků na obrazovce, prostě to udělejte s novými řádky úplně. Na jedné obrazovce ' budete moci získat spoustu řádků. Raději nemám nic, co by mě při čtení pozastavilo a přemýšlelo, tzn. moje definice čitelnější. Díky závorkám je moje mysl ignoruje. Bez závorek musí moje mysl pozastavit a srovnat řídicí bloky. Není to dlouhá pauza, ale pauza.
- Ano, pokud a jinde patří k sobě, ALE tak {a} a jako} je na samostatném řádku, {by měl být na samostatném řádku linka také. " Na obrazovku se mi vejde jen určité množství zdrojového kódu " A to ' Proč přesně říkat 3) by " diskvalifikovalo se ", není vůbec žádná možnost. Po deseti letech práce s 3) jsem nikdy nezapomněl přidávat závorky při přidávání nového řádku kódu, ani neznám nikoho, kdo kdy měl. Pokud musím upravit kód pro lidi, kdo ' t správně číst, kde to skončí? Přestat používat určité jazykové funkce, protože některé z čteček kódů jim nemusí rozumět?
Odpověď
Někde jsem četl, že autoři nějaké knihy chtěli, aby jejich kód byl formátován takto:
if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); }
Ale prostorová omezení jejich vydavatele znamenala, že museli použít toto:
if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); }
Teď nevím, zda je to pravda (jak už ji nemůžu najít), ale druhý styl je v knihách velmi rozšířený.
Na osobní úrovni dávám přednost závorkám na samostatný řádek jako:
a) označují nový rozsah
b) je snazší zjistit, když máte neshodu (i když v IDE jde o menší problém, který zdůrazňuje chyby pro vás).
Komentáře
- … Druhá možnost také usnadňuje oba vaše body (samotné odsazení slouží účelu složené závorky / kombinace odsazení). 🙂
Odpověď
Aha, Jeden True Brace Style .
Má vše potřebné pro svatý W. ay – dokonce i prorok (Richard „můj způsob nebo dálnice“ Stallman).
Ten chlápek se v tolika věcech tak mýlil, ale GNU je na místě, pokud jde o rovnátka.
[Aktualizace] Viděl jsem světlo a nyní uctívám Allman
Komentáře
- Nevidím ' smysl stylu GNU, kromě toho, že modeluje lisp kód. Vypadá to jako spousta práce pro malé výhody.
- Neznám nikoho, kdo používá styl GNU. 1TBS po celou cestu.
- ' nemůžete dělat horší než dvě úrovně odsazení na blok, samozřejmě kromě stylu lisp, to je samozřejmé.
- +1 pro odkaz na styly složených závorek. Ukazuje, že bez ohledu na váš styl s vámi mnoho skvělých lidí nesouhlasí.
- @RobertHarvey Neexistuje žádná práce navíc, pokud ano, nepoužíváte ' správný nástroj pro psaní kódu nebo pro jeho správnou konfiguraci. Výhodou je mnohem čitelnější kód, uvidíte každou chybu v závorce velmi rychle a můžete snadno přečíst pouze kód z, zatímco ignorujete dílčí bloky.
Odpovědět
Druhý příklad, jsem velmi velký, pokud jde o čitelnost. Nemohu se dívat na to, zda blokuje jiným způsobem = (
Komentáře
- Výzkum naznačuje, že ' je snazší číst kompaktní kód, jakmile základ kódu překročí výšku obrazovky.
- @ weberc2 , mohl byste poskytnout výzkumné práce DOI?
Odpověď
Jednoduchá odpověď: co je jednodušší ladit?
// Case 1: void dummyFunction() { for (i = 0; i != 10; ++i) { if (i <= 10) std::cout << "i is: " << i << "\n"; std::cout << 10 - i << " steps remaining\n"; // Some hard work here // which is really hard // and does take some screen estate } else std::cout << "We"ll never get there"; } } // COMPILER ERROR HERE // Case 2: void dummyFunction() { for (i = 0; i != 10; ++i) if (i <= 10) { std::cout << "i is: " << i << "\n"; std::cout << 10 - i << " steps remaining\n"; // Some hard work here // which is really hard // and does take some screen estate } else std::cout << "We"ll never get there\n"; } } // COMPILER ERROR HERE
V jakém případě jste diagnostikovali problém jako první?
Nezajímám se příliš o osobní preference (existuje mnoho dalších styly, včetně whitesmith a spol.) a já se moc nestarám … pokud mi to nebude bránit v schopnosti číst kód a debug to.
A s k argumentu „waste space“, nekoupím ho: i tak přidávám prázdné řádky mezi logické skupiny, aby byl program přehlednější …
Komentáře
- Oba je lze stejně snadno ladit, hlavně proto, že ' je krátký blok kódu. Odsazení je konzistentní, což usnadňuje vizualizaci skutečných bloků kódu.
- @Htbaa: opravdu 🙂 Proč se tedy obtěžovat?
- @MatthieuM. První blok mi dává větší smysl, protože nové řádky (ve druhém bloku) mezi podpisem funkce, příkazem for a příkazem if mě přimějí věřit, že spolu nesouvisí, ale zjevně nejsou ' t. Prázdné řádky slouží k oddělení nesouvisejících bitů kódu; kód, který ' blízký jiným řádkům kódu znamená, že ve skutečnosti souvisejí. Toto je samozřejmě ' imo ', ale zajímalo by mě, o co jde. EDIT: také jakýkoli správný IDE si všimne chybějící závorky a při interpretaci vašeho kódu vám dá spoustu chyb.
- Chtěl bych upozornit, že tyto dvě části kódu jsou zcela odlišné. V různých bodech kódu byste měli chyby kompilátoru. První by měl chybu kompilátoru " else " a poslední kudrnatý. Druhý by měl chybu kompilátoru pouze na poslední složené.
Odpověď
Ne, že by si toho někdo všiml, ale to je důvod, proč složené závorky patří na stejném řádku jako podmínka (kromě velmi dlouhých podmínek, ale to je hrana případ):
V jazyce C se jedná o platný konstrukt:
while(true); { char c; getchar(); //Wait for input }
Rychle! Co dělá tento kód? Pokud jste odpověděli “ nekonečná smyčka s dotazem na vstup „, mýlíte se! Na vstup se ani nedostane.“ Chytí se na while(true)
. Všimněte si středníku na konci.Tento vzor je ve skutečnosti častější, než se zdá, že by měl být; C vyžaduje, abyste deklarovali své proměnné na začátku bloku, a proto byl spuštěn nový.
Řádek kódu je myšlenka. Šle jsou součástí myšlenky obsahující podmínku nebo smyčku. Patří tedy do stejného řádku.
Komentáře
- Toto je zdaleka nejlepší argument pro styl K & R, který jsem viděl, ostatním se dnes smějeme ' IDE systémy s podporou skládání kódu. To platí pouze pro jazyky ve stylu C, které podporují
;
konce bloku. I proto pohrdám tímto blokovým zakončovacím systémem, který je IMHO zastaralý a dokazuje to jazyk Go. Viděl jsem tento problém mnohokrát, i když ne v tomto scénáři. Obvykle se to stane, když mají v úmyslu něco přidat do výroku a zapomenout na to.
Odpověď
Líbí se mi první metoda. Vypadá to úhledněji IMO a je to kompaktnější, což se mi líbí.
EDIT: Aha, třetí. Líbí se mi ten nejlepší, když je to možné, protože je ještě menší / úhlednější.
Odpověď
Mohli byste to napsat:
you.hasAnswer() ? you.postAnswer() : you.doSomething();
To odpovědět na otázku; Dával jsem přednost kudrnatým složeným závorkám na jejich vlastní linii, ale abych nemusel myslet na chyby z automatického vkládání středníku do prohlížečů, začal jsem používat egyptský styl pro javascript. A když jsem kódoval javu v zatmění, neměl jsem zájem bojovat (nebo konfigurovat) výchozí styl složené závorky, takže jsem v tom případě šel také s egyptštinou. Teď jsem v pořádku s oběma.
Komentáře
- k takovému použití,
postAnswer()
adoSomething()
by měl vrátit hodnotu pro ternární operátor, což často není pravda: mohou velmi dobře vrátit void (bez hodnoty). a také (alespoň v C #) výsledek?:
by měl být přiřazen k nějaké proměnné
odpověď
Téměř všechny odpovědi zde říkáme nějaké variace na „Ať uděláte cokoli, držte se jednoho nebo dvou.“
Takže jsem o tom chvíli přemýšlel a musel jsem přiznat, že to nevidím tak důležité . Může mi někdo upřímně říct, že následující je těžké sledovat?
int foo(int a, Bar b) { int c = 0; while(a != c) { if(b.value[a] == c) { c = CONST_A; } c++; } return c; }
Nejsem si jistý nikým jiným … ale mám psychicky naprosto nulové problémy přepínání mezi styly tam a zpět. Trvalo mi několik okamžiků, než jsem zjistil, co kód udělal, ale to je výsledek toho, že jsem náhodně psal syntaxi typu C. 🙂
Podle mého nepříliš pokorného názoru jsou otevírací závorky pro čitelnost kódu téměř úplně irelevantní. Existuje několik rohových případů uvedených výše, kde jeden nebo druhý styl má rozdíl, ale většinou to uvážlivé použití prázdných řádků vyčistí.
FWIW, naše styly kódování v práci používají mírně strukturovanější formulář 1 a upravený formulář 3. (C ++)
// blank line is required here if (x) { //This blank line is required y = z; } // blank line is required here too, unless this line is only another "}" if (x) y = z; //allowed if (x) y = z; // forbidden
Jsem zvědavý, jestli ti, kdo silně upřednostňují formulář 2, najdou tuto verzi formuláře 1 lepší, jen proto, že prázdný řádek poskytuje silnější vizuální oddělení.
Komentáře
- Jak ukazuje váš příklad, odsazení je pro čitelnost mnohem důležitější než závorky kód. Některé jazyky ve skutečnosti dělají odsazení jediným způsobem vnořování příkazů!
- Ok, upřímně vám připadám, že váš nekonzistentní příklad je těžko čitelný. NENÍ SKUTEČNĚ těžké, ale těžší než bylo to konzistentní.
- Souhlasím s Almem. Nejedná se o případ " je to opravdu těžké " . Jde o případ " je to rozhodně těžší ", i když to není těžké. Proč tedy věci ztěžovat? V příkladech " hraček ", které lidé uvádějí, je samozřejmě malý rozdíl. Podle mých zkušeností, když zdědím ošklivý kód od někoho jiného a použili metodu 1, je často nutné pokračovat a proměnit ji v metodu 2, abych mohl sledovat logiku. Vzhledem k tomu, že se stává často nezbytným; automaticky odpovídá na otázku, která metoda je lepší a srozumitelnější.
- @Dunk: Nemohu pochopit kód, který by se znatelně zlepšil výměnou takových nepodstatných podrobností.
- @jkerian -Zřejmě jste ' nezdědili mnoho kódu od ostatních, kteří již dlouho opustili projekt nebo společnost. Nemohu ' pochopit, že do této situace neběží nikdo s několikaletými zkušenostmi. Ale znovu, každá ' pracovní situace je jiná. Pokud také musíte provádět " formální " kontroly kódu, formátování je docela rozdílné. Umět číst kód přirozeně je velmi důležité.Určitě se můžu pozastavit a přemýšlet, jak spojit rovnátka, ale to zpomaluje postup. Jeden způsob nevyžaduje pozastavení, ostatní ano. Proto ' proto nechápu ', proč by mohla být doporučena jakákoli jiná volba.
Odpověď
Překvapuje mě, že to ještě nebylo vzneseno. Dávám přednost druhému přístupu, protože umožňuje snadnější výběr bloku.
Když složené závorky začínají a končí ve stejném sloupci a na jejich vlastním řádku, můžete vybrat z okraje nebo pomocí kurzoru ve sloupci 0. Obvykle to představuje velkorysější oblast s výběrem myši nebo méně stisky kláves s výběrem klávesnice.
Původně jsem pracoval se složenými závorkami na stejném řádku jako podmíněný, ale když jsem přepnul, zjistil jsem, že to zrychlilo rychlost, jakou jsem pracoval. Samozřejmě to není noc a den, ale je to něco, co vás mírně zpomalí při práci se složenými závorkami vedle vašich podmínek.
Komentáře
- Starší časovače jako já používají tři stisknutí kláves k výběru bloku bez ohledu na to, kde jsou zatracené závorky.
Odpovědět
Mně osobně se líbí druhý způsob.
Způsob, který předvedu, je však podle mého názoru nejlepší, protože vede k největší jistotě práce! Spolužák z mé univerzity mě požádal o pomoc s domácími úkoly, a tak vypadal jeho kód. Celý program vypadal jako jeden blok. Zajímavostí je, že 95% chyb v programu, který vytvořil, pocházelo z neodpovídajících závorek. Dalších 5% bylo zřejmé, jakmile se složené závorky shodují.
while(1){ i=0; printf("Enter coded text:\n"); while((s=getchar())!="\n"){ if(i%1==0){ start=(char*)realloc(input,(i+1)*sizeof(char)); if(start==NULL){ printf("Memory allocation failed!"); exit(1);} input=start;} input[i++]=s;} start=(char*)realloc(input,(i+1)*sizeof(char)); if(start==NULL){ printf("Memory allocation failed!!!"); exit(1);} input=start; input[i]="\0"; puts(input);
Komentáře
- Špatné, špatné , Myslím hrozný, hrozný příklad. Problém není v rovnátkách! Je to ' šílené odsazení!
- @Martinho Fernandes Myslel jsem si, že umístění složených závorek a odsazení jde dohromady …
- ne nutně. .. proveďte řádné odsazení nahoře a poté náhodně přepněte styly složených závorek, ' zjistíte, že je to ' srozumitelné.
- Přemýšlení o tom ve skutečnosti motivovalo moji vlastní odpověď na tuto otázku.
- " 95% chyb v programu, který vytvořil, pochází od neodpovídající složené závorky " – pouze v interpretovaných jazycích, nejsou kompilovány.
Odpovědět
Moje osobní preference je pro první metodu, pravděpodobně proto, že tak jsem se poprvé naučil PHP.
U jednořádkových příkazů if
Budu používat
if (you.hasAnswer()) you.postAnswer();
Pokud to není you.postAnswer();
, ale něco mnohem déle, například you.postAnswer(this.AnswerId, this.AnswerText, this.AnswerType);
pravděpodobně se vrátím k fi první typ:
if (you.hasAnswer) { you.postAnswer(this.AnswerId, this.AnswerText, this.AnswerType); }
Nikdy nepoužiju zalomení řádku a tuto metodu nikdy nepoužiji, pokud existuje i else
prohlášení.
if (you.hasAnswer()) you.postAnswer(); else you.doSomething()
je teoretická možnost, ale nikdy ji nepoužívám. To by se muselo proměnit v
if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); }
odpověď
Neměli by; první metoda pro mě.
Když se podívám na druhou, kvůli nepoužitým řádkům (ty, které mají na sobě pouze složené závorky, kromě poslední uzavírací složené závorky), mám pocit, že to naruší kontinuitu kód. Nemohu to přečíst tak rychle, protože musím věnovat zvláštní pozornost prázdným řádkům, které obvykle znamenají oddělení v účelu kódu nebo něco podobného, ale v žádném případě „tento řádek nepatří do složené závorky“ (což pouze opakuje význam odsazení).
Každopádně, stejně jako při psaní textu … přidání odsazení na začátek odstavce je nadbytečné, pokud před ním je prázdný řádek (dvojitý znak změny odstavce), zde není nutné plýtvat řádky pro složené závorky, když jsme správně odsazeni.
Navíc, jak již bylo uvedeno, umožňuje umístit na obrazovku více kódu, což je jinak trochu kontraproduktivní.
Odpověď
Závisí to na platformě / jazyce / konvencích
V Javě:
void someMethod() { if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); } }
v jazyce C #
void someMethod() { if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); } }
v jazyce C:
void someMethod() { if (you_hasAnswer()) { you.postAnswer(); } else { you_doSomething(); } }
Nesnáším, když lidé z Java používají svůj styl v C # kódu a naopak.
Komentáře
- Styl C al způsoby mě rozčilovaly. Buďte důslední!
Odpověď
Mohu jen říct, že pokud jste fanouškem metody č. 3 , budete pronásledováni každým formátovačem kódu IDE na Zemi.
Odpověď
První metodu používám jednoduše proto, je kompaktnější a umožňuje více kódu na obrazovce. Já sám jsem nikdy neměl problém se spárováním složených závorek (vždy je vypíšu spolu s příkazem if
před přidáním podmínky a většina prostředí vám umožňuje přejít na odpovídající složenou závorku).
Pokud jste potřebovali vizuálně spárovat rovnátka, pak bych dal přednost druhé metodě. To však umožňuje méně kódu najednou, což vyžaduje, abyste více rolovali. A to má pro mě alespoň větší dopad na čtení kódu, než mít úhledně zarovnané závorky. Nesnáším rolování. Pak znovu, pokud potřebujete procházet jediným příkazem if
, je s největší pravděpodobností příliš velký a vyžaduje refaktoring.
Ale; nejdůležitější ze všeho je konzistence. Použijte jedno nebo druhé – nikdy obojí!
Odpovědět
Když jsem se poprvé učil programování ve 12, nasadil jsem závorky další řádek, protože tutoriály Microsoftu o kódování jsou takové. Tentokrát jsem také odsadil 4prostorové TABS.
Po několika letech jsem se naučil Javu a JavaScript a viděl jsem více kódů složených závorek na stejném řádku, takže jsem se změnil. Také jsem začal odsazovat mezery o 2 mezerách.
Komentáře
- +1, -1. Proč byste NENÍ odsazeni s kartami, protože každý editor může upravit délku karty na libovolnou délku? Jinak povedete mnoho z nás, kteří mají rádi skutečné odsazení v 8, proklínat váš kód.
Odpovědět
K dispozici je čtvrtá možnost, která udržuje rovnátka zarovnaná, ale neztrácí místo:
if (you.hasAnswer()) { you.postAnswer(); i.readAnswer(); } else { you.doSomething(); }
Jediným problémem je, že se tím většina automatických formátovačů IDE dusí.
Komentáře
- … stejně jako většina programátorů, kteří by se tím zadusili.
- To se zdá být hrozné. Myslete na musíte vynaložit další úsilí, pokud chcete vložit řádek nahoře nebo odebrat horní řádek. ' řádek jednoduše smažete a přejdete dál, musíte si pamatovat znovu vložit složenou závorku.
- lol to je úžasné! 🙂 lepší než první styl!
- Zdá se, že má dokonce i název. Horstman Syyle je zmíněn ve wikipedii . Pracoval jsem s
„b54ea6a0a5″>
s takovou databází jako to ' opravdu není špatné použijte.
Odpověď
Všechno záleží na vás, pokud nepracujete na projektu, kde někteří omezení kódování nebo některé standardy byly stanoveny projektovým manažerem, které musí všichni programátoři, kteří na tomto projektu pracují, při programování dodržovat.
Osobně bych preferoval první metodu.
Také jsem nedostal to, co chcete ukázat třetí metodou?
Není to špatně? Například zvažte situaci jako ..
if (you.hasAnswer()) you.postAnswer(); else you.doSomething();
Co když někdo chce přidat další výroky do if block?
V takovém případě, pokud použijete 3. metodu, kompilátor vyvolá syntaktickou chybu.
if (you.hasAnswer()) you.postAnswer1(); you.postAnswer2(); else you.doSomething();
Komentáře
- Ještě horší by bylo, kdyby někdo přišel a udělal: if (you.hasAnswer ()) you.postAnswer (); else you.doSomething (); you.doSomethingElse (); – je to ' sa recept na jemné chyby, kterým oko snadno proklouzne a kompilátor ' nepomůže ani
- @FinnNk: Přesně!
- Pokud někdo chce přidat další výrok, může si sám uvést závorky. Každý programátor, který stojí za jeho sůl, by na to měl mít opravdu přijít.
- Chtěl jsem říci, že jeho třetí metoda je špatná.
- @Robert Harvey, I ' Viděli jsme velmi zkušené programátory, kteří při úpravách stávajícího kódu chyběli přidávání závorek. Myslím, že problém je v tom, že odsazení je mnohem silnějším vodítkem k významu než složené závorky (zejména proto, že existuje více stylů složených závorek), takže ' je celkem snadné přehlédnout chybějící složenou závorku odsazení vypadá jako to, co očekáváte.
Napsat komentář