<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2015-03-22 17:06 GMT+01:00 enrico franchi <span dir="ltr"><<a href="mailto:enrico.franchi@gmail.com" target="_blank">enrico.franchi@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><span class=""><br><div class="gmail_quote">2015-03-22 15:35 GMT+00:00 Manlio Perillo <span dir="ltr"><<a href="mailto:manlio.perillo@gmail.com" target="_blank">manlio.perillo@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>Tra l'altro il tutto è complicato dal fatto, AFAIK, che ciascuno degli operandi può avere effetti collaterali.</div><div>Ad esempio:</div><div><a href="https://play.golang.org/p/jc0vKCWFu7" target="_blank">https://play.golang.org/p/jc0vKCWFu7</a></div></blockquote></div><br></span>Scusa non comprendo... in C (e in Go) && introduce un sequence point. Quindi *sai* l'ordine in cui le cose sono valutate.</div></div></blockquote><div><br></div>Logical operators apply to boolean values and yield a result of the same type as the operands. The right operand is evaluated conditionally.<div>Senza il "conditionally", il compilatore potrebbe evaluare `*p` anche se `p != ni`l è falso.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra">Ovviamente in C (e in GO) se scrivi & *non* hai un sequence point.</div></div></blockquote><div><br></div><div>In realtà, come dici dopo, Go non ha la nozione di sequence point.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"> Solo che in C non hai garanzie sull'ordine di valutazione. In Go invece hanno fatto una cosa molto saggia ed e' garantirti da specifica che l'ordine di valutazione delle espressioni e' lessicografico da sinistra a destra. Ovvero se scrivi f() & g() (ammesso che tu lo possa scrivere... in generale hai cazzi con i tipi) hai certezza che f() sara' valutato prima di g().</div><div class="gmail_extra"><br></div><div class="gmail_extra">Dopo di che mi gira il cazzo perche' in Go non c'e' un singolo modo decente per convertire un booleano in intero (no, fare un if non e' un modo decente) e per *nessuna* ragione che a me paia sensata (per favore, qualcuno mi spieghi il perche') & e | non funzionano con operandi booleani.  Voglio dire, sarebbero operazioni perfettamente definite e type safe. WTF!<span class=""><font color="#888888"><br><br clear="all"></font></span></div></div></blockquote><div><br></div><div>La risposta ufficiale credo sia : "ti scrivi delle funzioni apposite "</div><div><br></div><div><br></div><div>Ciao  Manlio</div></div></div></div>