Zorientowanie się w dużym pliku z kodem (gdzie przez ‘duży’ rozumiem przynajmniej taki, który przekracza tysiąc linii) może niekiedy przysparzać kłopotów. W IDE są oczywiście narzędzia nawigacyjne, pozwalające na przejście do poszczególnych klas, metod czy deklaracji, o ile tylko znamy chociaż ich nazwy. Nie zawsze jednak tak jest. Jeśli o danej metodzie pamiętamy tylko to, że “była długa i skomplikowana”, a o jakiejś właściwości jedynie tyle, iż “jest gdzieś wśród parunastu innych deklaracji”, to najpewniej oznacza, że w ich poszukiwaniu będziemy musieli przeglądnąć cały plik od początku do końca.
Chyba że… No właśnie – chyba że dałoby się spojrzeć na kod z daleka, by zobaczyć jego ogólną strukturę. Wiadomo bowiem, że metoda “długa i skomplikowana” będzie miała najpewniej sporą ilość wcięć, a długi ciąg deklaracji, jedna pod drugą, też były łatwy do odróżnienia od innych kawałków kodu. W książce o wiele mówiącej nazwie Czytanie kodu znalazłem kiedyś radę, że do uzyskania takiego ogólnego spojrzenia można wykorzystać edytor tekstu typu Word, pozwalający na podgląd wydruku wielu stron naraz.
O wiele wygodniej byłoby jednak mieć podobną możliwość wprost w IDE. NetBeans posiada namiastkę czegoś takiego, jednak za jej pomocą można tylko szybko stwierdzić, gdzie w kodzie znajdują się błędy kompilacji (pisałem zresztą o tym trochę ponad rok temu). Porządną, wielkoskalową, a w dodatku całkiem funkcjonalną “mapę kodu” da się za to znaleźć w… Visual Studio.
Mówię tu o darmowym pluginie o nazwie RockScroll, będącym zresztą początkowo wewnętrznym narzędziem Microsoftu. Tym, co wtyczka ta robi, jest zastąpienie standardowego pionowego paska przewijania przez szerszy pionowy pasek, pokazujący podgląd aktualnie edytowanego w postaci długiej “miniaturki” z kolorowaną składnią. RockScroll działa przy tym podobnie jak zwyczajny pasek przewijania, a więc pozwala na przejście kliknięciem do wybranego miejsca w pliku. Ponadto potrafi też zaznaczać breakpointy oraz koloruje wszystkie wystąpienia wskazanego (dwukrotnie klikniętego) słowa w danym pliku – całkiem przydatne. Jedynym mankamentem jest chyba tylko brak wsparcia dla zwijanych i rozwijanych regionów kodu oraz ewentualnie fakt, że w poziomie plugin zajmuje jakieś cztery razy więcej miejsca niż standardowy pasek przewijania. Na szerokoekranowych monitorach ciężko jednak uznać to za wadę :)
Jedyną wadą RockScrolla jest to, że po przyzwyczajeniu się do niego szlag cię trafia jak musisz edytować dłuższy dokument w edytorze bez niego :).
True, notka powstałaby wcześniej gdybyś przyjechał na IGK 2009:D
Cytuje “Zorientowanie się w dużym pliku z kodem (gdzie przez ‘duży’ rozumiem przynajmniej taki, który przekracza tysiąc linii) może niekiedy przysparzać kłopotów”
Można zawsze podzielić plik z kodem na mniejsze pliki , łączone za pomocą plików nagłówkowych . (sam to przecież wiesz)
Ja osobiście , kiedy bylem ciemny , napisałem grę z ok 11 tysiącami linijek w jednym pliku źródłowym (chodzi o grę z zeszytu) , i naprawdę było ciężko przewijać,ba ciężko było złapać suwak w prawym pasku.
Ciekawe :) Ale IMO w wiekszosci przypadkow, gdy metody nie sa dlugie, lepiej moze sie sprawdzic widok “Outline” z VAX’a ( i innych IDE gdzie takowy istnieje… ) Chociaz… ;)
Zarąbiste… mam niestety brzydki zwyczaj pisać kilkuekranowe switch-case’y – sprawdza się świetnie :)
Wybaczcie ale ten pasek to jakaś pomyłka, zainstalowałem i jedyny plus to taki, że szybciej się w niego trafia.
A jeżeli ktoś pisze metody na kilka ekranów to znaczy, że trzeba poprawić sposób programowania. Na co dzień pracuje nad kilkoma systemami, które mają po około 20 000 linii kodu i może jest tam kilka metod, które wypełniają cały ekran, a już na pewno nie ma takich, które mają dwa ekrany.
Trochę zabawne narzędzie… Moim zdaniem nie rozwiązuje problemu… Skoro ciężko przewijać plik źródłowy normalnym paskiem przewijania, tzn. że najwyżczy czas zabrać się za porządkowanie kodu i podzielenie go na mniejsze pliki.
W Eclipse (dla praktycznie każdego języka) problem przez Ciebie wymieniony jest w pełni rozwiązany przez widok Outline. Jest to po prostu lista-drzewo przedstawiająca wszystko, co jest w danym pliku: dla C byłoby to dyrektywy kompilatora, definicje klas, funkcje. Wiersz z np. klasą to gałąź, którą możemy sobie rozwinąć, by obejrzeć jej pola i metody.
Całość można oglądać w oryginalnej kolejności lub sortować po nazwie.
Screenshot:
http://help.eclipse.org/ganymede/topic/org.eclipse.cdt.doc.user/images/outlineView.png
Bardzo mi tego brakowało w standardzie w VS (a może jest, tylko nie znalazłem?) – Visual Assist X chyba dodaje coś analogicznego.
W standardowy VS jest Class View – jak nazwa wskazuje, pokaże ci wszystko na temat klas w projekcie, w podobny sposób jak to okienko Outline. Z dyrektywami czy funkcjami ‘wolnymi’ może być tu większy problem, ale jest jeszcze Object Browser (wersja bardziej zaawansowana, zajmuje już całą zakładkę zamiast małego gadżetu z boku).
Osobiście rzadko z tych narzędzi korzystam, wystarcza mi Solution Explorer + dwa comboboksy (klasa + składniki tej klasy) na górze okna kodu, ostatnio właśnie RockScroll, a od zawsze jeszcze Ctrl+F ;)
w code::blocks jest taka funkcja wbudowna (irytuje jak ci oddali a piszesz jakiś program ;P)