Czy język, który nie pozwala na komentarze, daje bardziej czytelny kod? [Zamknięte]


15

Z ciekawości zacząłem się zastanawiać, czy język, który nie pozwala na komentarze, dałby bardziej czytelny kod, ponieważ musiałbyś napisać kod z własnym komentarzem.

Z drugiej strony możesz napisać tak samo zły kod jak wcześniej, ponieważ po prostu cię to nie obchodzi. Ale jakie jest twoje zdanie?


44
Czy uważasz, że istnieje różnica między językiem, który nie zezwala na komentarze, a programistami, którzy ich nie używają?
Jeremy Heiler

21
Pomysł, że niedopuszczenie komentarzy zmusiłoby deweloperów do napisania bardziej samodokumentującego się kodu jest absurdalny.
Adam Crossland,

2
@Jeff, który jest funkcją IDE / edytora, a nie funkcją langugae IMHO
jk.

4
nie jestem pewien, czy można zmusić programistów do zrobienia czegokolwiek
jk.

2
@Adam @ jk01: mają nawet język, który zmusza programistów do wcięcia kodu w określony sposób ;-)
Joris Meys

Odpowiedzi:


61

Myślę, że programiści wymyśliliby inny sposób dodawania komentarzy ...

string aComment = "This is a kludge.";

7
Podoba mi się, jak ten „komentarz” ma wiele warstw
Logan Capaldo

29
Dodatkową korzyścią jest to, że przejdzie do pliku binarnego, dzięki czemu można tam również zobaczyć komentarze! Znacznie upraszcza inżynierię wsteczną.

1
Masz rację. Zamiast tego musielibyśmy użyć instrukcji #ifdef.
James

9
Jest to prawdopodobnie najlepszy przykład „programowania w języku” w przeciwieństwie do „programowania w języku”, jaki kiedykolwiek widziałem. =)
gablin

2
W MOO istnieje obsługa komentarzy, ale wszystkie programy są analizowane w celu przechowywania i nie są analizowane w celu wyświetlenia, więc komentarze są tracone. Idiomem dla uporczywych komentarzy są literały smyczkowe ala"this is a comment";
Ben Jackson

44

Nie sądzę, że to takie proste:

nawet w dobrze napisanym, samodokumentującym kodzie istnieją uzasadnione sytuacje, w których powinieneś pisać komentarze.


13
+1 za komentarze, które są czymś więcej niż zwykłą narracją kodu. Nawet najlepszy „samodokumentujący kod” musi mieć komentarze do opracowania wielu rzeczy. Często kod zawiera zewnętrzne zależności, założenia wejściowe, zastrzeżenia, obszary, które można poprawić, znane luki w zabezpieczeniach i niezliczone inne rzeczy, które nigdy nie zostałyby w inny sposób potwierdzone. Komentarze mają wiele zastosowań.
Adam Crossland,

3
Dokładnie. Jak zarejestrować „zamiar”, „dlaczego” lub „dowód poprawności” bez komentarzy?
S.Lott,

2
Uzgodnione, komentarze powinny brzmieć „Dlaczego”, a nie „Co”. Każdy, kto nie może uzyskać kodu What from the code, nie powinien go czytać.
Mateusz

3
@Matthew: Aby być uczciwym, możesz łatwo napisać kod, który nie jest łatwo odszyfrowany. Ale tak, czytelny kod jest najlepszym źródłem „co”.

14

Załóżmy, że jesteś doskonałym programistą (którym nie jesteś, ale załóżmy tylko) ...

Istnieje wiele nieoczywistych efektów, które mogą wystąpić w kodzie, gdy masz do czynienia z rzeczami, których nie napisałeś. Na przykład mogą występować wady projektowe czyjejś biblioteki lub (jeśli jesteś programistą jądra) w czyimś sprzęcie. Posiadanie komentarzy wyjaśniających, dlaczego użyłeś określonej kludge w określonym miejscu, może być niezbędne do zrozumienia kodu i upewnienie się, że kludge nie zostanie usunięty (zepsucie).


11

Trudno mi się skupić na pomyśle, że usunięcie opcji z języka w jakiś sposób poprawiłoby programy napisane w tym języku. Komentarze nie są obowiązkowe, a pisanie samodokumentującego się kodu również nie jest takie samo.

Nic nie zastąpi dobrych praktyk rozwojowych.


6

Teoretycznie COBOL został pierwotnie zaprojektowany w taki sposób, że miał być wystarczająco udokumentowany, aby nawet osoby niebędące programistami (tj. Osoby nadzorujące) mogły przeglądać napisany kod i określać, co się dzieje. Jednak w praktyce, gdy program staje się bardziej złożony, trudno jest zrozumieć wszystko, co dzieje się wyłącznie za pomocą kodu.

Podczas usuwania komentarzy może zmusić niektórych deweloperów do kodu napisać, że jest lepszy w dokumentacji siebie, nadal istnieją deweloperzy tam, że pisanie kodu słabo udokumentowane (czyli zmienne nazwy a, b, citp) i to te nawyki, które ludzie muszą być przeszkoleni z z. W takich przypadkach usunięcie komentarzy nie wpłynęłoby na tych programistów i może utrudnić staraniom innych programistów wyjaśnienie złożonych fragmentów kodu.


1
Teraz czytam trochę kodu: argument = 3.0; aa = sqrt( argument ); bb = f( aa ); Westchnij.
S.Lott,

Kobol to specjalny język. Ale "." Operator jest zły !!! To trochę łamie składnię zdania.
Loïc Faure-Lacroix

3

Każdy program jest zapisywany w celu implementacji wymagań funkcjonalnych, które są poza programem, czy to spisane, czy tylko w czyjejś głowie.

Myślę, że najważniejszą funkcją komentarzy jest ustalenie mapowania między wymaganiami a kodem. Powodem, dla którego potrzebne jest mapowanie, jest zezwolenie na zmiany przyrostowe. Gdy nastąpi zmiana wymagań, konieczne jest dokonanie odpowiednich zmian w kodzie, jeśli kod ma pozostać rozwiązaniem wymagań. Komentarze służą jako mapa drogowa zmian.

Jeśli język jest idealnym językiem specyficznym dla domeny (DSL), idealnie dostosowanym do rozwiązywanego problemu, wówczas mapowanie powinno być prostym izomorfizmem, a komentarze nie byłyby konieczne. Kod źródłowy po prostu określa problem i nie trzeba nic więcej mówić. Rozwiązanie problemu zostanie zakopane we wdrożeniu języka.

Ponieważ języki, w których pracujemy, nie są takimi listami DSL i pozostaną takie przez pewien czas, nadal potrzebujemy komentarzy . To kwestia stopnia. Czasami problemem jest dobre dopasowanie do danego języka, ale zwykle nie.

Zobacz też...


2

Pracuję gdzieś, co nie pozwala na wstawianie komentarzy (tzn. Możesz mieć tylko komentarze na górze funkcji). Nie, nie ułatwia to odczytania kodu. To czyni go o rząd wielkości gorszym.


Zakładając, że nie ma ograniczeń co do liczby metod, dlaczego po prostu nie przeredagujesz swoich bloków kodu na odpowiednie metody, a następnie nie podasz metod opisowych nazw (lub więcej komentarzy, w twoim przypadku)? W większości „dobrych” kodów, jakie widziałem, metody rzadko są dłuższe niż około 10 linii i jest całkiem oczywiste, co robi.
Scott Whitlock,

@Scott - Jestem zdecydowanym zwolennikiem, aby kod sam się dokumentował i że należy unikać komentarzy wewnętrznych, ale ich wyraźne zabranianie to przesada.
Jason Baker

@Jason - Zgadzam się z tobą, ale po prostu nie zgadzam się z ideą, że bez wbudowanych komentarzy jest to „rząd wielkości gorszy”.
Scott Whitlock,

@ Scott: Dostajesz wiele komentarzy, takich jak „powodem, dla którego przeprowadzamy dziwne sprawdzenie zerowe w linii 37 jest ...”, a następnie musisz przesunąć oczy między kodem a komentarzami. Znacznie łatwiej byłoby po prostu mieć ten komentarz powyżej linii 37.
Xodarap

2

Unikam komentowania kodu i działa.

Unikam wszystko w-inline kodu (lub strumienia) Komentarze na korzyść bloku dokumentacyjnym + znaczące varables + programowania spartan , i to działa.

I tak, wiem, że docblocks są technicznie komentarzami, ale w rzeczywistości uzupełniają kod, nie są nachalne i „znormalizowane” ... wszystko, co nie jest zwykłym komentarzem.

To, co myślę, może działać jako substytut komentarzy: znormalizowany język / składnia / idiom docblock, coś w rodzaju adnotacji w java.


„ustandaryzowany język / składnia / idiom docblocka”: czy nie doxygenzadziałałoby to? en.wikipedia.org/wiki/Doxygen
sleske 11.01.11

Doxygen to narzędzie do dokumentacji, podobnie jak phpdocumentor i rzecz, która generuje dokumentację Java z javadoc (homonim?). Mam na myśli to, że język / składnia / idiomy były częścią samego języka programowania, a nie komentarzem, który należy przeanalizować dla tagów / właściwości.
dukeofgaming,

4
Unikasz komentarzy, nazywając je czymś innym.
Nate CK

2

Nie tylko nie wpłynęłoby to na jakość - jak zauważyli inni, byłoby to naprawdę denerwujące.

Jestem pewien, że większość z nas od czasu do czasu robi coś takiego:

foreach ( myObject obj in SomeList )
 {
    Debug.Writeline( obj.Name );
//  for some reason this isn't working
//  obj.SetArielPotency( setting );
//  obj.DoSomeProcess();       
 }

Jakie to irytujące, gdybyś nie mógł skomentować kilku wierszy kodu, aby dowiedzieć się, skąd pochodzi ten błąd?

Niezależnie od komentarzy na temat działania kodu, proste praktyczne rzeczy tego typu lub umieszczenie wygodnej TODOnotatki to rzeczy, które ułatwiają naprawianie drobnych problemów i pamiętają, co robiliśmy, kiedy zaczęliśmy pisać kod.


1

Komentarze są jak podsumowanie książki. Jasne, wszystko możesz zrozumieć, czytając kod, ale dlaczego, do licha, chcesz przeczytać całą stronę, skoro można ją streścić w jednym komentarzem?


3
Jeśli możesz podsumować to w jednym wierszu, możesz nazwać funkcję lub metodę wystarczająco opisowo, aby wyjaśnić, co ona robi.
Scott Whitlock,

1

Chociaż zgadzam się z innymi odpowiedziami, że nawet samodokumentujący się kod wymaga komentarzy, ma to znaczenie tylko dla prądu języków.

Myślę, że prawdziwe pytanie brzmi: „Czy można zaprojektować nowy język programowania, który nie wymaga komentarzy?” Musiałby to być dość wysoki poziom z dużą ilością abstrakcji. Każda instrukcja i funkcja będzie musiała być czytelna dzięki składni języka.


1
Program czytania i pisania oferuje język, który nie wymaga komentarzy. Piszesz swój dokument, który zawiera wszystkie niezbędne wyjaśnienia, wsparcie, dowód, zamiar, kompromisy, kludges itp., A także kod. Ponieważ kod nie jest przeznaczony do samodzielnego działania, działa dobrze.
S.Lott,

@DisgrunteldGoat: zapomnij o tym. Musiałbyś zacząć od określonego języka, a ja mówię tylko 5. Wszystkie pozostałe języki byłbym tak zagubiony, jak w języku niderlandzkim.
Joris Meys

Do drugiego akapitu: oczywiście możesz. Weź wszystkie obecne języki, które oferują obsługę komentarzy, i usuń obsługę komentarzy. Gdyby te języki wymagały komentarzy, byłyby w skompilowanym kodzie lub tłumacz zrobiłby coś innego niż je zignorował.
Kit

1

Niezdyscyplinowani programiści napiszą zły kod, bez względu na język.

Zaintrygowanie tego Pythona, który jest zwyczajowo prywatny (przedrostek _), nie czyni żadnego wysiłku, aby go pilnować, i wciąż powstaje wiele dobrych kodów.

Rant: Czasami myślę, że bardziej liberalne języki zmusiłyby więcej ludzi do nauki prawidłowego kodowania, a nie odwrotnie (tj. Jedyny sposób Javy i niech cię diabli, jeśli chcesz myśleć o funkcjach jako obiektach pierwszej klasy).


1

Zgaduję: prawdopodobnie nie. Dlaczego? Ponieważ musiałbyś zakodować „dlaczego” jako formalizm w języku, a ponieważ „dlaczego”, niezależnie od tego, czy kodowane w języku, czy w komentarzach w języku jest i tak niedostatecznie wykorzystywane przez programistów.


1

Kod może z pewnością komentować się w tłumaczeniu tego, co robi, ale to nie zawsze jest możliwe do kodu, aby wyjaśnić , dlaczego to robi. To tam najbardziej potrzebne są komentarze.

Jeśli na przykład sekcja kodu jest potrzebna do spełnienia określonego przepisu, jak to wyjaśnić bez komentarza? Jeśli algorytm zastosowany w danym fragmencie kodu jest opisany w artykule napisanym w 1998 r. Przez M. Matsumoto i T. Nishimurę, jak to wyjaśnić bez komentarza? Jeśli algorytm nie zapewnia optymalnej funkcjonalności, ale zawiera bardzo konkretny, uzasadniony kompromis, który może powodować przyszłe problemy, jeśli zmieni się inny kod, jak to wyjaśnić bez komentarza?

Co się stanie, jeśli jedna sekcja kodu została poddana audytowi przez niezależnego audytora, więc nie można go zmodyfikować bez unieważnienia tego audytu, a kod służy do zbudowania produktu, którego zgodność jest wymagana przez klientów. Jak to wskazać bez komentarza?


0

Zawsze myślałem, że fajnie byłoby mieć komentarz składający się z jednego słowa, aby słowo poprzedzone symbolem (powiedzmy dwukropek) było ignorowane. W ten sposób mogłeś powiedzieć seplenienie, że pozwala ono na komentowanie tylko jednego słowa wewnątrz wyrażenia s. Na przykład możesz to zmienić:

(if (= x y)
    x
    y)

...zaangażowany w to:

(if (= x y)
    :then x
    :else y)

Jeśli jest to absolutnie konieczne, możesz połączyć wiele komentarzy składających się z jednego słowa, aby utworzyć komentarz wbudowany:

(if x :Remember, :x :could :be :nil!
    ...)

Oczywiście, pisanie na nim jest trudne. W rzeczywistości o to chodzi. Zachęca cię do oszczędnego korzystania z wbudowanych komentarzy i ich zwięzłego i konkretnego tematu. Mam jednak wrażenie, że trudno mi było przekonać kogokolwiek do używania tego języka.


Utrudnia to również czytanie, co eliminuje użycie komentarzy w celu zwiększenia czytelności kodu.
Nate CK,

0

To jest podwójne lub nic. Niektórzy programiści nie robią nic, aby kod był czytelny. Niedopuszczenie komentarzy wzmocni to. Niektórzy programiści piszą dobre komentarze, nawet jeśli byłyby jeszcze lepsze, gdyby refaktoryzowały kod zamiast komentarzy - usunięcie komentarzy może zmusić ich do lepszego refaktoryzacji.

Powody, dla których jest to dobry pomysł: - Brak

Powody, dla których jest to zły pomysł: - Jest o wiele więcej okropnych programistów niż dobrych, ale nie świetnych programistów - Prawie zawsze powinno być trochę komentarze do dziwnych błędów, podsumowań itp. - Nawet jeśli unikniesz komentarzy, prawdopodobnie użyjesz komentarze jako etap po drodze: dodaj komentarz, gdy coś piszesz, a następnie wróć i popraw to. Ale nie zawsze możesz to zrobić od razu, ponieważ wciąż się uczysz. - To zachęci ludzi do pracy wokół niego - Kto by z niego korzystał? Ludzie, którzy piszą nieczytelny kod i chcą usprawiedliwienia (zła) oraz ludzie, którzy są już zakochani w tym pomyśle (którzy na początku mogą po prostu „nie pisać komentarzy”). Jeśli tego właśnie chcesz, po prostu napisz standard kodowania pokazujący, jak chcesz, aby ludzie to robili.

Powody, dla których może to być istotne - tam, gdzie może to być przydatne, jest część systemu, aby ulepszyć „nie komentowanie”, np. język lub IDE, które ma dobre wsparcie dla czegoś lepszego niż-komentarze i jako część swojego skoku unika komentarzy. Nie wiem, jak by to działało, ale warto o tym przynajmniej pomyśleć.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.