In C# è convenzionale per scrivere in modo abbastanza obiettivo, in questo modo:C#: come funzionano le chiamate con funzione sequenziale? (Efficienza-saggio)
MyObj obj = new MyObj();
MyReturn ret = obj.DoSomething();
AnotherReturn rett = ret.DoSomethingElse();
ho potuto solo scrivere quanto sopra come questo:
AnotherReturn rett = new MyObj().DoSomething().DoSomethingElse();
Tuttavia, come fa il lo stackframe funziona quando hai un sacco di chiamate di funzione in una sequenza come questa? L'esempio è abbastanza semplice, ma immaginate di avere più di 50 chiamate di funzione concatenate (questo può accadere in JavaScript (/ w jQuery)).
La mia ipotesi era che, per ogni chiamata di funzione, viene effettuato un indirizzo di ritorno (al "punto"?) E il valore di ritorno (un nuovo oggetto con altri metodi) viene quindi immediatamente immesso nella successiva chiamata di funzione in quel indirizzo di ritorno. Come funziona questo w.r.t. raggiungere il valore di ritorno generale (in questo esempio l'indirizzo di ritorno assegnerà il valore della funzione finale a rett)? Se continuassi a incatenare le chiamate, alla fine potrei traboccare? In tal caso, è considerato più saggio prendere la rotta obiettiva (al costo di un "inutile" incarico di memoria?).
Si potrebbe, ma non ti ringrazio per il debug esso! –
Hah sì, sto chiedendo solo perché mi sono divertito un po 'con il mio jQuery e non è insolito per me non assegnare nessuna variabile in funzioni abbastanza grandi. per esempio. function doSomething() {return (someReturnCode.somethingElse(). andSoOn); } –
Tuttavia, qualcosa come StringBuilder viene spesso utilizzato (poiché fornisce un'interfaccia fluida). Inoltre, le classi di builder per tipi immutabili utilizzano spesso questo tipo di interfaccia fluente. –