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
Pierwszy lepszy edytor komentuje linie hurtem ;>
A podobny wpis już był niedawno.
Ale żeby komentować linie hurtem, trzeba je zaznaczyć, więc tak czy siak musisz przelecieć się kursorem. A chodzi o to, żeby tego uniknąć.
Przecież klawiaturą można zaznaczać równie dobrze. I taki sam dystans do pokonania, jak w dla twoich przykładów.
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.
Co kto lubi ;-)
Fajna sprawa, niby takie proste, a nigdzie o tym specjalnie nie piszą :)
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? …
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.
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
Całkiem niedawno na jakimś joggerze podawałem to rozwiązanie w komentarzach, pod notką mówiącą o komentowaniu przez #ifdef 0…
@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.
Świetne, dzięki za tipa. ;-)
Przypominam, że w C/C++ można użyć preprocesora, np. z flagą DEBUG. A i tak nie ma to jak dobry edytor…
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 (//).