Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Programm richtig kommentieren

  Alt 8. Okt 2006, 22:02
Also, wen es darum geht ein Programm richtig zu kommentieren, dann wird es schwer, weil jeder Programmierer einen eigenen Stil hat. Sollte es prüfungrelevant sein, dann habt ihr das betsimmt durchgesprochen. Guck also in deine Unterlagen.

Ich kommentiere immer so wenig wie möglich, so viel wie nötig. Und das:
Delphi-Quellcode:
//x incrementieren
x := x + 1;
würde ich nicht kommentieren. Wozu? Was bringt e, Leser der Kommentar an zusätzlichen Informationen? Nichts. Man sollte nicht kommentieren wa sman macht, das sehe ich selber am Code, sondern warum man etwas macht. Aktuelles Beispiel aus meinen String-DLL Artikel:
Delphi-Quellcode:
(******************************************************************************
*                                                                            *
*  DLLProg                                                                  *
*  Demo-Programm Strings und DLLs                                            *
*                                                                            *
*  Copyright (c) 2006 Michael Puff  [url]http://www.michael-puff.de[/url]              *
*                                                                            *
******************************************************************************)


program DLLProg;

{$APPTYPE CONSOLE}

uses
  windows;

type
  Tfunc1 = function(s: PChar; Buffer: PChar; lenBuffer: Integer): Integer; stdcall;

var
  hLib: THandle;
  s: String;
  func1: Tfunc1;
  len: Integer;
  Buffer: PChar;
begin
  Buffer := nil;
  hLib := LoadLibrary('StringDLL.dll');
  if hLib = 0 then
  begin
    Str(GetLastError, s);
    Writeln(s);
    readln;
    exit;
  end;
  Str(hLib, s);
  Writeln('hlib: ' + s);
  @func1 := GetProcAddress(hLib, 'func1');
  if (not Assigned(func1)) then
  begin
    Str(GetLastError, s);
    Writeln(s);
    readln;
    exit;
  end;
  Str(Integer(@func1), s);
  Writeln('@func1: ' + s);
  // Funktion aufrufen, um Größe des Buffers zu ermitteln
  len := func1('bar', nil, 0);
  Str(len, s);
  Writeln('len: ' + s);
  try
    // Speicher anfordern
    GetMem(Buffer, len + 1);
    // Funktion mit Buffer aufrufen
    len := func1('bar', Buffer, len + 1);
    Str(len, s);
    writeln(String(Buffer)+ ' [' + s + ']');
  finally
    // Speicher wieder freigeben
    FreeMem(Buffer);
  end;
  readln;
end.
48, 55
Der ertse Teil bis zeile 47 ist gänzlich unkommentiert, weil man da sieht, was passiert: DLL laden (LoadLibrary) Funktionsadresse holen (GetProcaddress) mit Fehlerbehandlung. Interessant ist der Funktionsaufruf in Zeile 49. Der Kommentar in Zeile 48 sagt warum ich dort diese Funktion aufrufe. Aus der Dokumentation würde hervorgehen, dass der Funktion im zweiten Parameter ein Buffer übergeben wird, in dem das Ergebnis landet. Und im Kommentar erkläre ich warum ich die Funktion erstmal mit nil aufrufe. Damit wird dann auch der Rest des Codes klar.
Die Kommentar in Zeile 55 und 60 sind eigentlich auch überflüssig, weil man an den Funktionen sieht, was da passiert. Sind aber dort drinne, weil sich der Code an jemanden richtet, der diese Vorgehensweise nicht kannte und somit sollte dort deutlich werden was da passiert. Diese Kommentare sind also quasi nur eine Hervorhebung. Der Kommentar in Zeile 60 ist dann wieder im Zuammenhang mit den Kommentar in Zeile 48 zu sehen. Mit diesen zwei Kommentaren wird deutlich, was in diesem Block passiert und wichtiger, warum es so passiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat