code style die 8'te

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
maxwell
User
Beiträge: 69
Registriert: Samstag 11. Juli 2009, 15:36
Wohnort: am Fernsehturm in B.

hallo freunde,

nachdem ich mich nun knapp 3 monate mit python beschäftige kann ich
von mir sagen, dass mir die sprache sehr gefällt. einfach sauber, übersichtlich und konsequent.

aber moment mal, konsequent? in welcher hinsicht? was zumindest die syntax als auch die gliederung betrifft auf alle fälle. aber der coding style! oh mein gott. aus pep 8 geht hervor, dass klassenbezeichnungen CamelCase bzw. CapCase sein sollen. variablen als auch methoden namen im kontext jedoch mit unterstrichen zu trennen sind. bei einer prozeduralen sprache ok, aber bei einer objekt-orientierten? weiter ist in pep8 nahegelegt, dass wenn schon mixedCase benutzt wird dieser stiel - wegen Rückwärtskompatibilität - auch weitergeführt werden soll. aber moment mal? was soll nun mixedCase hier? erst CamelCase für klassen dann lower_case_with_underscores für methoden und variablen. bzw. UPPER_CASE_WITH_UNDERSCORES für "konstanten" - was ja sinnvoll ist - und jetzt mixedCase. das verwirrt mich etwas. kann man sich hier nicht für eines entscheiden? auch viele module werden immer wieder umbenannt. man muss teilweise importe per try - except abfangen um rückwärtskompatibilität zu gewährleisten. das finde ich nicht so gut.

und überhaupt ist denn bspw.:
isQueueFree()
von:
is_queue_free()
so viel besser zu unterscheiden? auch bei größeren quelltexten denke ich nicht. aber das liegt immer im auge des betrachters und ich habe mich auch deshalb für den mixedCase entschieden.

schlussendlich muss ich sagen, dass ich in python noch eine weile weiter programmieren werde. es macht einfach spaß und das beste ist, ich schreibe nicht mehr soviel code.

viele grüße,

chris
be or not to be
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nein das mit Rueckwaertskompatabilitaet mixedCase ist anders zu verstehen.

Arbeitest du beispielsweise mit PyQt haben alle diese Methoden mixedCase. PEP8 schlaegt deshalb vor den Stil zu uebernehmen, um es einheitlich zu machen.

Und natuerlich ist das nur eine Empfehlung (wenn auch eine gute).

Das Methoden und Funktionen gleich geschrieben werden haengt ganz einfach damit zusammen, dass sie semantisch nichts anderes sind. Mit der Ausnahme, dass die Funktionsobjekte bei der Erzeugung von Klassenexemplaren zu Methodenobjekte umgewandelt werden, d.h. das erste Argument wird mit dem Exemplar bestueckt.
Auch lassen sich die Methoden der Klasse zur Laufzeit mit Funktionen erweitern. Deshalb ist die Empfehlung IMHO sehr gut. Mit den Paradigmen hat der Stil gar nichts zu tun und der Code wird auch nicht objektorientierter, wenn man ihn in mixedCase schreibt (auch wenn das scheinbar viele glauben).
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

cofi hat geschrieben:Nein das mit Rueckwaertskompatabilitaet mixedCase ist anders zu verstehen.

Arbeitest du beispielsweise mit PyQt haben alle diese Methoden mixedCase. PEP8 schlaegt deshalb vor den Stil zu uebernehmen, um es einheitlich zu machen.

Und natuerlich ist das nur eine Empfehlung (wenn auch eine gute).
Und was tut man, wenn man sowohl PyQt als auch PEP8-konforme Module importiert? Also ich würde mich einfach immer an PEP8 halten. Das ist aber sicher Geschmackssache.
BlackJack

@maxwell: Was hat denn mixedCase oder bezeichner_mit_unterstrichen mit prozedural oder objektorientiert zu tun?

Wenn ein Modul schon mixedCase verwendet, dann sollte man nicht Namen mit Unterstrichen in diesem Modul hinzufügen, sondern weiter -- konsequent! -- mixedCase verwenden. Oder würdest Du jetzt dafür plädieren Objekte mit alten mixedCase und neuen "unterstrich_getrennten" Attributen *gleichzeitig* zu haben!? Vor PEP8 gab es halt beides, nach PEP8 sollten neue Module kein mixedCase mehr verwenden.

Von welchen Modulen, die dauernd umbenannt werden, sprichst Du bitte?

@snafu: Man wird ja neben Qt nicht ein zweites GUI-Toolkit importieren und da man GUI-Code von Programmlogik trennen sollte, sehe ich da kein grosses Problem in eigenem GUI-Code Qt's mixedCase zu verwenden und sich in der Programmlogik an PEP8 zu halten.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Bei Python und Ruby hat sich die Community mehrheitlich für `ich_nutze_unterstriche` statt `ichNutzeUnterstriche` wie bei Java oder Smalltalk (oder gar `IchNutzeUnterstriche` wie bei C#) entschieden. Während Ruby das relativ konsequent auch in der Standardbibliothek durchzieht, sind bei Python viele, gerade ältere Module, eher im Kraut-und-Rübenstil denn gemäß den Vorschlägen aus PEP8 formatiert. Dumm, aber nicht zu ändern.

Mich stört z.B. gewaltig, dass unittest die Java-Konventionen benutzt, wahrscheinlich weil JUnit portiert wurde (welches wieder von Smalltalks SUnit abstammt) ohne das man das an Python angepasst hat.

Stefan
Antworten