Grundlagen 1/10
Hintergrundwissen / Design und Tehnik
Worum geht's diesmal?
Das hört sich dch etwas seltsam an. Man hat schon einige Kapitel gelesen und erst jetzt kommen die Grundlagen? Dieses Kapitel beschreibt zwar Grundlagen, die aber scheinbar nicht allen Bewusst sind. Sie werden ständig verwendet und trotzdem scheinen viele gar nicht zu wissen was Sie wirklich machen.
'IF'
Viele sind sich nicht bewusst, was 'IF' überhaupt macht. Es Test, ob der Ausdruck ungleich Null ist. 'IF x <> 0 THEN' ist folglich equivalent zu 'IF x THEN'. Und da QB nicht sonderlich schlau ist macht das sogar einen Geschwindigkeitsunterschied. Das Beispiel ist ja quasi der Wink mit dem Zaunpfahl. Aber man findet öffters Dinge, wie 'IF IsVESA = -1 THEN' (habe ich in der QB Times gefunden, die es leider seit einiger Zeit nicht mehr gibt, in dem Artikel ging es um die Verwendung der Future.Lib. Es war eine Ausgabe, die zu der Zeit erschien, als ie Future.Lib noch neu war). Ein einfaches 'IF IsVESA THEN' tuts auch. ie Funktion liefert '-1', falls die Grafikkarte die VESA-Modi unterstützt, sonst '0'. Die Funktion ist also genau so designed, dass man Sie ohne Vergleich verwenden kann.
Warheit
Allgemein verwendet QB '-1' as wahr und '0' als falsch. '=' gibt beispielsweise '-1' wieder, falls beide Operanden gelich sind, ansonsten '0'. Vergleichbares gilt für die übrigen Vergleichsoperatoren. Durch dieses Wissen können Sie ihr Programm gelegentlich beschleunigen. Aber übertriben Sies nicht. Damit meine ich flgendes: Angenommen eine Zahl soll nicht größer als '319' werden, dann könnten Sie folendes schreiben:
x = x - (x > 319) * (319 - x)
Das ist allerdings langsamer, als die übliche Variante:
IF x > 319 THEN x = 319
selbst wenn er erte Ausdruck schneller als der zweite ist dürfte man ihn auf keinen Fall ohne Komentar stehen lassen, da der Code keinesfalls für sich spricht, wogegen die Aufgabe beim zweiten Codebeispiel eindeutig ist.
Das erste Beispiel ist so kompliiert, das ich es für die noch nicht so frtgeschrittenen mal erklären werden: Wenn 'x' größer als '319' ist gibt der Ausdruck '(x > 319)' '-1' zurück. Also steht dann da 'x = x - -1 * (319 - x)'. '(319 - x)' gibt zurück, um wieviel 'x' zu groß ist. Wenn 'x' also beispielsweise '400' ist ist '319 - 400' gleich '-81'. Das mal dem '-1' von eben giebt '81'. Dann sieht die Gelichung folgendermaßen aus: 'x = 400 - -1 * -81'. '-1 * -81' ist '81' und '400 - 81' ist '319'. Also wird 'x' '319' zugewiesen.
Wenn 'x' aber gar nicht größer '319' ist gibt '(x > 319)' '0' zurück. Beispielsweise bei einem Wert von 50 sieht die Gleichung so aus: 'x = 50 - 0 * (319 - 50)'. Null multipliziert mit einem belibigen Wert gibt Null, also wird 'x' '50' zugewiesen (50 - 0 = 50).
'SHAERD'
Viele Anfänger, aber auch Fortgeschrittene verwenden 'DIM SHARED' viel zu oft.
DIM SHARED foo AS INTEGER
Versuchen Sie stattdessen Parameter zu verwenden oder wenn es nötig ist einfache 'SHARED'-Variablen. Damit diese geteilten Variablen nicht versehentlich von Teilen des Programms verändert werden, die sie gar nicht verändern sollen, sollten Sie möglichst nicht häufig verwendete Namen verwenden.
SUB Prozedur1 () SHARED privatesFoo AS INTEGER END SUB SUB Prozedur2 () SHARED privatesFoo AS INTEGER END SUB
Dadurch schafft man sich wesentlich weniger Abhängigkeiten. Sie sollten darauf achten, dass so wenig Abhängigkeiten, wie möglich entstehen. Somit können Sie Teile anderer Programme wesentlich leichter wieder verwenden.