Thread Umgang mit referenzierten Arrays: Schön schreiben No. 2 (8 answers)
Opened by Sven_123 at 2011-09-30 11:50

Sven_123
 2011-10-04 16:30
#152851 #152851
User since
2010-06-01
120 Artikel
BenutzerIn
[default_avatar]
Es kann sein, dass ich nicht verstanden hab, was du mit ner Klasse erreichen willst - falls doch:

Es geht mir in erster Linie darum, dass ich in meinem Programm nach dem Auslesen der Variablen noch einiges mit ihnen rechne und riesige Variablennamen (also die Hash-keys) das dann doch unübersichtlich machen. Zudem sollen Leute, die sich nicht so viel mit Perl selbst beschäftigen wie ich das Programm lesen und auch ändern können. V.a. an den Stellen wo eben gerechnet, oder am Ende was rausgeschrieben wird. Das Einlesen ist ziemlich fix und uninteressant. Deswegen wollte ich auch möglichst die Referenz-auflösenden Pfeile und $$ umgehen.

Da ich aber ab und zu Vergleiche zwischen ausgelesenen Informationen ziehen möchte, oder zumindest gerne die Möglichkeit dazu hab, war mein Plan, optional wirklich alles auslesen zu können und dann in verschiedenen Variablen in nem Hash zu speichern. Dabei werden viele Rechnungen dann aber nur mit einer bestimmten durchgeführt.

Ich wollte zu Beginn, wenn die Parameter eingelesen werden festlegen @grad ist diesmal z.B. der Array, der unter $var{'grad'}{'mode1'} abgelegt ist, dann das ganze Zeug auslesen und dann sehr bequem mit @grad rechnen können, ohne immer ein $var{'grad'}{$mode} schreiben zu müssen.
Was natürlich ginge, wäre, den Array, der in @grad gespeichert sein soll erst nach dem Auslesen festzulegen, aber da ich in dem Programm teilweise öfters ähnliche Dinge ausles, die ich dazwischen schon brauch, würde das definieren der Variablen ziemlich verstreut im Code passieren, und nicht schön geordnet an einer Stelle...

Als Auswege die mir einfallen bleiben entweder, 1. im Vorfeld eine Referenz auf die noch nicht befüllte Arrayreferenz $grad = \$var{'grad'}{'mode1'}, mit dem Nachteil, dass ich Elemente dann mit $$grad->[...] dereferenzieren muss, dem Vorteil, dass ich beim Auslesen keine Rücksicht nehmen muss, 2. alle Elemente zu initialisieren(?) $var{'grad'}{'mode1'} = [[],[],...] und dann den Array zu übernehmen @grad = @{$var{'grad'}{'mode1'}}, was aber den Nachteil hat, dass ich beim Befüllen von dem Hash arg aufpassen muss, die Referenzen an sich unangetastet zu lassen und 3. ein Mittelding, wie es pq in ihrer Antwort beschrieben hat.

Eine eigene Klasse für den Gradienten, z.B. würde, so wie ich es mir vorstell, ja nur eine Schnittstelle für das Befüllen und z.B. Referenz zurückgeben darstellen, bzw. die Routinen dafür auslagern, aber keine der drei Möglichkeiten grundlegend ändern oder?

(Und ja - das Programmieren macht Spaß, das hier ist deswegen auch weniger ein "ich weiß gar nicht, wie ich es machen soll", als ein, "wie mach ich es besonders ausgeklügelt", weshalb ich so genau nachhak und mich nicht mit "so funktioniert's"-Lösungen zufrieden geb. Freu mich trotzdem drüber, um andere Sichtweisen zu bekommen... ;))

View full thread Umgang mit referenzierten Arrays: Schön schreiben No. 2