Metoda în cascadă

Vasudev Ram are o postare plictisitoare despre înlănțuirea/cascada metodelor pe care am preluat-o de pe planeta python, în care el susține practic utilizarea metodelor în cascadă. O să nu fiu de acord. În esență, pur și simplu nu înțeleg niciun beneficiu al utilizării în cascadă. Totuși, este o postare drăguță și include câteva referințe la alte metode de legături în cascadă.

metoda

Înlănțuirea metodei este scrierea mai multor apeluri de metode direct una după alta, de obicei pe aceeași linie, cum ar fi (pentru a lua exemplul lui Vasudev):

Cascading este cazul specific al înlănțuirii în care fiecare obiect intermediar este același obiect. Pentru a obține această bară trebuie să reveniți la sine (în Python sau în alte limbi orientate obiect).

Iată primul exemplu al lui Vasudev:

Să presupunem că avem o clasă Foo care conține două metode, bar și baz. Creăm o instanță din clasa Foo:

Fără înlănțuirea metodei, pentru a apela la rândul său atât bar, cât și baz, pe obiectul foo, am face acest lucru:

Cu înlănțuirea metodelor, putem face acest lucru:

Deci, afirmația pentru metoda în cascadă atunci este:

Un avantaj al metodei de înlănțuire este că reduce de câte ori trebuie să folosiți numele obiectului: o singură dată în fragmentul 2 de mai sus, vs. de două ori în Fragmentul 1; iar această diferență va crește atunci când există mai multe apeluri de metodă pe același obiect. Astfel, reduce, de asemenea, cantitatea de cod pe care trebuie să o citiți, să înțelegeți, să testați, să depanați și să întrețineți, în general. Nu sunt beneficii majore, dar pot fi utile.

Prin urmare, metoda în cascadă reduce numărul de ori în care trebuie să folosiți numele unui obiect, dar acest lucru face în mod inerent mai puțin explicit faptul că operați pe același obiect. Uitându-mă la foo.bar (). Baz () nu-mi spune că baz este apelat la același obiect ca și bar. Cu excepția cazului în care sunteți dornici să folosiți metoda în cascadă și să o folosiți singur, pare a fi contrariul.

Prin urmare, metoda în cascadă se poate reduce

cantitatea de cod pe care trebuie să o citiți, să înțelegeți, să testați, să depanați și să întrețineți, în general.

Cu toate acestea, face acest lucru, doar într-un mod „cod-golf”. Nu are rost să reduceți cantitatea de cod pentru a înțelege dacă prin aceasta creșteți dificultatea cu care o puteți înțelege.

Un exemplu obișnuit de metodă în cascadă este unul pe care îl include Vasudev, cel al procesării șirurilor. Aici avem o linie precum (pe care am tradus-o în Python 3):

Deși este destul de plăcut să poți face acest lucru într-o singură linie fără a folosi un nou nume de variabilă, aș scrie acest lucru fără o metodă în cascadă ca:

Acum este evident că dup returnează ceva nou, în acest caz este un duplicat al șirului original. De asemenea, este clar că majusculele și majusculele nu returnează obiecte noi, ci modifică obiectul duplicat.

Deci, mă tem că pur și simplu nu văd cazul de utilizare pentru cascadă.