<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2015-07-27 19:11 GMT+01:00 Nadir Sampaoli <span dir="ltr"><<a href="mailto:nadirsampaoli@gmail.com" target="_blank">nadirsampaoli@gmail.com</a>></span>:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr"><span class="">
> Pero' poi devi accettare:<br>
><br>
> if a = 3:<br>
>     print a<br>
><br>
> cosa sara' a?<br></span>
Immagino che a sarà qualcosa che può essere paragonato e che può essere stampato. Ma, con un po' di fantasia, se ti riferisci al caso in cui a = 3 non valga, direi che manca l'alternativa (sì, sono di quella corrente lì).</p></blockquote><div>Ehm... *se* fosse Python valido, quell'if valuterebbe sempre a vero (a = 3, varrebbe 3) e stamperebbe 3.</div><div>E' un classico baco che si ha in C e linguaggi similari, dove per 1 utilizzo valido e sensato dell'assegnamento come espressione ce ne sono 9 che sono in realta' bachi dove si intendeva fare una comparazione. Come vedi e' piuttosto facile confondersi. :)</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr"><span class="">
> Oh, volendo puoi fare stravolgimenti della grammatica per fare funzionare comunque come si vuole... ma in generale se vai in direzione del "tutto e' un'espressione, ci vai fino in fondo."<br></span>
Il che mi sta abbastanza bene.</p></blockquote><div>E devi accettare il coso la sopra... non e' che si muoia, eh. Ma non e' nemmeno che sia chiaramente meglio di non avere il return implicito.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr"><span class="">
> I linguaggi che menzioni .. a parte che per certi versi Rust non fa una cosa troppo diversa da Python. Se non metti return, lui ritorna ().<br></span>
Solo se termini l'ultima espressione con un punto e virgola.</p></blockquote><div><br></div><div><div>fn foo() {</div><div>    println!("baz")</div><div>}</div><div><br></div><div>fn main() {</div><div>    let x = foo();</div><div>    let () = x;</div><div>}</div></div><div><br></div><div>Questo funziona, foo ritorna () e non finisce per ;. Mi sono perso quello che intendevi, credo.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<p dir="ltr"><span class="">> Dopo di che il fatto che sia staticamente tipizzato mi fa anche pensare che se provi ad usare () per assegnarlo a qualcosa che non dovrebbe avere quel tipo intervenga.<br></span>
Ed è un bel favore.</p></blockquote><div>Oh, si, piuttosto. Se il type system fa meno danni di quelli che risolve benvenga. Il typing di Go e di Rust (sebbene su diverse scale di "strong") sono entrambi type system che fanno il loro mestiere. Perfino con Java a patto di usare i vari FindBugs e le appropriate annotazioni ce la si cavicchia. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<p dir="ltr"><span class="">> Per il resto, gli altri linguaggi che menzioni di fatto hanno altre convenzioni: per esempio che l'ultima espressione che compare e' quella che viene ritornata. La cosa e' relativamente ovvia e poco sorprendente nei linguaggi "veramente" funzionali.<br></span>
Che poi nei linguaggi *veramente* funzionali non hai un'ultima espressione (il che implicherebbe una sequenza procedurale), ma un'unica espressione.<span class=""><br>
> E una volta che hai static typing, anche la gamma di errori che puo' causare cala moltissimo. In Ruby? Non cosi' intuitivo, dal mio punto di vista. Fra le due, preferisco il None implicito rispetto che "quello che e' ultimo implicito".<br></span>
Posso chiederti perchè?</p>
<p dir="ltr">Io lavoro per la stragrande maggioranza del tempo in php (no comment please) e più di una volta vengo morso da return dimenticati (sarà per via che poi la domenica sto su haskell e rust, boh...)</p></blockquote><div>Ci saranno anche dei linter per PHP, no?</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<p dir="ltr">Poi, vabbè, evitiamo proprio di iniziare il discorso null/bottom, penso si sia tutti d'accordo ;)</p></blockquote><div>Fondamentalmente si. Dal punto di vista della type theory pero' *hai* bisogno di un bottom type logico. Non necessariamente deve essere esprimibile come un valore: anzi, il problema e' proprio che puoi esprimerlo come un valore.</div></div><br clear="all"><div><br></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>