mboost-dp1
Favorit assignment operator
- Forside
- ⟨
- Forum
- ⟨
- Afstemninger
Hvor mange af de operatorer er nu virkeligt assignment operatorer. Jeg kender kun til sprog der anvender to fra den liste. Der er en gruppe, der anvender "=" og en anden gruppe der anvender ":=". Der er en tendens til, at disse sprog har mange andre syntaktiske egenskaber til fælles. F.eks. er der mange ligheder mellem C og Java syntaks. (Jeg kender også til en assignment operator, der ikke er med på listen, nemlig Beta, der bruger "->" til assignment. Men Beta er syntaktisk så forskelligt fra alle andre sprog, at jeg skal spare jeg for yderligere detaljer).
Selvfølgelig har C også sine operator = konstruktioner. Men det er jo ikke assignments som vi ellers kender dem. Så dem har jeg ikke talt med.
Jeg stemte ":=" fordi den ikke nær så ofte giver anledning til kode fejl som "=" gør. Hvor mange gange er det ikke sket at en udvikler har tastet "=" i stedet for "=="?
Selvfølgelig har C også sine operator = konstruktioner. Men det er jo ikke assignments som vi ellers kender dem. Så dem har jeg ikke talt med.
Jeg stemte ":=" fordi den ikke nær så ofte giver anledning til kode fejl som "=" gør. Hvor mange gange er det ikke sket at en udvikler har tastet "=" i stedet for "=="?
[url=#7]#7[/url] TheThufir
Hmm.. "=!" er ikke en assignment operator i c++ så vidt jeg ved..Nej, faktisk er "=!" ikke en men to operatorer. Det er "=", hvilket betyder assignment. Og "!", hvilket betyder logisk not. Så hvis vi snakker C, så burde "=!" ikke have været med på listen fordi "=" allerede er der, og "!" ikke har noget med tildeling at gøre. Men nu stod der jo ikke noget om at det skulle være C. F.eks. er ":=" heller ikke en C konstruktion, men bruges derimod i flere andre sprog, hvoraf Pascal nok er det mest kendte.
tilgengæld er "!="Nej, det er ikke nogen assignment. Det er en sammenligning.
Hehe, de er vel alle lige gode, alt efter hvad du har brug for :). Men jeg vil da godt kunne udpege en enkelt som jeg _ikke_ bryder mig om, og det er den tertiære operator ( = () ? : ).
Okay, i nogle få tilfælde er den nyttig og fører til en lille smule pænere kode, men generelt bliver det bare grimt og uoverskueligt.
Okay, i nogle få tilfælde er den nyttig og fører til en lille smule pænere kode, men generelt bliver det bare grimt og uoverskueligt.
Min favorit har altid været ternary assignments.
Især nu den kommer med i vb.net 9.0 (sku også på tide)
Især nu den kommer med i vb.net 9.0 (sku også på tide)
xandax:
Så mangler vi bare at VB bliver udryddet og så er der efterhånden balance i universet igen.
Mangen til klamphuggersprog skal man da lede længe efter...
Fatter ikke at virksomheder bruge VB til noget (heller ikke i .NET). Sproget giver jo ikke andet end C-syntakssprog kan, men ser grimmere ud, er mere ustruktureret og indholder en masse unødvendige elementer:
vs
Så mangler vi bare at VB bliver udryddet og så er der efterhånden balance i universet igen.
Mangen til klamphuggersprog skal man da lede længe efter...
Fatter ikke at virksomheder bruge VB til noget (heller ikke i .NET). Sproget giver jo ikke andet end C-syntakssprog kan, men ser grimmere ud, er mere ustruktureret og indholder en masse unødvendige elementer:
if _something then
...
end if
vs
Har dog forstået at bean-counteres er vilde med VB fordi de tror de forstår det...
if (_something) {
...
}
#26
Det er faktisk et rigtigt dårligt eksempel du kommer med.
VB koden er nemlig mere struktureret end C koden, fordi man
kan nemmere se hvad blok slut hører til.
Og:
if (_something) {
...
} /* if */
er noget af et hack.
VB har også WITH statement, som kan hjælpe til at gøre kompleks
kode mere læselig.
Der er såmænd også ting i VB jeg ikke kan lide, men lige netop
disse ting er jo noget som VB har arvet fra Algol familien
(Algol, Pascal, Modula, Oberon, Ada).
Det er faktisk et rigtigt dårligt eksempel du kommer med.
VB koden er nemlig mere struktureret end C koden, fordi man
kan nemmere se hvad blok slut hører til.
Og:
if (_something) {
...
} /* if */
er noget af et hack.
VB har også WITH statement, som kan hjælpe til at gøre kompleks
kode mere læselig.
Der er såmænd også ting i VB jeg ikke kan lide, men lige netop
disse ting er jo noget som VB har arvet fra Algol familien
(Algol, Pascal, Modula, Oberon, Ada).
arne_v:
With er jeg så vild med (til en vis grænse, that is) men { ... } contra [start] [slut] er en vinder for tuborg-klammerne:
I C-sprog skal man kun finde begyndelsen på kontrolstrukturen for at kunne skifte den ud med en anden (fx. en if -> while, det sker relativt ofte for mig under udvikling), i VB skal man finde både start og slut, rette begge steder og håbe at man fandt de rigtige steder (har set kode hvor selv VS2005 ikke kunne gennemskud hvad der afsluttede en if-sætning, og indention var derfor fubar).
With er jeg så vild med (til en vis grænse, that is) men { ... } contra [start] [slut] er en vinder for tuborg-klammerne:
I C-sprog skal man kun finde begyndelsen på kontrolstrukturen for at kunne skifte den ud med en anden (fx. en if -> while, det sker relativt ofte for mig under udvikling), i VB skal man finde både start og slut, rette begge steder og håbe at man fandt de rigtige steder (har set kode hvor selv VS2005 ikke kunne gennemskud hvad der afsluttede en if-sætning, og indention var derfor fubar).
#31
{}'ere er ganske udemærkede.
Så længe de står HELT alene på linien, og ikke bliver smidt i enden på noget andet.
Jeg ved godt mange synes det er åh så smart, men det ødelægger fuldstændigt overskueligheden.
Men det er selvfølgelig smag, og behag. Eller i
if (a==b) {
}
's tilfælde mangel på smag :)
{}'ere er ganske udemærkede.
Så længe de står HELT alene på linien, og ikke bliver smidt i enden på noget andet.
Jeg ved godt mange synes det er åh så smart, men det ødelægger fuldstændigt overskueligheden.
Men det er selvfølgelig smag, og behag. Eller i
if (a==b) {
}
's tilfælde mangel på smag :)
#39
Så vil det udvide din horisont at læse lidt om de forskellige
muligheder og hvor de bliver brugt:
http://en.wikipedia.org/wiki/Indent_style
Så vil det udvide din horisont at læse lidt om de forskellige
muligheder og hvor de bliver brugt:
http://en.wikipedia.org/wiki/Indent_style
Stemte ":="
Har brugt den en mia. gange - dog ikke til programmering, men i Mathematica.
Elsker at definere ting :-)
/EmailFX
Har brugt den en mia. gange - dog ikke til programmering, men i Mathematica.
Elsker at definere ting :-)
/EmailFX
[url=#20]#20[/url] Cyrack
I virkeligheden er operatoren kun ?:
Paranteserne er selvfølgelig praktiske for at gøre udtrykket mere læseligt. Men de er som sådan ikke en del af operatoren (kan ikke huske hvordan precedence er, er paranteserne nogensinde strengt nødvendige med den her operator?)
Jeg plejer nu selv at sætte paranteser om alle tre operander fordi jeg synes det er mest læseligt på den måde. Det kan stadigvæk godt være læseligt selvom man nester hvis ellers deludtrykkene kan stå på en linie hver:
x=f(((a==b)?(c<3):(d>6))
?
((e==6)?(f+3):(g-4))
:
((!h)?(i*j):(k/l)))
er ikke decideret ulæseligt. Man skal selvfølgelig holde tungen lige i munden for at finde ud af, hvad der foregår. Men har man en situation der er så kompliceret, at man har brug for denne type for nesting, så slipper man aldrig uden om at tænke sig om. Det ville ofte være en god idé at bruge funktioner eller makroer til at splitte udtrykket op i nogle velbeskrevne dele. Vil man neste i flere niveauer er det absolut nødvendigt.
= ()?:Ja, hvis man begyndre at neste den slags, så kan det hurtigt blive ulæseligt.
Helt klart det letteste når det er simple operationer, og man ikke begynder at neste dem ;-)
I virkeligheden er operatoren kun ?:
Paranteserne er selvfølgelig praktiske for at gøre udtrykket mere læseligt. Men de er som sådan ikke en del af operatoren (kan ikke huske hvordan precedence er, er paranteserne nogensinde strengt nødvendige med den her operator?)
Jeg plejer nu selv at sætte paranteser om alle tre operander fordi jeg synes det er mest læseligt på den måde. Det kan stadigvæk godt være læseligt selvom man nester hvis ellers deludtrykkene kan stå på en linie hver:
x=f(((a==b)?(c<3):(d>6))
?
((e==6)?(f+3):(g-4))
:
((!h)?(i*j):(k/l)))
er ikke decideret ulæseligt. Man skal selvfølgelig holde tungen lige i munden for at finde ud af, hvad der foregår. Men har man en situation der er så kompliceret, at man har brug for denne type for nesting, så slipper man aldrig uden om at tænke sig om. Det ville ofte være en god idé at bruge funktioner eller makroer til at splitte udtrykket op i nogle velbeskrevne dele. Vil man neste i flere niveauer er det absolut nødvendigt.
arne_v:
Tilgengæld har du to assignments i stedet for en, og udtrykket fylder fire linjer (for at være relativt læselig), mens ternary operatoren kun fylder én og hvis der blot er tale om assignment eller one-lineres så tror jeg de fleste ville tage ternary, da den simpelthen bare fylder mindre og er hurtigere at skrive.
Så vidt jeg kan se bruger jeg i øvrigt en variant af K&R stilen. Har dog mellemrum såden:
Tilgengæld har du to assignments i stedet for en, og udtrykket fylder fire linjer (for at være relativt læselig), mens ternary operatoren kun fylder én og hvis der blot er tale om assignment eller one-lineres så tror jeg de fleste ville tage ternary, da den simpelthen bare fylder mindre og er hurtigere at skrive.
Så vidt jeg kan se bruger jeg i øvrigt en variant af K&R stilen. Har dog mellemrum såden:
if (statement) {
SomeFunction( param1, param2, (a+b*c) );
}
Jeg valgte .= fordi den er utrolig hjælpsom hvis man skal køre en stor mysql query. Den gør det meget nemmer at læse. F.eks
$sql = SELECT category.id, category.parentId, category.containsSub, articleCategory . * , category.textId, text.text AS catText FROM category, articleCategory LEFT JOIN text ON category.textId = text.id WHERE category.id = articleCategory.categoryId AND text.languageId = 'dk' AND text.type = 'category' AND articleId = '1220'
er meget mere læselig sådan her:
$sql = "SELECT";
$sql .= " category.id, category.parentId, category.containsSub, articleCategory . * , category.textId, text.text AS catText";
$sql .= " FROM category, articleCategory";
$sql .= " LEFT JOIN text";
$sql .= " ON category.textId = text.id";
$sql .= " WHERE category.id = articleCategory.categoryId";
$sql .= " AND text.languageId = 'dk'";
$sql .= " AND text.type = 'category'";
$sql .= " AND articleId = '1220'";
Der tages forbeholdt for hvis news design knækker koden.
$sql = SELECT category.id, category.parentId, category.containsSub, articleCategory . * , category.textId, text.text AS catText FROM category, articleCategory LEFT JOIN text ON category.textId = text.id WHERE category.id = articleCategory.categoryId AND text.languageId = 'dk' AND text.type = 'category' AND articleId = '1220'
er meget mere læselig sådan her:
$sql = "SELECT";
$sql .= " category.id, category.parentId, category.containsSub, articleCategory . * , category.textId, text.text AS catText";
$sql .= " FROM category, articleCategory";
$sql .= " LEFT JOIN text";
$sql .= " ON category.textId = text.id";
$sql .= " WHERE category.id = articleCategory.categoryId";
$sql .= " AND text.languageId = 'dk'";
$sql .= " AND text.type = 'category'";
$sql .= " AND articleId = '1220'";
Der tages forbeholdt for hvis news design knækker koden.
#45 >
$sql = "
SELECT
category.id,
category.parentId,
category.containsSub,
articleCategory.*,
category.textId,
text.text AS catText
FROM
category,
articleCategory LEFT JOIN text ON category.textId = text.id
WHERE
category.id = articleCategory.categoryId AND
text.languageId = 'dk' AND
text.type = 'category' AND
articleId = '1220'
"
Er da mere overskueligt, påtrods af lidt mange linjeskift i SELECT, og med tab-indent kan det nemt blive overskueligt.
$sql = "
SELECT
category.id,
category.parentId,
category.containsSub,
articleCategory.*,
category.textId,
text.text AS catText
FROM
category,
articleCategory LEFT JOIN text ON category.textId = text.id
WHERE
category.id = articleCategory.categoryId AND
text.languageId = 'dk' AND
text.type = 'category' AND
articleId = '1220'
"
Er da mere overskueligt, påtrods af lidt mange linjeskift i SELECT, og med tab-indent kan det nemt blive overskueligt.
- Forside
- ⟨
- Forum
- ⟨
- Afstemninger
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.