Kleine Tipps für Zwischendurch: Warum beim Vergleich $null links stehen sollte

Wer mit Visual Studio Code scriptet oder öfter den PSScriptAnalyzer verwendet, was immer eine gute Idee ist, wird sich schon öfter über folgende Warnung gewundert haben:

$null should be on the left side of equality comparisons. (PSPossibleIncorrectComparisonWithNull)

Warum sollte es eine Rolle spielen, ob $null links oder rechts vom -eq Operator steht? In praktisch jeder Programmiersprache, spielt dies keine Rolle. Nun, PowerShell ist einigen Kleinigkeiten etwas anders („seltsam“ wäre als Umschreibung wohl etwas zu subjektiv;).

Hier ist ein kleines Beispiel.

Im ersten Schritt lege ich ein leeres Array an.

Die Variable $Zahlen ist eigentlich leer, daher sollte die folgende Abfrage einen $true-Wert liefern.

Es kommt aber weder $true noch $false heraus, es kommt gar nichts heraus. Was zunächst sehr seltsam erscheint (warum liefert ein Vergleich kein Ergebnis?), ergibt einen Sinn, wenn man das Prinzip des Vergleichs kennt. Da das Array leer ist, wird kein Vergleich durchgeführt. Also kein Ergebnis. Der Vergleich wird also nicht mit der Variablen $Zahlen durchgeführt, sondern mit allen Elementen des Arrays. Und da das Array kein Element enthält, wird kein Vergleich durchgeführt. Und damit resultiert kein Ergebnis. Was am Anfang eventuell noch als etwas seltsam erschien, ergibt jetzt einen Sinn. So sollte es sein.

Möchte man die Variable $Zahlen richtig vergleichen, muss $null auf der linken Seite stehen:

Jetzt wird das Array als Ganzes verglichen. Der Vergleich führt zu einem $false, da die Variable mit einem leeren Array einen Wert besitzt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.