Dim,Local, 2D Array,... unwichtig?

  • Hallo,

    ich komme hier mit dem Lernen nicht ganz weiter, ich versuche schon seit Längerem zu verstehen, wofür ich Dim, Local und 2D Arrays brauche.

    In der Hilfe habe ich es mir natürlich durchgelesen. Hier mal meine Fragen :

    Dim und Konstante :

    1. Wenn ich etwas mit Dim deklariere, sind die Werte nicht mehr veränderbar oder sind sie erst dann nicht mehr veränderbar, wenn ich danach Const dahinschreibe bzw. wo ist der Unterschied, ob ich nun > Dim Const $..oder Dim $... benutze?

    2. Was soll ich denn damit? Was nützt es mir , wenn die Werte nicht mehr veränderbar sind? Wenn es darum geht, mehrere Variablen auf einmal zu deklarieren, kann ich ja auch gleich Global benutzen?

    Local :

    Wofür brauche ich das denn? Was bringt es mir, wenn ich etwas nur in einer Funktion deklarier bzw. veränder?

    2D Array :

    Nur dafür da, damit es übersichtlicher ist? Ansonsten reichen 1 D Array vollommen aus, also 2D Arrays auch unwichtig?

    Wäre nett, wenn ihr mir die Fragen beantworten könntet.

    Mit freundlichen Grüßen,

    Julien

  • 2d arrays kann man benutzen um bilder drinn zu speichern und sie vereinfachen vieles

  • 2d arrays kann man benutzen um bilder drinn zu speichern und sie vereinfachen vieles

    Seit wann werden Bilder in einem 2D Array gespeichert? Normalerweise können dort nur Werte zugewiesen werden, quasi Texte.

    Was vereinfachern sie denn? Ob ich nun

    $Button[0][1] = ...
    $Button[0][2] = ...
    $Button[0][3] = ...

    oder

    $NormalButton[1] ...
    $HoverButton[2] = ...
    $PressButton[3] = ....

    oder z.B. :

    $Eigenschaft[1][1] = 123 ; Größe in Bytes
    $Eigenschaft[2][1] = 2000 ; Anzahl der Zeichen

    oder

    $Bytes[1] = 123
    $Zeichen[1] = 2000

    nehme?

    nehme, gibt es doch keinen Unterschied?

  • Nach meinem besten Wissen, kann mich auch irren:

    Local: So sauber programmiere ich nich, benutze es daher fast nie. Würde ich aber beispielsweise dann nutzen, wenn ich vorher eine Global-Variable deklariert und initialisiert habe, und nun in einer Funktion denselben Variablen-Namen verwenden möchte, die Global-Variable aber nicht neu initialisiert werden soll, sondern es sich explizit um eine neue lokale Funktions-Variable handeln soll. Das ist vor allem wichtig bei fremden Udf's - meine ich.

    2D-Array: Du kannst beispielsweise in der ersten Spalte zeilenweise Namen von Dateien speichern, in der zweiten Spalte dann Größe, und in den weiteren Spalten andere Eigenschaften. Benutze ich oft, sinnvoll, wenn man es braucht.

    Edit: Man kann mit eindimensionalen Arrays natürlich genauso arbeiten, wie mit zweidimensionalen Array, nur halt wesentlich umständlicher. Sind aber letztendlich ja auch nur Variablen ;)

    2 Mal editiert, zuletzt von AndyTR (2. März 2012 um 16:55)

  • Weil du in ein 2D Array mehr sachen reinpacken kannst
    $aArray[0][0] = 1
    $aArray[0][1] = 2
    $aArray[0][2] = 3
    $aArray[1][0] = 4
    $aArray[1][1] = 5
    $aArray[1][2] = 6
    $aArray[2][0] = 7
    $aArray[2][1] = 8
    $aArray[2][2] = 9

    Bilder speichert man so:
    $aImg[0][0] = 0xFFFF0000
    $aImg[0][2] = 0xFFFF0000
    $aImg[0][3] = 0xFFFF0000
    $aImg[0][4] = 0xFFF00000
    Also man benutzt die Dimensionen als Koordinaten...

  • Dim, Global, Local geben den Definitionsbereich einer Variable an. Const ist was völlig anderes und hat damit nichts zu tun. Const gibt lediglich an ob eine Variable verändert werden darf. Zusätzlich gibts dann noch Static als Keyword.
    Bei kleinen Projekten mag das alles egal sein. Erst bei größeren Projekten und entsprechender Modularisierung wird es ohne vernünftigen Einsatz von Global/Local irgendwann zu Namenskonflikten kommen. Const dient vor allem dazu das für eine Codeteil die Garantie besteht das die genutzte Konstante immer den selben Wert hat und nicht durch andere Codeteile verändert werden kann.
    Auch zur effektiven Speichernutzung (Lokale Variablen bleiben nur für die Dauer der Ausführung einer Funktion im Speicher) sollten sie eingesetzt werden.

    Außerhalb von Funktionen ist es prinzipiell egal ob man die Variablen als Dim, Global oder Local definiert - sie sind immer Global.
    Nur in Funktionen unterscheiden sie sich. Dim macht nur in Spezialfällen Sinn. Man sollte sich also auf Global und Local beschränken. Wenn eine Variable nur in einer Funktion gebraucht wird dann soll sie auch local definiert werden.

    Zum Thema 2D-Arrays: Nur weil du bisher noch keine Verwendung dafür hattest heißt das nicht das ein 2D-Array keinen Sinn hat...

  • Dim, Global, Local geben den Definitionsbereich einer Variable an. Const ist was völlig anderes und hat damit nichts zu tun. Const gibt lediglich an ob eine Variable verändert werden darf. Zusätzlich gibts dann noch Static als Keyword.
    Bei kleinen Projekten mag das alles egal sein. Erst bei größeren Projekten und entsprechender Modularisierung wird es ohne vernünftigen Einsatz von Global/Local irgendwann zu Namenskonflikten kommen. Const dient vor allem dazu das für eine Codeteil die Garantie besteht das die genutzte Konstante immer den selben Wert hat und nicht durch andere Codeteile verändert werden kann.
    Auch zur effektiven Speichernutzung (Lokale Variablen bleiben nur für die Dauer der Ausführung einer Funktion im Speicher) sollten sie eingesetzt werden.

    Außerhalb von Funktionen ist es prinzipiell egal ob man die Variablen als Dim, Global oder Local definiert - sie sind immer Global.
    Nur in Funktionen unterscheiden sie sich. Dim macht nur in Spezialfällen Sinn. Man sollte sich also auf Global und Local beschränken. Wenn eine Variable nur in einer Funktion gebraucht wird dann soll sie auch local definiert werden.
    Zum Thema 2D-Arrays: Nur weil du bisher noch keine Verwendung dafür hattest heißt das nicht das ein 2D-Array keinen Sinn hat...

    Erstmal danke für die Antworten, aber wofür brauche ich denn 2D Arrays? Eigentlich kann ich ja auch ohne sie arbeiten.

    Wofür muss ich eigentlich etwas Global deklarieren? Eigentlich ja nur, damit man damit ich Zeilen spare oder wieso?

    Wenn ich nun $i deklariere , ist sie doch auch global ?

    Wo ist denn der Unterschied, ob ich hier z.B. das :

    Spoiler anzeigen
    [autoit]

    Global $i

    [/autoit] [autoit][/autoit] [autoit]

    _Msg()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Msg()
    MsgBox(64,"Test",$i)
    EndFunc

    [/autoit]

    oder

    Spoiler anzeigen
    [autoit]

    $i = ""

    [/autoit] [autoit][/autoit] [autoit]

    _Msg()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Msg()
    MsgBox(64,"Test",$i)
    EndFunc

    [/autoit]

    nehme?

  • wofür brauche ich denn 2D Arrays? Eigentlich kann ich ja auch ohne sie arbeiten.

    Smincke hat doch ein schönes Beispiel mit den Bildern gebracht.
    Ein Bild mit 100x100 Pixel soll in ein Array gepackt werden wo in jedem Element der Farbwert des Pixels steht. Wie willst du das denn mit deinem Ansatz hinbekommen?
    Willst du schreiben: $BildZeile1[100], $BildZeile2[100].... ?
    Vor allem wenn du vorher nicht weißt wie breit das Bild ist.
    Oder nimm eine Excel-Tabelle von der du vorher nicht weißt wieviele Spalten dort drin stehen.
    Wie willst du das mit deinem Ansatz machen?


    Wofür muss ich eigentlich etwas Global deklarieren? Eigentlich ja nur, damit man damit ich Zeilen spare oder wieso?

    Ich sagte ja: Außerhalb von Funktionen ist das egal.
    Erst innerhalb von Funktionen unterscheiden sie sich. Außerhalb macht man es um einen übersichtlicheren Programmierstil zu pflegen bei dem man gleich weiß wie eine Variable eingesetzt werden soll. Und um sicher zu gehen das man damit nicht eine schon vorhandene Variable überschreibt. Würde man das global weglassen wäre es das selbe als würde man Dim ... schreiben. Dann wird einfach eine bestehende Variable ohne Fehlermeldung überschrieben - das ist selten im Sinne des Programmierers.

    Zu deiner Frage wo der Unterschied liegt: Im 2. Beispiel wird die Variable, da du nichts anderes angegeben hast per Dim deklariert.
    Das heißt die Variable wird local für diesen Bereich wenn keine Globale Variable mit selben Namen existiert.
    Falls eine globale Variable mit selben Namen existiert wird keine neue Variable erstellt sondern diese bereits bestehende verwendet.
    In deinem Beispiel ändert das aber nichts da der Bereich in dem die Variable definiert wird eh der globale ist.
    Falls du nicht vorher eine globale Variable mit dem Namen $i angelegt hast ist das Ergebnis der beiden Beispiele das gleiche.
    Du kannst auch Local $i schreiben. Da du nicht innerhalb einer Funktion deklarierst wird auch diese Variable eine globale werden.

  • Aus der Hilfe:

    Der Unterschied zwischen Dim, Local und Global ist der Gültigkeitsbereich, für den die Variablen deklariert werden:
    Dim = Wenn der Variablename nicht schon mit globalem Gültigleitsbereich existiert, hat die definierte Variable einen lokalen Gültigkeitsbereich (falls die Variable schon global existiert, so wird die globale Variable verwendet.)
    Global = Erzwingt globale Gültigkeit der Variablen
    Local = Erzwingt lokale Gültigkeit der Variablen, bzw. innerhalb der Funktion

    Man sollte Local oder Global anstelle von Dim verwenden, um explizit den Gültigkeitsbereich für die Variable / Konstante / Array festzulegen.

    ;)