Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Refaktoryzacja - Introduce/Extract method w netbeansPHP
Forum PHP.pl > Inne > Hydepark
Orzeszekk
Ostatnio duzo uzywajac visual studio odkrylem zalety automatycznej refaktoryzacji extract method.

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 smile.gif

  1. class Costam{
  2. void printOwing(double amount) {
  3. printBanner();
  4.  
  5. //print details
  6. System.out.println ("name:" + _name);
  7. System.out.println ("amount" + amount);
  8. }
  9. }
  10.  
  11. refaktoryzujemy do:
  12.  
  13. class Costam{
  14. void printOwing(double amount) {
  15. printBanner();
  16. printDetails(amount);
  17. }
  18.  
  19. void printDetails (double amount) {
  20. System.out.println ("name:" + _name);
  21. System.out.println ("amount" + amount);
  22. }
  23. }

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).
-=Peter=-
Miałem takie coś pisać (refactoring browser do php) na pracę inżynierską, ale zrezygnowałem z tego pomysłu. Jest taki fajny programik jak antrl, jest to generator parserów do języków. Generuje on klasy (w javie, program też w javie) na podstawie drzewa składni (która jest w formacie obsługiwanym przez ten program). Znalazłem gotowe drzewo składni do php dla tego programu, ale to było dla wersji php 5.2. Bodajże tutaj jest ta gramatyka php.

To jest rozwiązanie bardziej generyczne i lepiej działające dla bardziej skomplikowanych operacji, możesz też zrobić to wyrażeniami regularnymi, ale to już jest rzeźbienie, chociaż jeśli chcesz zaimplementować tylko jedną refaktoryzację (ja chciałem kilkanaście bardziej złożonych), to być może wystarczy.

Sprawdź, czy netbeans nie ma czasem parsera składni do php, bo jakoś musi analizować tą składnie aby dawać podpowiedzi itp.
Orzeszekk
a skonczyles ten refactoring browser? dziala to czy porzuciles to w koncu?

wyrazeniem regularnym sie na pewno tego nie da zrobić. kiedys chcialem parsowac pozagniezdzane bbcode, i regexp nie jest w stanie tego poprawnie wykonac. hmm no chyba zeby wlasnie robic niezachlannym algorytmem i uruchamiac funkcje parsujaca rowniez dla zawartosci tego znacznika

w zaleznosci od tego czy robi sie to zachlannie czy niezachlannie, sparsowanie [bl1][bl1]cos[/bl1][bl1] albo sparsuje od pierwszego do trzeciego znacznika albo do czwartego. to musi byc rekurencyjnie.

obczaje ten twoj program, jak nie spelni wymagan to jeszcze wpadlem w nocy na pewien pomysl jak to sparsowac i stworzyc uproszczone drzewo z klasami, metodami i zmiennymi w nich jako gałęziami.

netbeans musi miec parser php, ale api netbeansa to ogolnie WTF, i nie widzialem nigdzie dokumentacji Api wtyczki PHP. jakbym to znalazl to sporo by pomoglo.
-=Peter=-
Cytat
a skonczyles ten refactoring browser? dziala to czy porzuciles to w koncu?


Miałem takie coś pisać, a nie pisałem wink.gif To było w fazie pomysłu i badania tematu.
Fifi209
Co do zagnieżdżonego BB-CODE
https://github.com/wookieb/bbcode
http://wookieb.pl/bbcode/test.php

P.S. Gdzie Ty w visual studio tworzysz projekty/strony w php?
Orzeszekk
Cytat(Fifi209 @ 7.01.2012, 14:37:04 ) *
Co do zagnieżdżonego BB-CODE
https://github.com/wookieb/bbcode
http://wookieb.pl/bbcode/test.php

P.S. Gdzie Ty w visual studio tworzysz projekty/strony w php?


strony tworze w netbeansie, visual studio uzywam do okienkowych aplikacji i programowania na windows phone ktorym sie ostatnio troche zajmowalem. tak czy siak, tej refaktoryzacji sie uzywa wszedzie.

ale jakbys chcial to jest wtyczka visual studio for php, pozwala ona pisac w php w visual studio, ale uwazam ze jest nie warta funta kłaków.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.