====== 04 - Kommentare und Dokumentation ======
//Zur Dokumentation des Sourcecodes verwenden wir Docstring. Dadurch ersparen wir uns eine separate Beschreibung der Klassen und Methoden in einem Textdokument.//
===== Klassen =====
//Der Docstring einer Klasse ist die Visitenkarte einer Klasse. Er informiert den Programmierer über Aufgabe und Version dieser Klasse.//
|{{:howto:codingstandards:zwingend.png?30|}}| Jede Klasse hat Beschreibung als Docstring. Dieser enthält mindestens die Angaben zu: |
| ::: | * Kurzbeschreibung |
| ::: | * Attribute |
| ::: | * Methoden (ausser Standard-Getter, -Setter, -Deleter) |
=== Beispiel ===
class Category:
"""
the category to which a project is assigned
Attributes
----------
category_id : int
unique key for a category
title : str
the title of a category
Methods
-------
compare(self, other):
compares the title of this category with another category
"""
===== Funktion =====
Der Docstring liefert alle Angaben über die Aufgabe und Schnittstelle einer Funktion.
|{{:howto:codingstandards:zwingend.png?30|}}| Jede Methode hat einen Docstring mit den Angaben:· Kurzbeschreibung· Beschreibung der Parameter (falls vorhanden)· Beschreibung des Returnwerts (falls vorhanden)· Beschreibung der Exceptions (falls vorhanden) |
=== Beispiel ===
def load_project(project_id, category)
"""
loads a project from the database
:param project_id (int): the unique id of a project
:param category (str): the category title to be searched
:return: result_code(str): a resultcode (SUCCESS, NOT FOUND, ERROR)
"""
===== Kommentare =====
Kommentare sind wie das Salz in der Suppe: Zuwenig und es schmeckt nicht, zu viel und es ist ungeniessbar.
|{{:howto:codingstandards:zwingend.png?30|}}| Jeder Programmblock, dessen Aufgabe nicht offensichtlich ist, wird in einem Kommentar beschrieben. |
|{{:howto:codingstandards:empfehlung.png?30|}}| Ein kurzer Blockkommentar ist oftmals sinnvoller als Zeilenkommentare, die über den Bildschirm hinausreichen. |
=== Beispiel: Blockkommentar ===
# create a new connector, if not exists
# and establish connection if needed
if self._connector == None:
self._connector = Connector
if self._connector.get_handle == None:
self._connector.connect
=== Beispiel: Zeilenkommentar ===
Kurze Kommentare können auch hinter den Befehl geschrieben werden.
self._school_class = None # this reference follows later in time
self._name = name
self._report = report # immediately establish the two-way relationship here
report.set_student(self)