webForumDet fria alternativet

Hakparanteser för en enkel if-sats?

.NET

19 svar · 1 009 visningar · startad av Lukaspojken

Medlem sedan maj 20011 312 inlägg
Frågan#1

Vad tycker ni generallt om hakparanteser runt en-rads-if-satser och loop:ar?

Variant utan hakparanteser:

if (x)
   y = 1;

Sedan har vi varianten med hakparanteser:

if (x)
{
   y = 1;
}
Medlem sedan juli 20003 825 inlägg
#2

Om det funkar att använda mindre tecken är det ingen nackdel. Bara varken koden eller dokumentationen blir lidande.

Man får inte förkorta och förminska till vilket pris som helst!

Jag är inte så duktig på just dot net, men av ditt exempel ovan hade jag skippat måsvingarna.

hakparanteser = [ ]

Ursäkta mig, jag hade skrivit det på en rad... Men din kod är kanske mer komplett än detta exempel ovan!?

Medlem sedan juni 20008 205 inlägg
#3

Lukaspojken skrev:

Vad tycker ni generallt om hakparanteser runt en-rads-if-satser och loop:ar?

Undviker helst måsvingarna när de inte behövs. Argumentet som brukar framföras för att aldrig utelämna dem är att man inte riskerar "dangling elses":

if (x)
    if (y) Foo();
else Bar();

Den här koden ger intrycket av att betyda samma som det här:

if (x) {
    if (y) Foo();
} else Bar();

... men är förstås egentligen densamma som:

if (x) {
    if (y) Foo();
    else Bar();
}

Personligen tycker jag det är ett dåligt argument, eftersom vettiga editorer sköter indenteringen åt oss. Jag får mer nytta av att se mer kod på en skärmbild.

Medlem sedan dec. 19996 721 inlägg
#4

Jag föredrar att använda måsvingar i alla lägen. Tycker att koden blir lite tydligare, och det blir smidigare att lägga in fler metoder i efterhand.

Medlem sedan dec. 2004736 inlägg
#5

Kan jag skippar jag måsvingarna.

Medlem sedan apr. 20007 588 inlägg
#6

emission skrev:

Jag föredrar att använda måsvingar i alla lägen. Tycker att koden blir lite tydligare, och det blir smidigare att lägga in fler metoder i efterhand.

Samma här, som jag ser det så finns det ingen som helst anledning att skita i måsvingarna, vad är det man vill spara på - tecken, kodlängd? Jag tycker att det är god programmeringssed att alltid ha med dom.

Risken att det blir fel när man gör ett tillägg i koden minskas om man konsekvent blockar in sina vilkor med måsvingar.

Medlem sedan feb. 20002 300 inlägg
#7

Samma som emission och sgtpepper. Kod utan måsvingar kan ibland bli väldigt "kompakt". Jag föredrar att ha en hel del whitespace i min kod för att göra det lättare att läsa och måsvingarna hjälper till med det.

Medlem sedan aug. 20003 575 inlägg
#8

emission skrev:

Jag föredrar att använda måsvingar i alla lägen. Tycker att koden blir lite tydligare, och det blir smidigare att lägga in fler metoder i efterhand.

Samma här fördelarna överväger nackdelarna, det blir konsekvent också när man alltid har måsvingar. :)

Medlem sedan feb. 20041 816 inlägg
#9

Nickemannen skrev:

Samma här fördelarna överväger nackdelarna, det blir konsekvent också när man alltid har måsvingar. :)

Samma här! Eller ja, jag försöker hålla mig till att koda så men ibland är jag skyldig till att frångå denna princip men det är sällan och i ganska specifika fall. Har man ett gäng if-satser utan else (t.ex. när man fyller objekt och dess egenskaper från en reader) blir det kanske lite väl köttigt med alla måsvingar.

Medlem sedan juni 20006 031 inlägg
#10

Såna små ifsatser kortar jag ner

y = (x) ? 1 : y;
Medlem sedan juli 20011 304 inlägg
#11

Jag föredrar att använda måsvingar i alla lägen. Tycker att koden blir lite tydligare,

Samma här.

Är det små if-satser gillar jag också result = i > 0 ? i : 666;

Medlem sedan jan. 20022 440 inlägg
#12

Jag kör stenhårt på måsvingarna. Erfarenhet säger mig att jag rätt ofta får pilla dit dom lik förbaskat när det är dags för refactoring!

Anser inte att måsvingarna i if satser är rätt ställe att minimera raderna med kod.

Medlem sedan aug. 20003 575 inlägg
#13

CatZ skrev:

Jag kör stenhårt på måsvingarna. Erfarenhet säger mig att jag rätt ofta får pilla dit dom lik förbaskat när det är dags för refactoring!

Anser inte att måsvingarna i if satser är rätt ställe att minimera raderna med kod.

För mig är inte } en kodrad alls håller man metoderna så små som man egentligen borde så bör det inte vara några problem med att få plats med metoden på skärmen när man har en if-sats med måsvingar :)

Medlem sedan maj 20011 312 inlägg
#14

Jag gillar också måsvingarna och har kört med det. Men jag har den senaste tiden kommit i kontakt med fler if-satser och loopar utan måsvingar. Så jag har börjat ifrågasätta mitt sätt att koda just dessa bitar men jag håller med om att de bör finnas även om det innebär några extra rader kod.

Det ska givetvis vara måsvingar och inte hakparanteser... :)

Medlem sedan apr. 20007 588 inlägg
#15

Lukaspojken skrev:

de bör finnas även om det innebär några extra rader kod.

Sätter man startparantesen på samma rad som statementet så blir det bara en extra rad. Det har man råd med:

if (foo > 1) {
  bar();
}

kontra

if (foo > 1)
  bar();
Medlem sedan feb. 20011 198 inlägg
#16

sgtpepper skrev:

Sätter man startparantesen på samma rad som statementet så blir det bara en extra rad. Det har man råd med:

if (foo > 1) {
  bar();
}

kontra

if (foo > 1)
  bar();

Det behöver inte bli en rad till:

if (foo > 1) {
  bar();}

eller

if (foo > 1) {bar();}
Medlem sedan maj 20011 312 inlägg
#17

Jag gillar inte den varianten där man flyttar måsvingen till första raden. Jag tycker det påverkar läsbarheten negativt. Att ha allt på en rad tycker jag heller inte om.

Denna variant tycker jag är svårare att läsa

if (x) {
   y = 1;
   ...
   ...
}

Än denna:

if (x) 
{
   y = 1;
   ...
   ...
}

Min blick letar efter första måsvingen och det känns svårare att finna den i första varianten.

Medlem sedan feb. 2005280 inlägg
#18

Japp, snyggast är

if (x) 
{
   y = 1;
   ...
   ...
}
Medlem sedan maj 20011 312 inlägg
#19

Här kommer en if-sats som jag tycker var riktigt jobbig att titta på :)

GridView gv = (GridMode == GridType.Current) ? GridViewData : GridViewDataArchived;

Detta är en annan. Lite lättare men den tilltalar inte mitt öga...

LinkButtonSelectAll.Enabled = (gv.Rows.Count > 0) ? true : false;

När jag läser kod så vill jag snabbt få en förståelse för vad utvecklarens metod har för avsikt att göra. När jag stötte på ovanstående kodrader så var jag tvungen att stanna till och fundera ett tag. När man blir tvungen att stanna upp så här så stör det ens förmåga att snabbt förstå metoden. Vad tycker ni?

Medlem sedan juni 20008 205 inlägg
#20

Lukaspojken skrev:

Här kommer en if-sats som jag tycker var riktigt jobbig att titta på :)
Detta är en annan. Lite lättare men den tilltalar inte mitt öga...

LinkButtonSelectAll.Enabled = (gv.Rows.Count > 0) ? true : false;

Inte mitt öga heller, eftersom den är redundant:

LinkButtonSelectAll.Enabled = (gv.Rows.Count > 0);

Vad gäller första måsvingen, om den ska vara placerad på en egen rad eller tillsammans med "huvudet" (typ iffen) tycks, tillsammans med frågan om huruvida publika metoder och fält ska börja med gemener eller versaler, tycks vara den frågan där Java- och Microsoftvärlden har absolut svårast att komma överens. Själv tar jag seden dit jag kommer, men föredrar Javavarianten (dvs, måsvingen behöver ingen egen rad).

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)