2013-04-12 2 views

risposta

6

Dart ingegnere Bob Nystrom scrive:

tipi di ritorno sono un tocco interessante su questo problema. Con tipi di parametri, le linee guida sono piuttosto semplici:

  1. Se si utilizza Object come un tipo di parametro, che stai dicendo "il mio metodo accetta in modo sicuro qualsiasi oggetto e utilizzarla solo per cose come toString() che tutti gli oggetti di supporto ".

  2. Se si utilizza dynamic (o nulla) come tipo di parametro, si sta dicendo che "il sistema di tipo di Dart non può facilmente esprimere il tipo che accetto qui" o "Non mi sono preoccupato di annotare".

È difficile capovolgere (1) in giro. Per un tipo di ritorno, suppongo che Object diresti "È meglio non chiamare nulla eccetto lo toString() o altre cose che supportano tutti gli oggetti prima di fare un test di tipo", dove dynamic penserei sia "non possiamo facilmente annotare questo così tu ed io meglio solo sapere cosa stiamo facendo ".

L'utente dovrebbe "eseguire il cast" su un tipo specifico che si aspetta di vedere per evitare il warning del compilatore e ottenere un errore prima in modalità selezionata.

Per quello che vale, in molti casi non è necessario eseguire il cast anche se si restituisce Object. Dart consente il downcast implicito quando si inizializza una variabile locale con un'annotazione di tipo. Così si può fare:

Object foo() => 123; 

main() { 
    int x = foo(); // Implicit downcast. No type warning. 
} 

Penso che in questo caso, probabilmente fare dynamic, però. Penso che trasmetta "Non so di che tipo ritorna, ma dovresti" meglio di Object.

+0

La tua risposta è molto utile ma il tuo esempio non è corretto perché questo non è un "linguaggio dardo". Nell'espressione di Dart 'int foo();' non è un'espressione valida. Potresti voler scrivere 'int i = foo();'? – mezoni

Problemi correlati