return this
(o costrutto simile) consente il concatenamento del metodo. La mancanza di esso è dolorosa, perché devi scrivere tale codice (C #):
var list = new List<string>();
list.Add("hello");
list.Add("world");
invece di
list.Add("hello").Add("world");
L'elisir lo risolve bene per la funzione concatenamento, invece di fare affidamento su callee fa affidamento sul chiamante (perdonami i miei errori, non so l'elisir):
list |> add("hello") |> add("world");
Ma ora ho appena letto questa frase su wikipedia :
Returning an object of built-in type from a function usually carries little to no overhead, since the object typically fits in a CPU register.
Da un lato, il call non sa se il risultato verrà utilizzato o meno, d'altro canto il chiamante non può impedire a callee di impostare il valore del risultato. Quindi sono scettico su questo "piccolo", ma "non sovraccarico"?
Quindi LA MIA DOMANDA per questo schema molto particolare (cioè return this
con concatenamento del metodo) - può essere ottimizzato senza sovraccarico? Come?
Domanda per esempio - diciamo che scriverò un framework e cospargerò ogni metodo possibile con return this
solo per dare la possibilità di concatenare il metodo. La domanda sorge - chi userà chi non usa il metodo di concatenamento pagherà il prezzo delle prestazioni ridotte? In che modo il compilatore può ottimizzare il codice che questa funzionalità avrà costo zero.
Aggiornamento dopo i primi 2 commenti - "cheap"!="free", quindi forse un'altra prospettiva per la mia domanda, perché la differenza "piccola" rispetto a "nessun costo". Se può essere garantito è a costo zero, scriviamo "nessun costo", punto. Quindi presumo che non possa essere garantito, quindi "poco".
Chiarimento Non sto chiedendo come creare una sintassi simile a Elixir in un'altra lingua. Sto chiedendo come sia possibile per il compilatore ottimizzare l'interazione del chiamante callee su return this
+ concatenamento del metodo (o mancanza di esso, se non utilizzato).