2012-04-12 9 views
9

Ho letto che Dart non supporta l'overloading delle funzioni. Supporta il sovraccarico dell'operatore. Se sì, sarebbe gentile e mostrami come in un semplice esempio come è stato fatto. E quali sono alcuni vantaggi ecc. Sono nuovo alla programmazione. Grazie.Il dart supporta il sovraccarico dell'operatore

+0

dove hai letto che * Dart non supporta il sovraccarico di funzione *? –

risposta

14

Sì La freccetta supporta il sovraccarico dell'operatore utilizzando la parola chiave dell'operatore seguita dall'operatore che si desidera sovraccaricare. Il seguente esempio sovraccarica il == operatore per il oggetto MiaClasse:

class MyClass { 
    operator ==(MyClass other) { 
    // compare this to other 
    } 
} 

quasi tutte freccette operatori built-in può essere sovraccaricato con poche eccezioni essendo l'operatore di assegnazione = e riferimento equivalenza operator === (non esiste più).

Per quanto riguarda il vantaggio di overloading degli operatori permette di riutilizzare gli operatori che hanno un significato semantico noto come == o + per le operazioni sui vostri oggetti. Per esempio, se si dispone di una classe Matrix che sovraccarica l'operatore + poi si può aggiungere due matrici utilizzando la sintassi m1 + m2 al posto del più ingombrante m1.plus (m2)

+0

potrebbe dirmi se 'altro' è qualcosa di speciale o potrebbe essere chiamato qualcos'altro. Ad esempio == (MyClass ggg) –

+1

@MuhammadUmer si può chiamare qualsiasi altro, solo il nome del parametro dell'oggetto di classe che si sta confrontando, ad es. == altro o questo + altro –

+0

L'argomento deve essere dello stesso tipo, oppure si possono creare operatori come Scala cons Elenco operatore ::, dove il tipo a sinistra è il tipo di elemento per creare la nuova testata e il tipo a destra è il tipo Lista? – pohl

6

Per estendere Lars' rispondi, puoi anche sovraccaricare gli operatori usando la sintassi della funzione inline.

class MyClass { 
    operator ==(MyClass o) => id == o.id; 
}