mboost-dp1

Favorit assignment operator


Gå til bund
Gravatar #1 - gentox
21. jul. 2007 18:09
For en gangs skyld er jeg nødt til at sige WTF foregår der?
Nok en af de lammeste afstemninger, som der har været her i lang tid.

Men kom da bare med de flamebaits, fordi jeg tør sige min mening.
Gravatar #2 - ess^pe
21. jul. 2007 18:22
Rolig nu mate.. ingen grund til at hidse sig sådan op :-)

Øhhh??? hva er det?
Gravatar #3 - TheThufir
21. jul. 2007 18:23
#1 "news for nerds" :) Enten ved man hvad det er, eller også gør man ikke, og søger på google :)
Gravatar #4 - mora
21. jul. 2007 18:24
Det kommer vel en smule anpå hvad man skal bruge.
hvis man skal gange er *= ofte nemmere at bruge en -= :)
Gravatar #5 - steffanp
21. jul. 2007 18:29
Jeg bruger oftest = i mine programmer. += kommer nok på en anden plads
Gravatar #6 - kba
21. jul. 2007 18:30
= ()?:

Det er så dejlig nemt og kompakt, og så slipper man for store, klodsede if-else-statements!
Gravatar #7 - TheThufir
21. jul. 2007 18:32
#1 "news for nerds" :) Enten ved man hvad det er, eller også gør man ikke, og søger på google :)

Hmm.. "=!" er ikke en assignment operator i c++ så vidt jeg ved.. tilgengæld er "!=" :) jeg tror det enten er en fejl.. eller en joke :D
Gravatar #8 - kasperd
21. jul. 2007 18:32
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 "=="?
Gravatar #9 - ComiSteff
21. jul. 2007 18:34
#7
Ja tænkte det samme her. Testede lige i C# og VB .NET, men fik bare en compiler fejl. Tror også de mener !=.
Gravatar #10 - kasperd
21. jul. 2007 18:39
[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.
Gravatar #11 - TheThufir
21. jul. 2007 18:42
#10 Okay.. my bad :) Du ved 100% sikkert mere om det end jeg gør :P Bøjer mig i støvet...
Gravatar #12 - HardcoreWizard
21. jul. 2007 18:45
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.
Gravatar #13 - kimx
21. jul. 2007 18:49
:=
Gravatar #14 - rasmoo
21. jul. 2007 18:55
=()?: er vel egentlig en simpel assignment operator og en conditional expression operator. Jeg savner =~ og ?= og **=
Gravatar #15 - rackbox
21. jul. 2007 19:15
#7 og #9

!= er til brug i sammenligning: if ($a != $b)... og betyder: Hvis $a IKKE ER LIG MED $b, så...

=! eksemplificeres således:

$a =!$b og betyder at $a får den modsatte boolske værdi af $b.
Gravatar #16 - owrflow
21. jul. 2007 19:32
Er denne poll her ikkebare for at se hvor nørdet newz brugere i virkeligheden er?
Gravatar #17 - kasperd
21. jul. 2007 19:38
[url=#16]#16[/url] owrflow
Er denne poll her ikkebare for at se hvor nørdet newz brugere i virkeligheden er?
Og hvad har man så tænkt sig at gøre, hvis det viser sig, at de ikke er nørdede nok?
Gravatar #18 - rackbox
21. jul. 2007 19:57
#17 så lukker vi newz.dk
Gravatar #19 - Ronson ⅍
21. jul. 2007 19:58
.= vil jeg skyde på, nok den jeg har brugt mest - ud over =, men den er jo bare kedelig
Gravatar #20 - Cyrack
21. jul. 2007 20:13
= ()?:

Helt klart det letteste når det er simple operationer, og man ikke begynder at neste dem ;-)

Btw. nu udstilleri jeg nok mig selv, men hvad gør '.='? Google kan ikke hjælpe mig :-/
Gravatar #21 - Ronson ⅍
21. jul. 2007 20:16
#20:

$streng = $streng."noget"
er det samme som
$streng .= "noget"
Gravatar #22 - Cyrack
21. jul. 2007 20:17
Ronson:

Ah, så var det derfor jeg ikke fattede det... VB syntaks (er der andre sprog der også brug den syntaks?).

[Edit]

Åbenbart også PHP, ud fra dit eksempel

[Edit[Edit]]
Arne_v: kom jeg i tanke om :-)
Gravatar #23 - arne_v
21. jul. 2007 20:18
#20

Det er en PHPisme.
Gravatar #24 - Redeeman
21. jul. 2007 20:34
#23:
og det ville sateme ikke skade php at stoppe det :) det er virkeligt grimt
Gravatar #25 - xandax
21. jul. 2007 20:36
Min favorit har altid været ternary assignments.
Især nu den kommer med i vb.net 9.0 (sku også på tide)
Gravatar #26 - Cyrack
21. jul. 2007 20:59
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:

if _something then
...
end if

vs

if (_something) {
...
}
Har dog forstået at bean-counteres er vilde med VB fordi de tror de forstår det...
Gravatar #27 - henne
21. jul. 2007 20:59
#15: a=!b er vel strengt taget ikke en tildelingsoperator?
Det bliver jo parset som a=(!b) i praksis.

PS: Med forbehold for sprog som jeg ikke har kendskab til, hvor ! ikke betyder not og kan bruges foran ethvert (boolsk) udtryk.
Gravatar #28 - arne_v
21. jul. 2007 21:11
#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).
Gravatar #29 - kriss3d
21. jul. 2007 21:24
Min favorit er += fordi man ofte bruger dem i for statements og generelle countere. Det har jeg brugt meget.
Gravatar #30 - dyg
21. jul. 2007 21:40
:= Af samme grund(e) som #8 pointerer.
Gravatar #31 - Cyrack
21. jul. 2007 22:02
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).
Gravatar #32 - Cloud02
21. jul. 2007 22:12
Er der en der kan forklare "= ()?:" ?
Gravatar #33 - Pally
21. jul. 2007 22:36
#32
x = (logic condition) ? value if true : value if false

Eks:
int y = 1;
int x = (y > 2) ? 100 : 200;
// x = 200

Edit:
Values kan selvfølgelig være andet end konstanter; bare noget der evaluerer til x's type.
Gravatar #34 - Cyrack
21. jul. 2007 22:37
Cloud02:

a = (statement) ? [statement_is_true] : [statement_is_false]

Wiki
Gravatar #35 - arne_v
21. jul. 2007 22:57
#31

Jeg er meget skeptisk overfor programmering hvor man ændrer en
if til en while uden at checke hvor ens kode blok slutter !
Gravatar #36 - Disky
21. jul. 2007 23:09
#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 :)
Gravatar #37 - Cyrack
21. jul. 2007 23:21
Disky:

Du mener bare ikke man skal skrive:

if (statement)
{
...
}

Alle ved at

if (statement) {
...
}

Ser pænere ud :-)
Gravatar #38 - Cyrack
21. jul. 2007 23:24
arne_v:

Man kan da sagtens ændre sin kode, man kender den jo :-) skal bare ikke gøre det på gammelt projekt, eller et man har arvet :-)
Gravatar #39 - fjols
22. jul. 2007 01:09
Stemte :=, men skulle have været +=. Tilgengæld er =()?: den jeg hader mest. Nok mest fordi jeg synes den virker så uoverskuelig.

#37: Vi har altid lært følgende i skolen:
if (statement)
{
...
}
Hvilket jeg egentlig også synes ser mest overskueligt ud.
Gravatar #40 - arne_v
22. jul. 2007 02:34
#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
Gravatar #41 - EmailFX
22. jul. 2007 06:24
Stemte ":="
Har brugt den en mia. gange - dog ikke til programmering, men i Mathematica.

Elsker at definere ting :-)

/EmailFX
Gravatar #42 - kasperd
22. jul. 2007 06:46
[url=#20]#20[/url] Cyrack
= ()?:

Helt klart det letteste når det er simple operationer, og man ikke begynder at neste dem ;-)
Ja, hvis man begyndre at neste den slags, så kan det hurtigt blive ulæseligt.

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.
Gravatar #43 - Cyrack
22. jul. 2007 08:01
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:

if (statement) {
SomeFunction( param1, param2, (a+b*c) );
}
Gravatar #44 - rasmoo
22. jul. 2007 08:13
#23 - arne_v

Det er sgi da ikke en PHPisme.
Gravatar #45 - Galdar1
22. jul. 2007 09:53
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.
Gravatar #46 - manisto
22. jul. 2007 10:18
Jeg valgte = ()?:. Ternary operator er da den fedeste! :) Smart-ass one-liners coding, here I come! :D
Gravatar #47 - Disky
22. jul. 2007 10:57
#46
Men desværre oftest fuldstændigt ulæseligt.
Gravatar #48 - KaW
22. jul. 2007 11:34
#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.
Gravatar #49 - owrflow
22. jul. 2007 13:04
#17
Så må mottoet laves om fra "nyheder for rigtige nørder" til "nyheder for bla nørder"
Gravatar #50 - arne_v
22. jul. 2007 13:50
#43

Hvilket indlæg kommenterer du på ?
Gå til top

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.

Opret Bruger Login