Pitäisikö kiharoiden olkainten näkyä omalla linjallaan? [suljettu]
On helmikuu 14, 2021 by adminKommentit
- Löydän " == true " häiritsevämpi kuin aaltosijoittimen valinta.
- @Dan: Mielestäni ehdollisen lausekkeen aina selittäminen auttaa suuresti selkeyttä.
- Ainoa syy tähän asia olisi, jos IDE / editori ei tue ' ei tue hakasulkujen tunnistamista.
- @ leeand00: jotkut meistä tulosta edelleen monimutkainen / tuntematon koodi tutkimaan / merkitsemään sitä. Hyvä kaunis tulostin lievittää kuitenkin suurinta osaa ongelmista.
- valitettavasti kysymys on suljettu. Jonkin ajan kuluttua sisennykseen perustuvasta syntaksin käytöstä vaihdoin toiseen (ehkä outoon) toiseen aaltosulkurakenteeseen. Kuten ensimmäinen, mutta sulkeutuva ahdin lohkon viimeisellä rivillä. (koodirivin jälkeen)
vastaus
Ollessani opiskelijana tapasin laittaa kiharat olkaimet samaan niin, että riviä on vähemmän, ja koodi tulostuu vähemmän sivuille. Yhden rivin ainoana painettuna hakasulkeessa olevan merkin tarkastelu on ärsyttävää. (ympäristö, paperihukka)
Mutta suurten sovellusten koodauksessa joidenkin viivojen salliminen vain aaltosulkeilla on edullista, ottaen huomioon sen antaman ”ryhmittelytunnelman”.
Valitun tyylin , ole johdonmukainen , jotta siitä ei tule omien aivojesi yleiskustannuksia käsitellessäsi useita tyylejä ryhmässä liittyvät koodinpätkät . Eri tilanteissa (kuten yllä) sanoisin, että on hyvä käyttää eri tyylejä, on helpompaa ”vaihtaa kontekstia” korkealla tasolla.
Kommentit
- Toisaalta uuden linjan ahdin on ANSI-VAKIO, K & R ei. Mutta standardien kauneus on, että on niin paljon erilaisia (katso myös uncyclopedia.wikia.com/wiki/AAAAAAAAA ! uncyclopediassa).
- " rivejä on vähemmän " Minulla on teratavua tilaa ja paljon pikseleitä. Miksi minun pitäisi huolehtia useamman rivin käytöstä?
- @ 12431234123412341234123: I Luulen, että hän tarkoittaa, koska jotkut ihmiset tulostavat koodin koodin tarkistusta varten. Ja jokainen ei välttämättä välttämätön uusi rivi menee hukkaan tai km ² metsää hukkaan mittakaavassa. Jos kuitenkin älä ' t tulosta sitä (en todellakaan don ' t), niin ANSI on paljon parempi kuin K & R. Kaikkien, jotka aikovat tulostaa, tulisi todennäköisesti käyttää automaattista koodin muotoilijaa – joten tämän pitäisi olla kysymys työkaluista, ei koodaustyylistä.
- Olen samaa mieltä siitä, että sinun tulisi pysyä johdonmukaisina, I ' olen käyttänyt kiharaisia aaltosulkeita uusilla viivoilla jo vuosia, mutta minun on sekoitettava koodissani toisella tavalla, kuten soitettaessa funktioita, nimettömiä toimintoja, objektilateraaleja jne. Kaikki lausekkeeseen perustuvat kielet / tuntematon koodi helpottaa saman rivin sulkeita
vastaus
Älä koskaan tee 3. menetelmää.
Aaltosulkeilla säästäminen voi säästää muutaman näppäimen painalluksen ensimmäisellä kerralla, mutta seuraava tuleva kooderi yhdessä lisää jotain muuta lausekettasi huomaamatta, että lohkosta puuttuu aaltosulje, tulee olemaan paljon kipua.
Kirjoita koodi muille.
Kommentit
- Toivon, että tiesin, mistä tuo pieni viisaus syntyi. Koska koodisi kirjoittaminen ihmisille, jotka voittivat ' ei vaivaudu lukemaan sitä, on suunnilleen yhtä turhaa kuin mahdollista …
- Toinen ohjelmoija voi lisätä omansa olkaimet, kun hän lisää jotain. Hän ' ei ole tyhmä, ja koodauskäytännössä, joka kannustaa jättämään aaltosulkeet pois tällaisista yksinkertaisista tavaroista, hän ' tietää.
- Valinnaiset olkaimet eivät ole valinnaisia. Muutamia huonompia suunnittelupäätöksiä, jotka tehtiin C: ssä ja siirrettiin sen jälkeläisille. Se, että se elää vielä viimeisimmällä kielellä kuin C #, saa minut raivostumaan.
- Sillä ' ei ole väliä kuinka fiksu olet tai kuinka syvään juurtunut koodausstandardi yhden rivin pois jätettyjen kiharoiden ympärille on: jos ' Kun etsit ratkaista ongelmaa tai virhettä, et todennäköisesti huomaa, että kiharat on jätetty pois. Ja onko 2 sekunnin työssä yhteensä niin paha olla eksplisiittinen?
- Siellä ' on yksi etu tyylillä # 3, että sinä ' kaikki puuttuvat: Näyttöön tulee enemmän koodia kerralla.
Vastaa
Kauan väitin, että heillä oli samanarvoinen arvo, tai niin hyvin lähellä yhtä suurta arvoa että mahdollinen hyöty tekemällä oikea valinta oli paljon, kaukana siitä, että siitä riitautettiin.
johdonmukaisuus on kuitenkin tärkeää . Joten sanoin, että käännetään kolikko ja aloitetaan koodin kirjoittaminen.
Olen nähnyt ohjelmoijien vastustavan tällaista muutosta aiemmin. Päästä yli! Olen vaihtanut monta kertaa urani aikana. Käytän jopa erilaisia tyylejä C #: ssäni kuin PowerShellissä.
Muutama vuosi sitten työskentelin tiimissä (~ 20 kehittäjää), joka päätti pyytää Syötä ja tee sitten päätös ja pakota se koko koodipohjaan. Meillä olisi yksi viikko aikaa päättää.
Paljon huokailua & silmä -rullaaminen. Paljon ”Pidän tavastani, koska se on parempi”, mutta ei sisältöä.
Kun tutkimme kysymyksen hienompia kohtia, joku kysyi, miten käsitellä tätä ongelmaa brace-on-the -saman rivin tyyli:
void MyFunction( int parameterOne, int parameterTwo) { int localOne, int localTwo }
Huomaa, että parametriluettelon loppu ei ole heti ilmeinen ja runko alkaa. Vertaa:
void MyFunction( int parameterOne, int parameterTwo) { int localOne, int localTwo }
Luimme jonkin verran tietoa siitä, kuinka ihmiset ympäri maailmaa olivat käsitelleet tätä ongelmaa, ja löysimme mallin tyhjän rivin lisäämisestä avoimen jälkeen aaltosulje:
void MyFunction( int parameterOne, int parameterTwo) { int localOne, int localTwo }
Jos aiot tehdä visuaalisen tauon, voit tehdä sen myös aaltosulkeella. Sitten myös visuaaliset katkokset muuttuvat yhtenäisiksi .
Muokkaa : Kaksi vaihtoehtoa ”ylimääräiselle tyhjälle riville” -ratkaisulle käytettäessä K & R:
1 / Sisennä funktion argumentit eri tavalla kuin funktion runko
2 / Laita ensimmäinen argumentti samalle riville funktion nimen kanssa ja kohdista uusien argumenttien uudet argumentit tähän ensimmäiseen argumenttiin.
Esimerkkejä:
1 /
void MyFunction( int parameterOne, int parameterTwo) { int localOne, int localTwo }
2 /
void MyFunction(int parameterOne, int parameterTwo) { int localOne, int localTwo }
/ Muokkaa
Väitän edelleen, että johdonmukaisuus on tärkeämpää kuin muut näkökohdat, mutta jos meillä ei ole loi ennakkotapauksen , ja sitten asteikko seuraavalla rivillä on oikea tapa edetä.
Kommentit
- FYI, kuulostan järkevältä ihmiseltä, mutta olen ' olen itse asiassa mutteri. Yksinkertaisissa yksirivisissä lohkoissa en käytä aaltosulkeita eikä uusia viivoja, joten ' if (foo) bar () ' kaikki yksi linja. Pyrin tekemään koodistani riittävän yksinkertaisen, jotta se ' ei ole ongelma.
- Tuli tänne lähettämään juuri tämä. Tonnia ihmisiä, jotka pitävät avaavan kannattimen samalla rivillä, seuraavat sitä tyhjällä viivalla (varsinkin luokkien ja menetelmien alussa), koska muuten se ' s on vaikea erottaa luokan / menetelmän otsikkoa rungosta. No, jos ' aiot käyttää joka tapauksessa ylimääräistä riviä, voit myös laittaa tuen sinne ja saada lisäetuna sisennyksen helpompi nähdä.
- I ' en ole nähnyt tyhjää riviä – olen ' m perehtynyt paremmin MyFunction () -parametrien kaksois luetelmakohtaan, kun ne harhautuvat toiselle riville.
- Parametrien jakaminen usealle tällaiselle riville on hullua.
- Funktion " parametri " argumentti on punainen silli. Selvästi perustelujen tulisi olla kaksinkertaisia. Ei ole mitään ongelmaa erottaa se seuraavasta koodista.
Vastaa
Pääesialliset säännöt ovat:
- Noudata projektin olemassa olevaa koodausstandardia.
- Jos koodausstandardia ei ole ja muokkaat jonkun muun omistamaa olemassa olevaa koodipohjaa, ole johdonmukainen olemassa oleva koodi riippumatta siitä, kuinka paljon pidät siitä / pidät siitä.
- Jos työskentelet vihreän kentän projektissa – keskustele muiden ryhmän jäsenten kanssa ja pääse yksimielisyyteen muodollisesta tai epävirallisesta koodausstandardista.
- Jos työskentelet vihreän kentän projektissa ainoana kehittäjänä, tee oma mielipiteesi ja ole sitten armoton johdonmukainen .
Vaikka sinulla ei olisi ulkoisia rajoituksia, on (IMO) parasta etsiä olemassa oleva (laajasti käytetty) koodausstandardi tai tyyliohje ja yrittää noudattaa sitä. Jos heität omaa tyyliäsi, on hyvät mahdollisuudet katua sitä muutaman vuoden kuluttua.
Lopuksi, tyyli, joka on toteutettavissa / toteutettavissa käyttämällä olemassa olevia tyylin tarkistimia ja koodin muotoilijoita, on parempi kuin sellainen, joka on ”pakotettava” manuaalisesti.
Kommentit
- Tämä vastaus ansaitsee enemmän ääniä.
- johdonmukaisuus on avain
vastaus
Ensimmäisen menetelmän etuna on, että se on vertikaalisesti kompakti , joten voit sijoittaa enemmän koodia ruudullesi, ja siksi pidän siitä parempana. Ainoa argumentti, jonka kuulin toisen menetelmän puolesta, on se, että se helpottaa avaus- ja sulkumerkkien pariliitosta, mutta useimmilla IDE: llä on pikanäppäin tälle, ja se on oikeastaan väärä lausunto – sen sijaan, että pariliität avaavan sulun sulkeutuvaan hakasulkeeseen, voit yhdistää sulkuhakemiston lausekkeen ”lohkon alku” lausekkeeseen (jos, muu, varten, kun taas). sisennystaso, joten se on yhtä helppo määrittää missä lohkon alku on.
En näe mitään syytä tuhlata koko riviä vain hakasulkeeksi, kun edellinen for / while / if -rakenne osoittaa jo visuaalisesti lohkon alkua.
Siitä huolimatta uskon, että sulkuhaarukan tulisi olla omalla rivillään, koska tarvitsemme jotain osoittamaan lohkon lopun ja sen sisennysrakenteen näkyvällä tavalla.
Kommentit
- Ei … minä ' sanon, miksi vähentää koodia, joka voi sopia ruudulle tekemällä jotain, joka ei ' t lisää koodiin ' s selkeyttä?
- Kun minä aloin koodata Pidin jokaisesta aaltosuljimesta omalla rivillään, nyt pidän parempana ensimmäisestä menetelmästä.
- On olemassa valtava tutkimusjoukko, joka ulottuu aina varhaiseen höyryaikaan (Weinberg, " Tietokoneohjelmoinnin psykologia "), joka osoittaa, että ohjelmoijan ymmärtäminen putoaa DRAMAATTISESTI, kun katsottavan koodin määrä on enemmän kuin voidaan nähdä osoitteessa yksi kerta (eli yksi seulakuva, yksi tulostinsivu). Tämä ilmiö väittää vahvasti, että pystysuoraa tilaa pidetään arvokkaana resurssina, eikä sitä pidä hukata ilmaiseksi, ja siksi ensimmäinen menetelmä on suositeltava.
- LOL @ " KOKO rivi ". OMG! Ei se!! = P
- @Julio Korkeakoulussa suosin vahvasti menetelmää 1, enkä voinut ' sietää lukemasta menetelmää 2. Menneeni töihin yritykseen, joka käyttää C #: ta , jossa standardi on menetelmä 2, olen tykännyt siitä yhtä hyvin '. Voin nyt lukea tai käyttää kumpaakin; kumpikaan ei häiritse minua. Ihmiset, joilla on voimakas vastahakoinen reaktio toisiinsa, reagoivat yleensä liiaksi johonkin, jota he eivät tunne.
Vastaa
Mieluummin
if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); }
yli
if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); }
koska rivi you.postAnswer();
on paljon helpompi lukea ja löytää ensi silmäyksellä. Toisella tavalla se sekoittuu sen yläpuolella olevaan viivaan (you.hasAnswer()
), jolloin silmäni täytyy keskittyä enemmän lukemaan sitä.
Kommentit
- Tämä on totta, kunnes ohjelma ylittää näytön korkeuden. 😉
- @ weberc2 Luulen, että kun ohjelmasi ylittää ruudun korkeuden, kaksi riviä vähemmän voittaa ' ei muutu paljon.
- 10 vuotta sitten, olisin sopinut näytön tilasta. Tänään käytän 1920 * 1200 -näyttöä. Se mahtuu paljon koodia, enemmän kuin aivoni pystyvät käsittelemään kerralla. Ensimmäisen menetelmän avulla voin vetää taaksepäin ja nähdä eri laajuuden avaamisen / sulkemisen tarvitsematta lukea sitä.
- En koskaan voinut ymmärtää, miksi suosin tätä menetelmää, mutta se ' s täsmälleen tälle.
- @Mageek Tämä on myöhässä, mutta se ' ei ole 2 riviä, se ' s 2 riviä jokaiselle alueelle. Että ' s O (N), ei O (1). En todellakaan tunne sitä vahvasti siitä; ' ' on tärkeämpää, että valitset tyylin, joka tekee pitkistä parametriluetteloista luettavissa.
Vastaa
Pidän parempana ensimmäisestä menetelmästä. Aaltosulkeet eivät ole täysin erillisen rivin arvoisia.
Asia on, että aaltosulkeet eivät ole tärkeitä. Ne ”ovat vain syntaktinen roskakori , mikä on ehdottoman tarpeetonta ymmärtääksesi mitä koodi on, sen tarkoituksesta ja Se on vain kunnianosoitus vanhan tyylin C-tyyppisille kielille, joissa operaattoreiden visuaalinen ryhmittely oli mahdotonta käytettävissä olevan näytön vähäisyyden vuoksi.
On kieliä (Python, Haskell, Ruby), jotka ovat OK ilman lainkaan aaltosulkeita. Tämä vain vahvistaa, että olkaimet ovat roskakoria, eikä niiden pitäisi ansaita viivaa heille aina kun mahdollista:
if (you.hasAnswer()){ you.postAnswer(); }else{ you.doSomething(); }
kommentit
- En tiedä ' en Haskellista tai Rubystä, mutta Python on välilyöntiherkkä, minkä vuoksi sitä ei vaadita ' olkaimet tai muut erottimet lohkojen merkitsemiseksi. Aaltosulkeet eivät ole vain syntaktinen melu; niillä on todellinen tarkoitus.
- @Robert, C: ssä sinun on tehtävä sekä välilyöntejä että aaltosulkeita. Pythonissa sinun tulee tehdä vain välilyönti. Mikä on parempi?
- @Pavel, kohdassa C ' sinun ei ' tarvitse tehdä välilyöntiä.
- @KenBloom C -ohjelmia ilman tyhjää tilaa on mahdotonta lukea. Joten sinun on tehtävä ne joka tapauksessa.
- Riippumatta siitä, ovatko aaltosulkeet hyvä idea vai ei, pelkkä kieli, joka <
ei käytä niitä, ei ole ' t näyttävät olevan argumentti heidän puolesta tai vastaan. Se vain viittaa siihen, että kieli on mahdollista ilman heitä, ei siitä, että se on hyvä tai huono kielen muotoilu.
Vastaa
Käytä Pythonia ja ohita argumentti kokonaan.
Kommentit
- +1
SyntaxError: not a chance
- Tämä ei yksinkertaisesti ole vaihtoehto valtavalle, suurimmalle osalle projekteja. Lisäksi ryhmittelyn sisennyksellä on ' osuus ongelmista.
- @Bryan, ymmärrän, että tämä ei ole ' t hyvin käytännöllinen. Luulin vain, että se oli näkökulma, jonka oli oltava siellä, vahvempi kuin pelkkä kommentti. Enkä ' ole koskaan törmännyt ongelmiin, jotka aiheutuvat viittauksestasi sisennyksestä, luultavasti siksi, että en sekoita sarkaimia ja välilyöntejä.
- Käytä Go-ohjelmaa ja ohita argumentti kokonaan (plus staattinen kirjoittaminen, nopeus ja kääntäjä!) 🙂
- Paina sitten välilyöntiä liian monta kertaa ja katso kääntäjän / tulkin naurua sinulle. Se ei voitu ' ei tapahdu useimmilla tuetuilla kielillä.
Vastaa
kiharoiden aaltosulkeiden sijainnin tulisi olla
metadata
määritettävissä ohjelmoija IDE: ssä. Siten nämä ärsyttävät aaltosulkeet kaikessa koodissa näyttelijästä riippumatta näyttävät samalta.
Kommentit
- Täysin samaa mieltä. Se ' esitys eikä data.
- Ongelma on, että jos annat jokaiselle asettaa oman, asiat sotkeutuvat hyvin nopeasti, kun sitoumukset tehdään.
- @Andy: Se ' on täsmälleen asia, IDE muuttaa niiden ulkonäköä, mutta vain IDE: ssä! Varsinaista lähdettä ei kosketa. Versiohallintaa varten voit lisätä koukkuja, jotka kääntävät kiharoiden aaltosulkujen asetukset riippumatta yleisestä tilanteesta, jotta kaikki tarkistavat koodin samalla tavalla.
- @klaar Jokainen moderni IDE i ' ve käyttää vaihtamaan välilehdet välilyönteiksi ja siirtämään aaltosulkeet omalle rivilleen tai " avaavan " rivi; En ' ole varma, miksi luulet lähteen olevan ' puuttunut näissä tapauksissa, ja se on syy kommentilleni. IDE: t muuttavat sitä tyypillisesti kehittäjien asetuksista riippuen, mikä tarkoittaa, että sitoumuksen aikana ' näen paljon muutoksia, jotka ovat vain kohinaa, kun henkselit siirtyvät omalle linjalle, piilottaen näin todellisen muutoksen, jonka joku teki.
- @Andy: Ei ' t ole mahdollisuutta käyttää koukkuja, jotka muuttavat nämä välilyönnit ja olkaimet yhtenäiseksi standardiksi. sitoudutko kiertämään kuvailemaasi meluongelmaa? Kummassakin tapauksessa oikean versiojärjestelmän pitäisi ylittää pikkutarkat asiat, kuten välilyönnit tai muut järjettömät asiat.
Vastaa
Pidän parempana ensimmäisestä, koska minun on vaikeampi nähdä virhettä tässä esimerkissä.
if (value > maximum); { dosomething(); }
kuin tässä esimerkissä
if (value > maximum); { dosomething(); }
; {
näyttää minusta vain vääremmältä kuin rivi, joka päättyy ;
joten huomaan sen todennäköisemmin.
Kommentit
- Olet hyvä argumentti, mutta henkilökohtaisesti tämä on ollut vain koskaan tapahtui minulle kerran 5 vuoden ohjelmoinnin aikana. En voinut ' t selvittää, miksi sitä ei suoritettu ', lähetin SO: han ja joku osoitti minulle nopeasti kaksoispisteen. Minusta on kuitenkin aina vaikeampaa lukea sitä, että käytetään yhtä vähemmän riviä.
- "; {" näyttää a eräänlainen silmäniskuva röyhkeä kasvot tai ehkä henkilö, jolla on viikset.
- +1 Erinomainen esimerkki vastauksesta: erittäin hienovarainen virhe, joka jätetään helposti huomiotta. Ajatus herättää myös ulkoasun, joka näyttää tämän.
- Tietenkin mikä tahansa kunnollinen IDE merkitsee tyhjän ohjauslausekkeen ja mikä tahansa kunnollinen kääntäjä antaa varoituksen.
- @Dunk Ainoa virhe väite (jonka kanssa olen voimakkaasti samaa mieltä) on, että niin monet ihmiset käyttävät tulkittuja kieliä nykyään (JavaScript, PHP ym.), että monet " ohjelmoijista " ei ' ei tiedä kääntäjää kaksoisviivasta.
Vastaa
Se riippuu.
Jos koodaan Javascriptilla tai jQueryllä, käytän ensimmäistä muotoa:
jQuery(function($) { if ($ instanceOf jQuery) { alert("$ is the jQuery object!"); } });
Mutta jos koodaan C #: ssa, käytän toista muotoa, koska se on kanoninen tapa tehdä se C #: ssä.
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; }
Huomaa, että esimerkkisi voidaan kirjoittaa
if (you.hasAnswer()) you.postAnswer(); else you.doSomething();
C #: ssä.
Kommentit
- Se voidaan kirjoittaa monilla sellaisilla kielillä, koska lohko-lause on lausunto. Lisätään! 🙂
- " -suunnittelusääntöjen " mukaisesti " kanoninen tapa " on sijoittaa avaava ahdin samalle viivalle (ts. ensimmäinen muoto). Sano vain ' …
- @Uwe: Ehkä. Mutta Microsoft hyväksyi " -kohdistetut olkaimet " -lähestymistavan kaikkiin MSDN C # -esimerkkeihinsä, ja se ' s leivottiin Visual Studioksi, joten …
- @Uwe: Tuo ' s Cwalina ' kirjan ja se ' nimetään kauhistuttavasti, koska se on paljon enemmän. MSDN: n FDG: llä ei ole mitään sanottavaa siitä. Lisäksi ihmettelen, miksi Framework Design -ohjeissa sanottaisiin jotain C # koodauksesta ?
- Itse asiassa sinun pitäisi laittaa kiharat olkaimet samalle riville Javascriptissa. Voit aiheuttaa virheitä, jos kiharat olkaimet ovat omalla linjallaan. Katso esimerkiksi encosia.com/…
Vastaa
Pidän parempana pienestä variantista 1)
if (you.hasAnswer()) { you.postAnswer(); } // note the break here else { you.doSomething(); }
Miksi?
-
Mielestäni aina aaltosulkeiden asettaminen omalle linjalle heikentää luettavuutta. Voin sijoittaa vain tietyn määrän lähdekoodia ruudulle. Sulujen tyyli 2) tekee heave-algoritmeja, joissa on paljon sisäkkäisiä silmukoita ja ehdollisia, tuskallisen pitkiä.
-
Haluan kuitenkin, että
else
alkaa uudella rivillä, koskaif
jaelse
kuuluvat yhteen visuaalisesti. Joselse
: n edessä on sauma, on paljon vaikeampaa havaita mihin kuuluu. -
3 ) hylkää itsensä. Me kaikki tiedämme, mitä huonoja asioita voi tapahtua, jos jätät suluet unohdettua.
Kommentit
- Olen nähnyt tämän työpaikallani. Se ' on mielenkiintoinen.
- Pidän myös tästä tyylistä paremmin, koska sen avulla voin laittaa kommentin
else
rivi tarvittaessa ja / tai laita tyhjä rivi if-lohkon ja else-lohkon väliin, jotta asiat näyttävät vähemmän täynnä. Sulkutyyli # 2 ei tee muuta kuin erottaa toiminnot olosuhteista. Tämän sanottuani suosikkini on ehdottomasti python ' ei hakasulkujen tyyliä 🙂 - Jos näytöllä näkyvän koodirivien määrän maksimointi on tärkeää, vain lopeta uudella rivillä. ' Pystyt saamaan paljon rivejä yhdelle näytölle. Mieluummin minulla ei ole mitään syytä minua keskeyttämään ja ajattelemaan lukemisen aikana, ts. minun määritelmäni luettavammaksi. Ahdin mielessäni jättää ne huomiotta. Ilman kiinnikkeitä mieleni on keskeytettävä ja kohdistettava ohjauslohkot. Ei pitkä tauko, mutta tauko.
- Kyllä, jos ja muut kuuluvat yhteen, MUTTA niin {ja} ja koska} on erillisellä rivillä, {pitäisi olla erillinen myös linja. " Voin sijoittaa vain tietyn määrän lähdekoodia ruudulle " Ja että ' s tarkalleen miksi 3) sanominen olisi " itsensä hylkääminen ", ei ole lainkaan vaihtoehto. Vuosikymmenen ajan työskennellessäni 3) En ole koskaan unohtanut sulkeiden lisäämistä uuden koodirivin lisäämisen yhteydessä, enkä tunne ketään. Jos minun on mukautettava koodi ihmisille, kuka ' ei pysty lukemaan oikein, mihin se päättyy? Tiettyjen kieliominaisuuksien käyttö lopetetaan, koska jotkut koodinlukijat eivät ehkä ymmärrä niitä?
vastaus
Luin jostain, että joidenkin kirjojen kirjoittajat halusivat koodinsa olevan näin muotoiltu:
if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); }
Mutta julkaisijan tilaa koskevat rajoitukset tarkoittivat, että heidän oli käytettävä tätä:
if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); }
En tiedä onko tämä totta (koska en löydä sitä enää), mutta jälkimmäinen tyyli on hyvin yleistä kirjoissa.
Henkilökohtaisella tasolla pidän parempana suluista erillinen rivi:
a) ne osoittavat uuden laajuuden
b) se on helpompi havaita, kun sinulla on ristiriita (vaikka tämä ei olekaan ongelma virheellisessä IDE: ssä
Kommentit
- … Toinen vaihtoehto helpottaa myös molempia pisteitäsi (pelkkä sisennys palvelee aaltosulun tarkoitusta / sisennyskombo). 🙂
Vastaa
Ah, Yksi todellinen aaltosulkeutumistyyli .
Siinä kaikki on pyhä W ay – jopa profeetta (Richard ”my way or highway” Stallman).
Kaveri oli niin väärässä niin monissa asioissa, mutta GNU on paikalla, kun on kyse aaltosulkeista.
[Päivitä] Olen nähnyt valon ja palvon nyt Allmania
Kommentteja
- En ' näe GNU-tyylin muuta kuin lisp-koodia. Näyttää siltä, että paljon työtä on vähän hyötyä.
- En tiedä ketään, joka käyttäisi GNU-tyyliä. 1TBS koko matkan.
- Et voi ' tehdä mitään pahempaa kuin kaksi sisennystasoa lohkoa kohden, lukuun ottamatta lisp-tyyliä, joka on tietysti itsestään selvää.
- +1 aaltosulityylien linkille. Se osoittaa, että tyylistäsi riippumatta monet suuret ihmiset ovat eri mieltä kanssasi.
- @RobertHarvey Ylimääräistä työtä ei ole, jos se on, et ' käytä oikea työkalu koodin kirjoittamiseen tai määrittämiseen oikein. Etu on paljon luettavampi koodi, näet kaikki suluissa olevat virheet erittäin nopeasti ja voit helposti lukea vain koodin, kun sivuutat alilohkot.
Vastaa
Toinen esimerkki, olen luettavuudeltaan erittäin suuri. En voi sietää katsomalla, jos estä muulla tavalla = (
kommentit
- Tutkimus osoittaa, että ' on helpompaa lukea pienikokoinen koodi, kun koodipohja ylittää näytön korkeuden.
- @ weberc2 , voisitteko antaa DOI: t näille tutkimuspapereille?
Vastaus
Yksinkertainen vastaus: mitä on helpompi korjata?
// 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
Missä tapauksessa diagnosoit ongelman ensin?
En välitä paljoakaan henkilökohtaisista mieltymyksistä (on monia muita tyylejä, mukaan lukien valkoseppä ja muut), enkä välitä paljoakaan … kunhan se ei haittaa kykyäni lukea koodia ja virheenkorjaus se.
A s ”jätetila” -argumenttiin, en osta sitä: Minulla on tapana lisätä tyhjiä rivejä loogisten ryhmien väliin, jotta ohjelma olisi selkeämpi …
Kommentit
- Ne ovat molemmat yhtä helppoja virheenkorjauksia lähinnä siksi, että se ' on lyhyt koodilohko. Sisennys on johdonmukainen, joten todellisten koodilohkojen visualisointi on helppoa.
- @Htbaa: todellakin 🙂 Joten miksi vaivautua?
- @MatthieuM. Ensimmäinen lohko on mielestäni järkevämpi, koska funktion allekirjoituksen, for-lauseen ja if-lauseen väliset uudet viivat (toisessa lohkossa) uskovat, että ne eivät liity toisiinsa, mutta selvästi ne eivät ole ' t. Tyhjien rivien on erotettava toisistaan riippumattomat koodibitit; koodi, joka ' on lähellä muita koodirivejä, tarkoittaa, että ne ovat itse asiassa yhteydessä toisiinsa. Tämä on tietysti kaikki ' imo ', mutta ihmettelin, mitä mieltä olette. MUOKKAA: myös mikä tahansa oikea IDE huomaa kaikki ahdin puuttuvat ja antaa sinulle katkera virheitä tulkittaessa koodia.
- Haluan huomauttaa, että nämä kaksi koodiosaa ovat täysin erilaisia. Sinulla olisi kääntäjävirheitä koodin eri kohdissa. Ensimmäisessä olisi kääntäjävirhe kohdassa " else " ja viimeisessä kiharassa. Toisessa olisi vain kääntäjävirhe viimeisessä kiharassa.
Vastaa
Ei kukaan huomaa, mutta siksi aaltosulkeet kuuluvat samalle riville kuin ehdollinen (lukuun ottamatta hyvin pitkiä ehdollisia, mutta se on reuna tapaus):
C: ssä tämä on kelvollinen rakenne:
while(true); { char c; getchar(); //Wait for input }
Nopea! Mitä tämä koodi tekee? Jos vastasit ” ääretön silmukka kysyy syötettä ”, olet väärässä! Se ei edes pääse syötteeseen. Se tarttuu osoitteeseen while(true)
. Huomaa, että puolipiste on lopussa.Tämä malli on itse asiassa yleisempi, että näyttää siltä kuin sen pitäisi olla; C vaatii sinua ilmoittamaan muuttujat lohkon alussa, minkä vuoksi uusi aloitettiin.
Koodirivi on ajatus. Aaltosulkeet ovat osa ajatusta, joka sisältää ehdollisen tai silmukan. Siksi ne kuuluvat samalle riville.
kommentit
- Tämä on ylivoimaisesti paras argumentti K & R -tyylille, jonka olen nähnyt, muut ovat naurettavia tänään ' s IDE-järjestelmät koodin taittotukella. Tämä koskee vain C-tyylisiä kieliä, jotka tukevat
;
-lohkoja. Siksi halveksin tätä lohkopäätelmää, joka IMHO on vanhentunut ja Go-kieli todistaa sen. Olen nähnyt tämän ongelman monta kertaa, vaikkakaan tässä skenaariossa. Se tapahtuu yleensä siellä, missä he aikovat lisätä jotain lauseeseen ja unohtaa.
Vastaa
Pidän ensimmäinen menetelmä. Se näyttää olevan siistimpi IMO, ja se on pienempi, mistä pidän.
MUOKKAA: Ah, kolmasosa. Pidän siitä parhaiten aina kun mahdollista, koska se on vielä pienempi / siistimpi.
Vastaa
Voit kirjoittaa sen:
you.hasAnswer() ? you.postAnswer() : you.doSomething();
Vastaanottaja vastaa kysymykseen; Minulla oli tapana pitää parempana kiharaisia aaltosulkeita omalla linjallaan, mutta välttääksesi ajattelemasta virheitä, jotka johtuvat puolipisteiden automaattisesta lisäyksestä selaimissa, aloin käyttää egyptiläistä tyyliä javascriptiin. Ja koodatessani jaavaa pimennyksessä, minulla ei ollut kiinnostusta taistella (tai konfiguroida) oletusmerkkityyliä, joten menin myös Egyptin kanssa siinä tapauksessa. Nyt olen kunnossa molemmilla.
Kommentit
- käytettäväksi näin,
postAnswer()
jadoSomething()
pitäisi palauttaa arvo kolmikertaiselle operaattorille, mikä ei useinkaan ole asia: he voivat hyvin palauttaa tyhjän (ei arvoa). Ja myös (ainakin c #: ssä) tuloksen?:
tulisi määrittää jollekin muuttujalle
Answer
Lähes kaikki vastaukset tässä sanotaan joitain muunnelmia aiheesta ”Mitä ikinä teetkin, pidä kiinni joko yhdestä tai kahdesta”.
Joten ajattelin sitä hetken ja piti myöntää, että en vain näe sitä niin tärkeänä . Voisiko kukaan sanoa minulle rehellisesti, että seuraavaa on vaikea noudattaa?
int foo(int a, Bar b) { int c = 0; while(a != c) { if(b.value[a] == c) { c = CONST_A; } c++; } return c; }
En ole varma kenestäkään muusta … mutta minulla ei ole henkisesti mitään ongelmia Siirtyminen tyylien välillä edestakaisin. Minulla kesti hetken selvittääksesi, mitä koodi teki, mutta se on tulos siitä, että kirjoitin vain satunnaisesti C: n kaltaisen syntaksin. 🙂
Minun ei kovin nöyrän mielestäni avaamissuojat ovat melkein merkityksettömiä koodin luettavuuden kannalta. On olemassa muutamia yllä lueteltuja kulmatapauksia, joissa yhdellä tai toisella tyylillä on merkitystä, mutta suurimmaksi osaksi tyhjien rivien harkittu käyttö puhdistaa sen.
FWIW, työkoodaustyylimme käyttävät hieman jäsennellympi lomake 1 ja muokattu muoto 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
Olen utelias, jos ne, jotka suosivat vahvasti muotoa 2, löytävät tämän version 1 parempi, koska tyhjä rivi antaa vahvemman visuaalisen erottelun.
Kommentit
- Kuten esimerkkisi osoittaa, sisennys on niin tärkeä kuin aaltosulkeet luettavissa Itse asiassa jotkut kielet tekevät sisennyksestä ainoan tavan laittaa lauseita!
- Ok, minusta rehellisesti sanottuna epäyhtenäinen esimerkki on vaikea lukea. Ei TODELLA vaikea, mutta vaikeampi kuin jos se oli johdonmukaista.
- Olen samaa mieltä Almon kanssa. " ei ole kyse, onko se todella vaikeaa " . Kyseessä on ", se on ehdottomasti vaikeampaa ", vaikka ei vaikeaa. Joten miksi vaikeuttaa asioita? " -elokuvan " esimerkeissä ihmisten on tietysti vähän eroa. Kokemukseni mukaan, kun perin ikävän koodin joltakin muulta ja hän käytti menetelmää 1, on melko usein tarpeen mennä eteenpäin ja muuttaa se menetelmäksi 2 vain voidakseen seurata logiikkaa. Koska se on usein tarpeen; se vastaa automaattisesti kysymykseen, mikä menetelmä on parempi ja helpompi ymmärtää.
- @Dunk: En voi ymmärtää koodia, jota parannettaisiin huomattavasti vaihtamalla tällaiset merkityksettömät yksityiskohdat.
- @jkerian – Ilmeisesti et ole ' t perinyt paljon koodia muilta, jotka ovat pitkään poistuneet projektista tai yrityksestä. Voin ' ymmärtää, ettei kukaan, jolla on vuosien kokemus, törmää tähän tilanteeseen. Mutta sitten taas kaikkien ' työtilanne on erilainen. Lisäksi, jos joudut tekemään " muodollisia " koodiarvosteluja, muotoilulla on huomattava ero. Koodin lukeminen luonnollisesti on erittäin tärkeää.Toki voin keskeyttää ja ajatella sovittavan aaltosulkeet, mutta se hidastaa prosessia. Yksi tapa ei vaadi taukoa, toiset vaativat. Että ' s miksi en ' näe, miksi muuta vaihtoehtoa voitaisiin suositella.
Vastaus
Olen yllättynyt, että tätä ei ole vielä nostettu. Pidän parempana toisesta lähestymistavasta, koska sen avulla voit valita lohkon helpommin.
Kun aaltosulkeet alkavat ja päättyvät samassa sarakkeessa ja omalla rivillään, voit valita marginaalista tai kohdistimen avulla sarakkeessa 0. Tämä tarkoittaa yleensä runsaampaa aluetta, jossa hiiri on valittuna tai vähemmän näppäimistön valinnat.
Työskentelin alun perin samoilla linjoilla kuin ehdollinen, mutta vaihdettuani huomasin, että se kiihdytti työskentelyni nopeutta. Se ei tietenkään ole yö ja päivä, mutta se hidastaa sinua hiukan työskentelemällä ehdokkaiden vieressä olevilla aaltosulkeilla.
Kommentit
- Minun kaltaiset vanhat ajastimet käyttävät lohkoa kolmella näppäimen painalluksella riippumatta siitä, missä pirun olkaimet ovat.
Vastaa
Pidän henkilökohtaisesti toisesta tavasta.
Tapa, jolla aion osoittaa, on kuitenkin mielestäni paras, koska se johtaa suurimpaan työturvallisuuteen! Yliopisto-opiskelijakollegani pyysi minulta apua kotitehtävissään ja näin hänen koodinsa näytti. Koko ohjelma näytti yhdeltä lohkolta. Mielenkiintoista on, että 95% hänen tekemänsä ohjelman virheistä tuli väärin sovitetuista aaltosulkeista. Loput 5% olivat ilmeisiä, kun olkaimet sovitettiin yhteen.
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);
Kommentit
- Huono, huono , Tarkoitan kauheaa, kauheaa esimerkkiä. Ongelma ei ole olkaimet! Se ' on hullu sisennys!
- @Martinho Fernandes ajattelin, että henkselien ja sisennysten sijoittaminen menee yhteen …
- ei välttämättä. .. tee oikea sisennys yllä olevaan kohtaan ja vaihda sitten satunnaisesti aaltosulku-tyylit, ' huomaat, että se on ' ymmärrettävää. li>
- Itse asiassa ajatteleminen motivoi omaa vastaustani tähän kysymykseen.
- " 95% hänen tekemänsä ohjelman virheistä tuli yhteensopimattomat olkaimet " – vain tulkituilla kielillä, ei käännetty.
Vastaa
Henkilökohtainen mieltymykseni koskee ensimmäistä menetelmää, luultavasti siksi, että näin opin ensin PHP: n.
Yksirivisillä if
lauseilla Käytän
if (you.hasAnswer()) you.postAnswer();
Jos se ei ole you.postAnswer();
, mutta jotain paljon pidempään, kuten you.postAnswer(this.AnswerId, this.AnswerText, this.AnswerType);
I ”todennäköisesti palaan fi ensimmäinen tyyppi:
if (you.hasAnswer) { you.postAnswer(this.AnswerId, this.AnswerText, this.AnswerType); }
En koskaan käytä rivinvaihtoa enkä koskaan käytä tätä menetelmää, jos siellä on myös else
-lauseke.
if (you.hasAnswer()) you.postAnswer(); else you.doSomething()
on teoreettinen mahdollisuus, mutta ei sellaista, jota en koskaan käyttäisi. Tämä olisi muutettava
if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); }
vastaus
Ei pitäisi; ensimmäinen menetelmä minulle.
Kun tarkastelen toista, käyttämättömien viivojen takia (niillä, joilla on vain olkaimet, lukuun ottamatta viimeistä sulkeutta), tuntuu siltä, että se rikkoo koodi. En voi lukea sitä niin nopeasti, koska minun on kiinnitettävä erityistä huomiota tyhjiin riveihin, jotka yleensä tarkoittavat erottelua koodin tarkoituksessa tai jotain sellaista, mutta missään tapauksessa ”tämä rivi kuuluu kiharaan aaltosulkeeseen” (joka toistaa vain merkityksen) sisennys).
Joka tapauksessa, aivan kuten kirjoitat tekstiä … sisennyksen lisääminen kappaleen alkuun on tarpeetonta, jos sen edessä on tyhjä rivi (kakkosmerkki kappalemuutoksesta), ei tarvitse tuhlata rivejä aaltosulkeisiin, kun sisennämme oikein.
Lisäksi, kuten jo todettiin, se sallii enemmän koodin sijoittamisen ruudulle, mikä muuten on vähän haitallista.
vastaus
Se riippuu alustasta / kielestä / käytänteistä
Java:
void someMethod() { if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); } }
Kohdassa C #
void someMethod() { if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); } }
Kohdassa C:
void someMethod() { if (you_hasAnswer()) { you.postAnswer(); } else { you_doSomething(); } }
Vihaan, kun Java-kaverit käyttävät tyyliään C # -koodissa ja päinvastoin.
Kommentit
- C-tyyli al tavoilla ärsytti minua. Ole johdonmukainen!
Vastaa
Voin vain sanoa, että jos olet menetelmän # 3 fani , sinua vainoavat kaikki maan päällä olevat IDE-koodin muotoilijat.
Vastaa
Käytän ensimmäistä menetelmää yksinkertaisesti siksi, että se on pienikokoisempi ja sallii enemmän koodia näytöllä. Minulla itselläni ei ole koskaan ollut ongelmia aaltosulkeiden yhdistämisessä (kirjoitan ne aina ulos yhdessä if
-lausekkeen kanssa ennen ehdon lisäämistä , ja useimmissa ympäristöissä voit siirtyä vastaavaan aaltosulkuun).
Jos sinun tarvitsi pariliittää aaltosulkeet visuaalisesti, haluan mieluummin toisen menetelmän. Tämä sallii kuitenkin vähemmän koodia kerralla, mikä vaatii sinua vierittämään enemmän. Ja sillä on ainakin minulle suurempi vaikutus koodin lukemiseen kuin siististi kohdistettujen aaltosulkeiden käyttäminen. Vihaan vierittämistä. Toisaalta, jos sinun on selattava yksi if
-lauseke, se on todennäköisesti liian suuri ja tarvitsee korjausta.
Mutta; tärkeintä on johdonmukaisuus. Käytä yhtä tai toista – älä koskaan molempia!
Vastaa
Kun opetin ensimmäisen kerran ohjelmointia 12-vuotiaana, laitoin pidikkeet seuraava rivi, koska Microsoftin koodausoppaat ovat sellaisia. Laskin tuolloin myös 4-välilyönnit.
Muutaman vuoden kuluttua opin Java ja JavaScript, ja näin lisää aaltosulkeita samalla rivillä, joten muutin. Aloin myös sisennystä kahden välilyönnin VÄLILYÖNTIIN.
Kommentit
- +1, -1. Miksi et sisennä välilehtiä, koska mikä tahansa editori voi säätää välilehden pituuden mielivaltaisen pituuden mukaan? Muussa tapauksessa kiroat koodisi monia meistä, jotka pitävät oikeista sisennyksistä 8: ssa.
Vastaa
On neljäs vaihtoehto, joka pitää aaltosulakkeet linjassa, mutta ei tuhlaa tilaa:
if (you.hasAnswer()) { you.postAnswer(); i.readAnswer(); } else { you.doSomething(); }
Ainoa ongelma on, että useimmat IDE: n automaattiset muotoilijat tukehtuvat tästä.
Kommentit
- … samoin kuin useimmat ohjelmoijat, jotka tukehtuvat tästä.
- Se tuntuu kauhealta. Ajattele ylimääräistä vaivaa sinun täytyy käydä läpi, jos haluat lisätä rivin yläosaan tai poistaa ylimmän rivin. Voit ' t vain poistaa rivin ja siirtyä eteenpäin, sinun on muistettava lisätä kihara ahdin.
- lol tämä on mahtavaa! 🙂 parempi kuin ensimmäinen tyyli!
- Ilmeisesti sillä on jopa nimi. Horstman Syyle mainitaan wikipediassa . Olen ' työskennellyt koodipohjan kanssa tämä ' ei todellakaan ole paha käyttö.
Vastaa
Kaikki riippuu sinusta niin kauan kuin et työskentele projektissa, jossa jotkut projektipäällikkö on asettanut koodausrajoitukset tai joitain standardeja, joita kaikkien projektin parissa työskentelevien ohjelmoijien on noudatettava koodauksen aikana.
Haluan henkilökohtaisesti mieluummin ensimmäisen menetelmän.
Enkä myöskään saanut mitä haluat näyttää kolmannella menetelmällä?
Eikö se ole väärin? Tarkastellaan esimerkiksi tilannetta ..
if (you.hasAnswer()) you.postAnswer(); else you.doSomething();
Entä jos joku haluaa lisätä lisää lauseita kohtaan jos estetään?
Siinä tapauksessa, että käytät 3. menetelmää, kääntäjä heittää syntaksivirheen.
if (you.hasAnswer()) you.postAnswer1(); you.postAnswer2(); else you.doSomething();
Kommentit
- Vielä pahempaa olisi, jos joku tulee mukaan ja tekisi: if (you.hasAnswer ()) you.postAnswer (); muuten sinä. tee jotain (); sinä.doSomethingElse (); – se ' on resepti hienovaroista virheistä, jotka silmä voi helposti luistaa, ja kääntäjä ei voita ' myöskään
- @FinnNk: Täsmälleen!
- Jos joku haluaa lisätä toisen lauseen, hän voi laittaa itse aaltosulkeet. Jokaisen suolan arvoisen ohjelmoijan pitäisi pystyä selvittämään se.
- Halusin sanoa, että hänen kolmas menetelmä on väärä.
- @Robert Harvey, I ' Olemme nähneet, että erittäin kokeneet koodaajat kaipaavat aaltosulkeiden lisäämistä muokatessaan olemassa olevaa koodia. Mielestäni ongelmana on, että sisennys on paljon vahvempi vihje merkitykseen kuin aaltosulkeet (varsinkin kun aaltosulityylejä on useita), joten ' on melko helppo unohtaa puuttuva ahdin, jos sisennys näyttää odotetulta.
Vastaa