Mostra notizie nelle discussioni
Avatar
☺
Scritto da
il 2013-01-14 17:03:22.0 alle 2013-01-14 17:03:22.0
Trollate totali: 2001
Dart e la somma
Dunque, ho scaricato DartEditor per capire se avevo ragione nel considerare l'operatore di somma come un metodo del primo oggetto dell'operazione.

Ho scritto così per testare l'esempio del perlaro:
var x = "2" + 2;

Non mi aspettavo che Dart si lagnasse dato che davo per scontato che l'esempio del perlaro fosse corretto, ma Dart si è lamentato e lamentandosi mi ha fatto capire che 1) avevo ragione su quanto detto qui sopra e 2) Dart non supporta più il metodo "+" per le stringhe... il che conferma che giudicare un linguaggio in base alla specifica 0.01 dello stesso non è quasi mai una buona idea.

Vediamo che errore da.

var x = "2" + 2;

- "String" has no method named "operator +"
- '+' cannot be used for string concatentation, use string interpolation or a StringBuffer instead


Prendiamo il primo messaggio di errore: "String" has no method named "operator +"

Ciò significa che per come è fatto il linguaggio considera l'operatore come metodo dell'oggetto che lo precede ("2" in questo caso che è una stringa).

Quanto affermavo quindi sul perché potesse essere logico che "2" + 2 non generasse warning mentre lo facesse 2 + "2" è corretto. Le considerazioni del perlaro sono quindi dovute alla sua ignoranza (non è un insulto dato che nemmeno io lo sapevo, l'ho tirato ad indovinare) del funzionamento interno di Dart.

Infatti a quanto pare in Dart il "+" è considerato un metodo dell'oggetto che lo precede. Perciò l'operazione si converte in "2".+(2) nel primo caso e 2.+("2") nel secondo caso. Si tratta quindi di _metodi diversi_ su oggetti diversi e quindi, naturalmente, possono avere messaggi di errore diversi (o non averne).

Andando a scavare nella documentazione di Dart infatti dice:
"Dart shares the same operators and precedences that you're familiar with from C, Java, etc. They will do what you expect. Under the hood, though, they are a little special. In Dart, an expression using an operator like 1 + 2 is really just syntactic sugar for calling a method. The previous example looks more like 1.+(2) to the language."

Il fatto invece che il metodo "+" non esista più invece mi ha incuriosito. Perché mai rimuovere il metodo "+" dalle stringhe?
Risulta che la cosa sia stata scelta dopo aver analizzato i problemi che questo provoca anche in altri linguaggi (fra cui java). Si è scelto quindi di supportare la concatenazione di stringhe in modo meno ambiguo.

Le ragioni sono riportate qui con tanto di esempi perciò non sto a dilungarmi: http://news.dartlang.org/2012/06/vm-to-remove-supp...

Perciò non solo le considerazioni del perlaro sono dovute al non sapere quale sia il razionale che ha portato a quel warning (cosa che avrebbe potuto scoprire spendendo 2 minuti della sua vita a fare le dovute verifiche) ma sono anche obsolete perché basate su una specifica (la versione 0.01 del linguaggio) che non rispecchia più l'attuale stato del linguaggio.

Pagina generata in 116 millisecondi

Utenti attivi: 13 nell'ultimo minuto, 33 negli ultimi cinque minuti, 69 negli ultimi 15 minuti