Warum ist es möglich, eine variable zu deklarieren, ohne einen anfänglichen Wert?
Bin ich beim Lesen von Gilles Dowek ist Prinzipien von Programmiersprachen mit einer:
Er sagt, dass es auch möglich eine variable zu deklarieren, ohne dass ein Anfangswert, und auch, dass wir müssen vorsichtig sein, nicht verwenden eine variable, die deklariert wurde, ohne einen anfänglichen Wert, und das hat kein Wert zugewiesen wurde. Dies erzeugt einen Fehler.
Hinweis: Das Buch der Autor erwähnt die Möglichkeit der Deklaration von Variablen ohne Anfangswert auf Java.
Also, warum ist diese Deklaration von Variablen gültig? Wann werde ich es verwenden?
Ich glaube, die Antwort unterscheidet sich von Sprache zu Sprache.
Ja, ist es. Der Autor des Buches erwähnt, dass dieses feature ist gültig in Java, werde ich den Beitrag editieren.
Gute Frage. Ich Frage mich, was der Grund ist?
Ja, ist es. Der Autor des Buches erwähnt, dass dieses feature ist gültig in Java, werde ich den Beitrag editieren.
Gute Frage. Ich Frage mich, was der Grund ist?
InformationsquelleAutor Billy Rubina | 2012-12-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es viele verschiedene Gründe für viele verschiedene Sprachen.
SPEICHER
Wenn Sie eine variable deklarieren, Sie wollen einige Speicher halten die variable. Dies beinhaltet Fragen, die der kernel des Betriebssystems für die Speicher, oder eine Art monitoring-Programm, das verfolgt die Spuren der Erinnerung. Kurz gesagt, ist dies eine teure operation sein kann.Also, in vielen Fällen ist es wünschenswert, weisen Sie den erforderlichen Speicher für das Objekt zur gleichen Zeit, und weisen Sie dann einen beliebigen Wert zugewiesen werden, um es später. Auf diese Weise können Sie erhöhen die Leistung des Programms in den kritischen teilen. Dieser Anwendungsfall ist Häufig genug, dass eine Funktion, die erlaubt Deklaration ohne Initialisierung erlaubt ist. Allerdings, gute Praktiken, die behaupten, dass in allen anderen Fällen sollten Sie initialisieren die Variablen, die beim zuweisen.
Denken Sie an die Zuweisung von Speicher als eine Bürokratie. Es ist zu viel Papier zu arbeiten. Also, wenn Sie wissen, dass Sie gehen, um eine große Menge an Speicher später, Sie bitten, für eine große Menge von Speicher im Voraus in einer einzigen Transaktion, sondern als Fragen der kernel jedes nächste mal.
TEUER INITIALISIERUNG
Dieser Punkt ist sehr ähnlich zu den oben genannten Punkt. Angenommen, Sie haben eine 1 million mal 1 million array. Initialisieren ein solches array ist eine teure Prozedur. Zu tun, also mit den Standardeinstellungen wäre Dummheit, und daher wird eine solche Funktion, wo der Speicher reserviert wird und dann bei Bedarf verwendet.
Hier, wie Sie den Kauf einer großen Menge an lego Steinen zu konstruieren etwas, aber Sie wollen, Sie zu kaufen in Form der Standard-spiderman. Der Ladenbesitzer oder Sie müssten extra hart, um Sie in die Formen von spiderman, wenn du eh gehen, neu zu gestalten Sie später.
InformationsquelleAutor
Beispielsweise könnten Sie so etwas wie dieses:
Ihre Variablen müssen deklariert werden, die außerhalb des
if
für die Sie später verwendet zu werden, aber sein Wert ist fest im inneren desif
Bedingungen.InformationsquelleAutor alestanis
Wenn Sie wirklich zu schauen, was passiert, wenn Sie eine variable deklarieren und initialisieren es (zuweisen eines Anfangswertes), werden Sie sehen, dass unten an der Maschine instruction Niveau-oder byte-code für Java gibt es eine erhebliche Menge an Rechenleistung in beiden dieser Schritte.
Also, wenn Benutzer unwissentlich eine variable verwenden, ohne zuerst geben Sie einen zulässigen Wert für den Typ, dann könnte es ein Fehler sein, wenn der Wert der war es nicht korrekt war.
Also, wenn eine Sprache zwingt Sie dazu, eine variable zu initialisieren (oder tut dies selbst) bei der Deklaration dann es verringert die Chancen für einen Fehler, aber es kann sein, verschwenden Rechenleistung für etwas, was Sie nicht wirklich wollen.
Auf der anderen Seite, wenn Sie es erlaubt, eine variable zu deklarieren ohne es zu initialisieren, es gibt Ihnen die Kontrolle, und eventuell auch das spart etwas Rechenleistung für Sie öffnen aber die Chancen für einen Fehler. (Angenommen, Sie haben ein Szenario, wo Ihr Anfangswert für die Variable hängt davon ab, einige andere Bedingungen, die zu berücksichtigen, und weisen Sie die variable entsprechend. In einem solchen Fall die Initialisierung der var bei der Deklaration werden könnte, einfach vergeuden Rechenleistung).
Sprachen entscheiden, welchen Weg Sie gehen wollen, vor allem davon abhängen, was Sie als Ihre Leistung ist.
wenn es darum, dass der Programmierer die Möglichkeit haben, die Kontrolle und machen hochgradig optimierten Programme sind, dann werden Sie in der Regel erlauben vars deklarieren, ohne zu initialisieren, zusätzlich zu den mehr Zeug.
Aber wenn die Sprache zu zwingen, Programmierer, mehr zu schreiben fehlerfreie Programme, die es dauern würde, den anderen Weg.
InformationsquelleAutor BuddhiP
Wenn Java waren zu verlangen, dass die Felder einer Klasse-Objekt muss immer geschrieben werden, bevor Sie gelesen wurden, würde dies erfordern, dass entweder
Dem Konstruktor ein Objekt der Klasse schreiben muss, um alle Felder des Objekts, einschließlich derjenigen, die die würde der code würde nie Lesen, ohne Sie geschrieben ein zweites mal später auf; dies würde sowohl hässlich und ineffizient.
Jedes Feld muss in der Lage sein zu halten eine
never been written
Wert unterscheidet sich von jedem anderen Wert, der geschrieben werden kann.Würde der compiler haben, das Halteproblem zu lösen, um zu bestimmen, ob ein Feld gelesen werden konnte zimmerreserviereung, ohne das Sie geschrieben wurden.
Die Sprache muss die Möglichkeit akzeptieren, dass ein Feld gelesen werden, ohne dass der Benutzer den code geschrieben haben.
Diese möglichen Entscheidungen, #4 ist das geringste übel. Um zu vermeiden, zu undefiniertem Verhalten, Java definiert das Verhalten von lese ein Feld, das nie geschrieben wurde: es wird einen Standardwert enthalten, die für seinen Typ.
Vielleicht sollte ich gesagt haben: "Klasse-Instanz", sondern als "Objekt-Klasse", aber ich glaube nicht, dass die Antworten der anderen Frage, was nötig wäre, wenn die Sprache waren zu fordern, dass die Instanz-Felder geschrieben werden. So dass der compiler code generieren, ohne, das Halteproblem zu lösen oder reservieren Sie einen "nie geschrieben" - Wert für jedes Feld kann eine "Vereinfachung", aber ich betrachte es mehr als einfache Praktikabilität.
InformationsquelleAutor supercat
Können Sie erklären, eine leere var zum Beispiel in einem Validierungs-Skript,
}
wie diese, aber ich würde es nur verwenden, wenn der code sofort, nachdem es erneut deklariert es, wie oben, so dass es nicht 'verlegt'.
InformationsquelleAutor tonyG_cyprus
Ok hier ein Beispiel. Ich bin derzeit die Einstellung Globale Werte, die eingestellt werden, um dauerhaft auf eine PDF-Foren. Für diese Anwendung möchte ich mit diesen Werten als Daten-Speicher-ähnlich wie ein text-Feld. Nicht die beste Methode, aber es funktioniert für dieses Beispiel. Anstatt besiedelten meinem forum mit Hunderten von versteckten Textfeldern kann ich die Werte als persistente Globale Variablen.
Wenn meine anfängliche Verzögerung eingestellt ist 0 oder "" als Wert für die variable, als es nicht halten, Daten zwischen den Sitzungen. Die Initialisierung des Forums zurückgesetzt wird der Wert, zu nichts. Ähnlich wie Scripte, Foren betrieben um. Es erkennt alle Skripte, die im Dokument vor dem zuweisen von Werten zu führen über Variablen. Daher ist es notwendig, um die variable zu deklarieren ohne Wert, so dass die Initialisierung nicht ersetzen Sie die Werte.
Im Allgemeinen ist es auch gut Haushalten zu erklären, alle deine Variablen am Anfang. Es ist möglich, erklären Ihnen, wie Sie gehen, aber ich habe festgestellt, dass, wenn ein neues element Hinzugefügt wird, um ein Skript, das ich haben sich zu bewegen, Linien oben und unten zu halten meinen code rein. Wenn die variable deklariert wird, wenn es verwendet wird, als wird es auch sehr leicht, eine variable zu verwenden, bevor Sie deklariert ist, welches nicht funktioniert.
Zusätzlich
Ist es effizienter, einen Wert zuweisen, wenn man erklärt, Aber nicht generischen Platzhalter-Werte. In den meisten scripts int ist nicht so einfach, wie zu sagen, int x = 5; Mehr oft rufen wir auf Daten wie .getField("TextBox3").Wert; oder andere Zeile code. Durch das zuweisen einer generischen Wert wie "" oder 0 oder wahr Ihre Funktion kann funktionieren, auch wenn Sie nicht richtig verwendet wird, einen Wert. Nicht durch Zuweisung einen Wert, wenn Sie nicht nutzen Sie Ihre variable, als Ihre Funktion fehl, so dass Sie engen die Möglichkeiten beim Problemlösen. Wenn int x; noch NaN durch die Zeit, die Sie nutzen x als Ihre Daten-Sammlung und-Validierungen sind wahrscheinlich die Ursache des Problems.
Im Allgemeinen erklären, alle Werte an der Spitze und vermeiden Allgemeine Werte, es sei denn, Sie zu haben. Wenn Sie die Werte festlegen, die von x später als nicht es zu int x = 0;.
InformationsquelleAutor Bob
Etwas wie:
Nicht alles wird immer Fehler geben... Wie int i; wird 0. Aber wenn Sie das tun User; später Dann String s = user.Adresse; geben Sie Fehler
lokale Variablen sind nicht initialisiert, um nichts, Sie sind undefined ... "Lokale Variablen sind etwas anders; der compiler nie wird ein Standardwert einer nicht initialisierten lokalen Variablen. Wenn Sie nicht initialisiert werden Ihre lokalen Variablen, wo es deklariert ist, stellen Sie sicher, um Ihnen einen Wert zuweisen, bevor Sie versuchen, es zu benutzen. Der Zugriff auf eine nicht initialisierte lokale variable wird in einem compile-time-Fehler."
InformationsquelleAutor user903772