Sprytne komentowanie

Dodane 26 kwietnia 2009 w kategorii Techblog.

Każde dziecko, które miało do czynienia z programowaniem, dobrze wie, że komentarze w kodzie pełnią dwie funkcje: po pierwsze, oczywiście komentowanie kodu (co za niespodzianka, nie?), po drugie - "wyłączanie" kawałków kodu, których nie chcemy wykonywać, ale nie chcemy ich także kasować. Banał. Jest jednak pewna nie do końca banalna kwestia - zdarza się, że podczas pisania i testowania kodu na przemian "włączamy" i "wyłączamy" jakiś fragment, sprawdzając jego działanie oraz działanie kodu bez niego. Żaden problem, jeśli fragment jest krótki i można go zakomentować/odkomentować w dwie sekundy - ale jeśli zajmuje on, powiedzmy, kilka ekranów, a nasz edytor nie ma automatycznego usuwania znaków końca komentarza po usunięciu początku, to ciągłe latanie kursorem w te i wewte może być dość męczące. Co więcej, jeśli odkomentujemy kod, a potem coś dopiszemy i zechcemy go znowu zakomentować, to nierzadko stracimy chwilę na znalezienie miejsca, w którym fragment do zakomentowania się kończy. Niby drobiazg, ale czasem przeszkadza.

Cóż zatem począć? Na pewno wygodniej by było, gdyby początek i koniec komentarza był widoczny także po jego chwilowym usunięciu, a włączanie i wyłączanie komentarza dało się zrobić w jednym kroku, zamiast w dwóch. Niektórzy radzą sobie z tym problemem, obejmując kod klamrami i dając na początku warunek "if(0)". Efekt niby taki sam jak przy komentarzu, no i wystarczy zmienić zero na jedynkę, żeby kod się wykonał. Nie jest to jednak ani eleganckie, ani nie odpowiada w pełni komentarzowi - raz, że "zakomentowany" w ten sposób kod musi być poprawny, żeby kompilator/interpreter się nie wywalił, a dwa, że nie widać na pierwszy rzut oka, że kod jest nieaktywny, bo kolorowanie składni pozostaje.

Można jednak za pomocą prostego triku osiągnąć za pomocą komentarzy taki sam efekt jak przy "if(0)":

    /*/
    długi kawałek kodu
    //*/

Jedyne, co trzeba zrobić, żeby odkomentować taki kod, to skasowanie gwiazdki na początku. Końca nie musimy już szukać, bo staje się on wtedy nieszkodliwym komentarzem jednolinijkowym - podobnie jak i początek, który może sobie spokojnie zostać na miejscu. Mała rzecz, a cieszy.

Nie koniec na tym - powyższą konstrukcję możemy jeszcze rozbudować:

    /*/
    pierwszy kawałek kodu
    /*/
    drugi kawałek kodu
    //*/

W takiej sytuacji pierwszy fragment jest zakomentowany, a drugi odkomentowany. Teraz znów wystarczy skasować początkową gwiazdkę, a sytuacja się odwróci - pierwszy kawałek się odkomentuje, a drugi dla odmiany zakomentuje. A jeśli chcemy odkomentować obydwa, musimy tylko skasować jeszcze drugą gwiazdkę. Ten trik już się raczej rzadko przyda, ale znać go nie zaszkodzi. Można to oczywiście rozbudowywać w nieskończoność, tworząc ciąg naprzemiennie aktywnych i ukrytych fragmentów, ale dla takiej zabawy już za bardzo nie widzę sensownego zastosowania.

Oczywiście wszystko to zadziała tylko w tych językach, które obsługują zarówno komentarze wielolinijkowe ("/* */") jak i jednolinijkowe ("//"), więc np. w CSS tak nie zrobimy, z braku obsługi tych ostatnich. Co jednak nie znaczy, że się w ogóle nie da:

    /*/
    długi kawałek kodu
    /**/

Tym razem, żeby usunąc komentarz, trzeba dla odmiany dodać drugą gwiazdkę obok pierwszej. Niestety, tej konstrukcji już się nie da rozbudować analogicznie do wcześniejszej, ale cóż - można bez tego żyć.

Natomiast zupełnie żadnego triku nie zrobimy np. w Perlu, który w ogóle nie ma komentarzy wielolinijkowych. Ale przynajmniej "if(0)" zadziała zawsze i wszędzie;-).


Komentarze [Atom]

  • 1.
    26 kwietnia 2009, 21:14:48 Wasacz

    Pierwszy lepszy edytor komentuje linie hurtem ;>

    A podobny wpis już był niedawno.


  • 2.
    26 kwietnia 2009, 21:18:15 Cichy

    Ale żeby komentować linie hurtem, trzeba je zaznaczyć, więc tak czy siak musisz przelecieć się kursorem. A chodzi o to, żeby tego uniknąć.


  • 3.
    26 kwietnia 2009, 21:21:43 Wasacz

    Przecież klawiaturą można zaznaczać równie dobrze. I taki sam dystans do pokonania, jak w dla twoich przykładów.


  • 4.
    26 kwietnia 2009, 21:23:50 Cichy

    Jednorazowo tak, ale mi chodzi o sytuację, kiedy wielokrotnie dodajesz i usuwasz komentarz – wtedy jest różnica, czy za każdym razem musisz wszystko zaznaczać, czy tylko dodać/usunąć jeden znak.


  • 5.
    26 kwietnia 2009, 21:24:54 Wasacz

    Co kto lubi ;-)


  • 6.
    26 kwietnia 2009, 22:29:36 bigfun

    Fajna sprawa, niby takie proste, a nigdzie o tym specjalnie nie piszą :)


  • 7.
    26 kwietnia 2009, 22:35:23 night

    ViM ma wygodne komentowanie kodu 1 komendą z linii poleceń... Dosłownie 4 wciśnięcia przycisku, nie dotykamy nawet kursorów. Po co to komu? ...


  • 8.
    26 kwietnia 2009, 22:39:11 Cichy

    Nie od dziś wiadomo, że VIM ma prawie wszystkie ficzery, jakie ktokolwiek kiedykolwiek wymyślił – ale co z tego, skoro może 1% użytkowników ma wystarczająco dużo cierpliwości, żeby opanować jego obsługę, zanim ich krew zaleje.


  • 9.
    26 kwietnia 2009, 22:44:55 Bigfun

    Podpisuje się pod powyższym wszystkimi ręcoma. Używam vima na codzień, ale nigdy mi cierpliwości ( i pamięci w mózgu) nie starczyło, żeby ogarniać jego wszystkie możliwości


  • 10.
    26 kwietnia 2009, 23:44:00 Fluxid

    Całkiem niedawno na jakimś joggerze podawałem to rozwiązanie w komentarzach, pod notką mówiącą o komentowaniu przez #ifdef 0…


  • 11.
    27 kwietnia 2009, 16:18:47 Marcin Kosedowski

    @night: A w jaki sposób komentujesz w Vimie? Zrobiłem sobie proste makro kiedyś, ale nie zawsze dobrze działa mi odkomentowyawnie…
    Jakbyś mógł rzucić komendę byłbym wdzięczny.


  • 12.
    27 kwietnia 2009, 17:12:25 Dominik Porada

    Świetne, dzięki za tipa. ;-)


  • 13.
    27 kwietnia 2009, 19:56:10 vmario

    Przypominam, że w C/C++ można użyć preprocesora, np. z flagą DEBUG. A i tak nie ma to jak dobry edytor…


  • 14.
    29 kwietnia 2009, 17:02:37 dmichael

    Ja wolę usuwać(dopisywać) początkowego slash’a w tej metodzie :P. Poza tym jeśli chodzi o komentowanie kodu to imo Kate całkiem dobrze sobie z tym radzi: zaznaczasz tekst, Ctrl+D, i już komentarz gotowy. W druga stronę kombinacja Ctrl+Shift+D. Może taki mały minus że Kate wybiera jakiego komentowania ma użyć w zależności od zaznaczenia – przy komentowaniu kilku linijek dostaje się garstkę komentarzy liniowych (//).


Dodaj komentarz