polega to na tym ze zaznaczmy kod wewnatrz metody, uruchamiamy refaktoryzacje, wpisujemy nazwe nowej metody, a on nam zaznaczony kod przenosi do drugiej metody, wyłapujac zaleznosci miedzy zmiennymi lokalnymi i odpowiednio przekazujac je przez parametry lub zwracajac wartosc. sprzyja to ponownemu wykorzystaniu kodu. Po prostu wydzielamy najmniejsze kawałki kodu ktore wykonują jakas czynnosc i korzystamy z nich zamiast np drugi raz pisac funkcje warunkowa w innej metodzie nawet jesli jest prosta.
czy to wplywa na wydajnosc? hmm moze i tak , w niewielkim stopniu spowalnia. ale jak ktos uzywa method chaining, i getterow/setterow to nie powinno mu robic to roznicy. po za tym, apc sporo daje przy małych metodach, no i niedlugo wychodzi 5.4

class Costam{ void printOwing(double amount) { printBanner(); //print details } } refaktoryzujemy do: class Costam{ void printOwing(double amount) { printBanner(); printDetails(amount); } void printDetails (double amount) { } }
komentarz //print details staje sie zbędny. zbedne sie staje rownez copy paste jesli gdzies jeszcze sie zachce to wykonac.
niestety zend studio jest platne, i co by tu duzo mowic, dziadowskie - sypie wyjątkami jak głupie, co jest dziwne jak na calkiem drogie srodowisko. a to jedyne srodowisko do php ktore zawiera opcje refakoryzacji. eclipse nie zawiera refaktoryzacji wcale, z uwagi na polityke zenda. netbeans php ma tylko rename (zmiana nazwy w zasiegu lokalnym).
a ze zyc bez tego nie moge to postanowilem napisac plugin do NetBeans bo szukalem dlugo pluginu i nigdzie nie ma, tworcy netbeansa tez sie nie interesuja tym. a sporo ludzi pyta o tą funkcjonalnosc, i nic z tym nie robią.
mam juz cialo wtyczki, pobieram do zmiennej cały obecny dokument i mam metody ktore moga dzialac na otwartym dokumencie. pozostaje kwestia jego przetworzenia. trzeba napisac model ktory przyjmie za parametry string z obecnym dokumentem i wypluje stringa z zrefaktoryzowanym dokumentem.
goal jest taki aby z pliku zrodlowego, i pozycji kursora czy selekcji (zapisanej jako string lub offsety w dokumencie) wydzielic fragment kodu ktorym jest obecna metoda. wyłapanie wszystkich zmiennych powinno byc raczej proste. ale zeby wydzielic funkcje to juz trzeba by go sparsowac.
moze ktos widzial jakis lgotowy ekser do javy, w ktory mozna by bylo tylko wpisac operatory i slowa kluczowe w jezyku, a on by utworzyl z kodu zrodlowego drzewo dom? z drzewa dom mozna by bylo latwo powyciagac zaleznosci.
ew. moze wspolnymi silami napiszemy prosty parser do kodu php ktory bedzie w stanie wyciac z kodu zmienne lokalne? potrzebuje jedynie algorytmu do tego:P pewnie zrobilbym to sam, ale z pomoca spolecznosci na pewno bedzie sprawniej i szybciej, a plugin i tak bedzie dostepny i darmowy i na pewno nie jednej osobie sie przyda. a jak odniesie sukces to mozna dopisac reszte refaktoryzacji (wiadomo ze wszystkie zrobic bedzie ciezko bo to jezyk dynamicznie typowany, ale to tych najprostszych sie najwiecej uzywa).