Perl initialisiert automatisch Variablen standardmäßig auf undef
.
Gibt es eine Möglichkeit, dieses Standardverhalten zu überschreiben und dem Perl-Interpreter mitzuteilen, Variablen auf zero
(oder einen anderen festen Wert) zu initialisieren?
Die Empfehlung in Code Complete ist wichtig für Sprache wie C, denn wenn Sie
haben %Vor% Der Wert von counter
ist, was auch immer passiert, um diesen Speicher zu belegen.
In Perl, wenn Sie eine Variable mit
deklarieren %Vor% Es besteht kein Zweifel, dass der Wert von $counter
undef
nicht irgendein zufälliger Müll ist.
Daher wird die Motivation hinter der Empfehlung, d. h. sicherzustellen, dass alle Variablen mit bekannten Werten beginnen, in Perl automatisch erfüllt, und es ist nicht notwendig, etwas zu tun.
Was Sie mit Zählern tun, ist, sie zu erhöhen oder zu verringern. Das Ergebnis von:
%Vor% ist in Perl gut definiert. $counter
enthält den Wert 1
.
Abschließend möchte ich argumentieren, dass in Perl in den meisten Fällen keine Zähler erforderlich sind und Code, der umfangreiche Zählervariablen verwendet, möglicherweise neu geschrieben werden muss.
Soweit ich weiß, ist dies nicht möglich (und sollte nicht sein, es ist sogar noch gefährlicher als $[
).
Sie können Ihre Variablen wie folgt initialisieren, um die Standardwerte zu reduzieren:
%Vor%oder verschieben Sie die Initialisierung in eine Funktion:
%Vor%oder sogar:
%Vor%Nein. Dies kann zu sehr beängstigenden und schwer entzifferbaren Fehlern führen, daher ist es keine gute Idee, das Verhalten auf diese Weise zu ändern.
In Perl können Sie Variablen zum richtigen Zeitpunkt deklarieren, wenn Sie sie zum ersten Mal benötigen. Daher müssen diese nicht zuerst deklariert werden (mit oder ohne Initialisierung) und dann später verwendet werden. Darüber hinaus arbeiten Operatoren wie ++
mit undefinierten Werten gleich gut wie Null, sodass Sie Zähler gar nicht initialisieren müssen:
Ich kann jedoch einen Stecker für Moose einfügen, indem ich erwähne, dass Sie eine automatische Initialisierung von Attributen in Ihren Moose-Klassen erreichen können :
%Vor%druckt:
string hat einen Wert: Anfangswert
Zahl hat Wert: 0
Haben Sie einen konkreten Grund, dies zu tun, oder ist es einfach "weil Code Complete sagt, ich sollte"?
Wenn der ehemalige, teilen Sie bitte den Grund und wir können richtig diskutieren Möglichkeiten, um Ihr wahres Ziel zu erreichen.
Falls letzteres zutrifft, denken Sie daran, dass Code Complete eine Reihe von Richtlinien für die Programmierung in C und nicht in Perl ist. Perl ist nicht C und hat seine eigenen Stärken und Schwächen, was auch bedeutet, dass es eine andere Reihe von ... hat und ich hasse es, diese Phrase zu verwenden ... Best Practices. Richtlinien, die für eine Sprache geeignet sind, gelten nicht notwendigerweise für die jeweils andere Sprache. "Initialisieren Sie Variablen immer (wenn möglich), wenn Sie sie deklarieren" ist eine gute Übung in C, aber in Perl normalerweise nicht notwendig.
Tags und Links perl initialization variables