Sprachelement von Python ist die Einrückung, das ist für für C-, Pascal- oder VB-Programmierer merkwürdig aber erlernbar.
Durch die Verwendung verschiedener Editoren und einen Mix aus Leerzeichen und Tabulatoren können aber lästige Fehler auftreten, die es bei Sprachen mit Blockendezeichen nicht gibt.
Wie kann man eine bestehende Programmiersprache ändern, ohne dabei alles kaputt zu machen? Dazu mein Vorschlag als "Request for Comments", möglich, dass ich / wir die große Python Community überzeugen.
1. Blockendekennzeichen "#"
Das #-Zeichen kennzeichnet eigentlich einen Kommentar, mit einer kleinen Regel könnte daraus ein Blockendekennzeichen werden
[beliebig viele Whitespaces] + # + Zeilenumbruch
oder
[beliebig viele Whitespaces] + # + Leerzeichen + # + Kommentar
oder
[beliebig viele Whitespaces] + # + EOF
Also in Worten: "Ein # schließt einen Block ab, wenn danach kein weiterer Text steht."
und: "Ein #-Blockende kann mit einem weiteren # kommentiert werden."
2. Compilerdirektive "# Ends"
Im Kopf einer Py-Datei muss dem Compiler bekannt gemacht werden, dass dieses Script Blockendekennzeichen nutzt, das "# Ends" könnte so ein Kennzeichen sein.
Vorteile dieser Lösung
Da sich alle Vorschläge innerhalb der Kommentarregel bewegen,
tangiert keiner meiner Vorschläge in irgendeiner Weise bestehenden Python-Code.
Alter und "neuer" Code können mit dem selben Interpreter ausgeführt werden.
Editoren (IDEs) könnten am #-Blockende automatisch richtige Einrückungen generieren und korrigieren und so die Abwärtskompatibilität zum bestehenden Sprachstandard wahren.
Beispiel:
klassisch
Code: Alles auswählen
def fakultaet(x):
if x > 1:
return x * fakultaet(x - 1)
eineWeitereAnweisung
undNochEineAnweisung
else:
return 1
def fakultaet(x):
if x > 1:
return x * fakultaet(x - 1)
eineWeitereAnweisung
undNochEineAnweisung
else:
return 1
# Und schon funktioniert das Programm nicht mehr!
mit #-Ends (und ein wenig Kommentar)
Code: Alles auswählen
def fakultaet(x):
if x > 1:
return x * fakultaet(x - 1)
eineWeitereAnweisung
undNochEineAnweisung
#
else:
return 1
# Dieses '#' wäre kein Blockende, da hinter dem Zeichen noch Text steht
# Ein Blockende wäre hier auch nicht nötig, da der Block nur aus einer Zeile besteht.
# Das if ist in diesem Fall auch ausreichend über "else:" abgeschlossen.
# # Beendet die Fakultätfunktion - Und so sähe ein kommentiertes Blockende-Zeichen aus.