Warum ist es eine unsitte Variablem mit Nummern zu erweitern?

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
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Hallo,

In meinen Skript wurde ich ermahnt Variablen nicht mit Zahlen zu erweitern. Dies wäre nicht fein.

Also zum Bleistift:

schalter_1 = 1
schalter_2 = 0
....

Welche Begründung gibt es für diese Ablehnung?
Es ist doch eigentlich Praktisch.
Könnte mir vorstellen, das es noch mehr Neulinge gibt die den selben "Fehler" begehen.
Eine Erklärung hilft immer.

Danke Ralf
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Naja, was ist denn daran praktischer als

Code: Alles auswählen

schalter = [True, False]
Stell mal fest, ob irgend ein Schalter an ist. Egal wie viele Schalter es sind, als Liste ist das immer

Code: Alles auswählen

any(schalter)
. Und bei den nummerierten Variablen?

Also welchen Vorteil genau siehst du gegenüber der Liste?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was ist denn Schalter 1? Und was Schalter 2? Heißen deine Kinder auch Kind 1 und Kind 2? Und wenn das mehr Schalter werden, und der Code umfangreicher, erinnerst du dich an jeder einzelnen Stelle daran, welche Nummer jetzt die richtige ist?

Das ist der eine, gewichtige Grund. Namen helfen beim Verständnis, und vermeiden Fehler. schalter_notaus und schalter_schwimmer zB.

Und dann sind da natürlich noch Mengen an Dingen, bei denen man statt diskreten Variablen eher Datenstrukturen benutzen will. Also zb eine Liste von Schaltern. Weil die alle zusammen etwas bedeuten, zb 8 DIP-Schalter für eine Kodierung zb eines Modus.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Meinst du so?

Code: Alles auswählen

schalter_1 = 1
schalter_2 = 1
schalter_3 = 1
schalter_4 = 0
schalter_5 = 0
schalter_6 = 1
schalter_7 = 1
schalter_8 = 1
schalter_9 = 1
schalter_10 = 0
schalter_11 = 0
schalter_12 = 1
schalter_13 = 1
schalter_14 = 1
schalter_15 = 0
schalter_16 = 0
schalter_17 = 1
schalter_18 = 0
schalter_19 = 1
schalter_20 = 1
schalter_21 = 0
schalter_22 = 0
schalter_23 = 1
schalter_24 = 0
schalter_25 = 1
schalter_26 = 1
schalter_27 = 0
schalter_28 = 1
schalter_29 = 0
schalter_30 = 1
schalter_31 = 0
schalter_32 = 0
schalter_33 = 1
schalter_34 = 0
schalter_35 = 1
schalter_36 = 0
schalter_37 = 1
schalter_38 = 0
schalter_39 = 1
schalter_40 = 0
schalter_41 = 1
schalter_42 = 1
schalter_43 = 1
schalter_44 = 1
schalter_45 = 1
schalter_46 = 1
schalter_47 = 1
schalter_48 = 0
schalter_49 = 0
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Der Grund für die Rückverfolgung im Ablauf ist schon klar.
Benutze immer klare Bezeichnungen, eventuell Datenstrukturen wenn man etwas bündeln will...

Aber eine Auswirkung auf den Ablauf des Programms gibt es keine. Oder?

Wenn man eine Relaiskarte oder gar mehrere steuert und unklar ist, was am Relais 1 - 8 angeschlossen so wird man um eine Nummerierung nicht herum kommen. Denke ich.
Dann ist es eben karte_1_relais_1 ... karte_1_relais_8, karte_2_relais_1 ... karte_2_relais_8.
Etwas anderes würde mir hier jetzt nicht einfallen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wieso ist eine Relais-Karte besonders? Entweder hängen da unterschiedliche Dinge dran, dann kann man die auch benennen. Oder man benutzt eine Liste.

Und du hast recht, dem Computer ist der Name egal. Es geht aber um den Programmierer. Der macht die Fehler, nicht der Computer.
Benutzeravatar
grubenfox
User
Beiträge: 612
Registriert: Freitag 2. Dezember 2022, 15:49

Wobei... die süße "Relais-Katze" :) war das der Mensch mit einem Tippfehler oder diesmal der Computer mit einer wilden Autokorrektur? ;)
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@kiaralle: Wie steuert man etwas mit Relais wenn man gar nicht weiss was da dran hängt? 🤔
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Bei meiner Software für den Lastabwurf im Inselnetz der PV, für angeschlossenen Verbraucher, an eben dieser Relaiskarte.
Der User kann selber entscheiden was er da anschließt. Ich kenne seinen Bedarf nicht.
Somit kann ich im Skript keine Bezeichnungen wie Heizung, Pumpe Garten, Wallbox... verwenden.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann ist es eben eine Liste von Kanaelen. Immer noch kein Grund, etwas durchzunummerieren. Aber ein ernstzunehmendes Skript haette dafuer eine Konfiguration, in der dann wiederum die Kanaele auch benannt werden koenne, damit zB im Logging auch was vernuenftiges steht, wie "Waschmaschine abgeschaltet" statt "Kanal 3 abgeschaltet", wo man schon wieder wissen muss, was das denn genau war.
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Da komme ich jetzt nicht ganz mit.
Das interessiert mich jetzt wirklich. Hänge da irgendwie fest.

Auf der php-Seite kann ich ja über den Status (wird vom python in die status.txt) geschrieben etwas zuordnen. Somit wird auf der Webseite der Status vom Relais angezeigt.
Von der php-Seite aus vergebe ich reale Namen (schreib ich in eine Config) für die einzelnen Relais.

Wie kann ich das jetzt im python-Skript einfügen? Also aus der Config lesen bekomme ich ja hin, kein Problem.
Es bleibt doch bei meiner Nummerierung. Oder nicht? ...Wie ?

Code: Alles auswählen

relais  = [
	[relais_1, "Bezeichnung 1 aus der config.txt "],
	[relais_2, "Bezeichnung 2 aus der config.txt "]
]
Habt ihr eine Stück Code zur Veranschaulichung damit es bei mir klick macht?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Da komme ich jetzt nicht mehr mit.
Was hat denn jetzt PHP damit zu tun?

Es bleibt _nie_ bei einer Nummerierung. Weil das nur Nachteile und keine Vorteile hat.

Wenn du mehrere Relais-Karten hast und die wirklich generisch haben möchtest, dann ist das eine Liste von Karten.
Und die Karten sind mindestens Datenstrukturen der einzelnen Relais oder Objekte, die das entsprechend abbilden.

Aber es sind sicher nicht durchnummerierte Namen.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Relais per for-Schleife in eine Liste, es gibt keine Variable relais_1 oder relais_2, denn dann hättest Du ja den selben Code mehrfach kopiert in der Pythondatei stehen.

Woher kommt jetzt PHP? Eigentlich möchte man nicht mehrere "Programmier"sprachen mischen, wenn man es vermeiden kann.
Config-Dateien speichert man am besten als Json oder YAML aber niemals als Text-Datei.
Antworten