Warum C# erlauben {} code-Blöcken ohne eine vorhergehende Anweisung?
Warum C# ermöglichen die code-Blöcke ohne eine vorhergehende Erklärung (z.B. if
, else
, for
, while
)?
void Main()
{
{ //any sense in this?
Console.Write("foo");
}
}
- Gibt es einen Grund sollte es nicht?
- guter Punkt, ich hasse alle "Warum" - Fragen, ich weiß nicht, was Sie beweisen wollen trotzdem, es tut nicht weh, wenn jemand.
- Aber wie die Antworten zeigen, es hat mehr Bedeutung als nur "tut nicht weh, also lassen Sie es erlauben". Dies ist ein Punkt, der du solche Fragen stellst.
- Das Beispiel block hat eine Aussage... gibt es einen besseren Namen für diese?
- Holterman: Nicht, dass ich finden kann... die spec-Anrufe
using
,if
,for
,while
,do-while
, etc Aussagen. Es sind verschiedene Kategorien, aber nicht der Oberbegriff für Aussagen, die Ihren eigenen code-Blöcke. - +1 Frage klingt unschuldig genug, aber die Antworten haben wirklich lehrte mich etwas sehr wertvolles
- Ich hoffe ich habe die Frage deutlicher mit meinem edit. Ich bin mir nicht sicher, was diese "Aussagen" werden können, allgemein bekannt als entweder.
- Ohne zu Fragen, warum, werden wir nie besser werden.
- Gut ich betrachte das Lesen der MSDN C# - Sprache, die Spezifikationen und berücksichtigen die Verbesserung einige grundlegende dann einfach hierher kommen und Fragen, Warum. Warum wird nie jemand besser, aber das Lesen/verstehen wird, es zu machen. Wenn man weiß, wie Compiler arbeiten, was ist die Bedeutung des Umfangs der Analyse erfolgt bei der Kompilierung Ebene und verknüpfen Ebene, Sie müssen nie zu Fragen, Warum.
- Weiß nicht, warum einfache Fragen bekam mehr upvotes auf SO und auf Antworten von Fragen, die haben sogar mehr upvotes.
- Das scheint wie eine hohe Stirn-elitäre Haltung. Die Menschen haben immer Fragen, und wenn es keinen Grund gibt, sich zu Fragen, warum, dann gibt es keinen Punkt in mit SO. Diese site ist nicht so viel für die Menschen zu lösen, die unsere unmittelbaren Probleme (wenn das passiert), sondern stellen ein Archiv von Fragen und Antworten, die uns allen helfen werden, bessere Programmierer. SO ist zu Fragen, WARUM! 🙂
- Der Grund dafür ist, dass in der heutigen Welt der Programmierer, so viel ist syntaktischer Zucker, der Magie, und auch sonst nicht offensichtlich ist oder ausdrücklich, und so ist es manchmal die einfachsten Dinge, die "Ah-ha!" - Momente aus der rest von uns einfachen Programmierer. 🙂
- ja, es ist. Lesen Sie das Beispiel verwendet in den Antworten. Die meisten, wenn nicht alle, sind Beispiele für schlechtes design.
- Ich verstehe nicht, warum meine Antwort so viele upvotes, Abzeichen und das Häkchen. Ich bin nicht im entferntesten die Beantwortung der Frage, warum... :S (Gut, vielleicht hab ich das Häkchen und 80% der Stimmen nur für die akzeptierte Antwort, aber trotzdem...)
- Die Frage selbst habe 27 upvotes. Es muss einer der grundlegenden C# - Probleme plagen die Gemeinschaft.
- Ich weiß nie, ob die OP will einfach, dass der Ruf oder ist Fragen eine ehrliche Frage.
- Kann mir jemand bitte erklären, was das ist zweideutig, unklar, unvollständig, breit oder rhetorische Frage? Es ist keine offene Frage, es hat eine spezifische Antwort darauf, und es ist klar, was verlangt wird.
- C# hat Tausende von Funktionen und Warzen, die Sie platzieren können, 'warum' im Vordergrund. Wenn die Q schon "was macht ein einsamer {} pair-Mädchen tun' ich vielleicht versucht, zu Graben, bis ein dupe ersten.
- Zu denen, die geschlossen diese Frage, sehr Drakonisch. Natürlich viele Menschen etwas gelernt haben aus dieser Frage, so dass es hilfreich war (was SO sein soll). Vielleicht stattdessen schließen Sie es, Sie könnte geholfen haben, die OP formulieren Sie die Frage. Die Frage war nicht unbedingt formuliert sind sehr gut, aber natürlich ist es in Resonanz mit vielen Menschen. SO ist nicht eine Akademische soll, ist es für den Menschen hilft, besser zu sein Programmierer.
- Ich denke, was die enge Wähler hat Problem mit war genau so, wie es in Resonanz mit vielen Menschen... gepaart mit seinem "warum hat X die Sprache tun"-ness. Ich hatte ehrlich gesagt keine Ahnung, das waren Gründe für die Schließung, aber ich wage nicht werfe einen öffnen abstimmen.
- Sie haben so viel Recht zu öffnen, wie ich es Tat, um zu schließen 🙂 ich wählte, um es zu schließen, wie es schien, der OP hatte sich nicht die Mühe zu tun, keine Forschung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In dem Kontext, die Sie geben, es gibt keine Bedeutung. Schreiben Sie eine Konstante Zeichenkette auf der Konsole wird funktionieren auf die gleiche Weise überall in das Programm fließen.1
Statt, in der Regel verwenden Sie Sie einschränken möchten einige lokale Variablen. Dieses wird weiter ausgearbeitet hier und hier. Blick auf João Angelo ' s Antwort und Chris Wallis Antwort für kurze Beispiele. Ich glaube, das gleiche gilt für einige andere Sprachen mit C-syntax, wie gut, dass nicht Sie wäre von Bedeutung für diese Frage, aber.
1 es sei denn natürlich, Sie entscheiden, zu versuchen, lustig zu sein und erstellen Sie Ihre eigenen
Console
Klasse, mit einemWrite()
Methode, die etwas völlig unerwartetes.out
parameter einem interface-Implementierung in einer anderen Sprache geschrieben, und dass die Durchführung der die variable liest, bevor Sie zum schreiben.Den
{ ... }
hat zumindest den Nebeneffekt der Einführung einer neuen Gültigkeitsbereich für lokale Variablen.Neige ich dazu, Sie zu benutzen in
switch
Aussagen bieten einen anderen Bereich für jeden Fall und auf diese Weise erlauben Sie mir, zu definieren lokale variable mit dem gleichen Namen an der nahe wie möglich am Ort Ihrer Verwendung und auch, um zu zeigen, dass Sie gelten nur für den Fall Ebene.{}
um diese gold-Abzeichen kommen... 🙂Es ist nicht so sehr ein Funktion von C# als ist es ein logischer Nebeneffekt der vielen C-syntax-Sprachen verwenden Sie Klammern, um definieren Umfang.
In deinem Beispiel die geschweiften Klammern haben keinen Effekt, aber in den folgenden code Sie bestimmen den Umfang, und somit die Sichtbarkeit einer Variablen:
Diese darf wie ich fällt außerhalb des Bereichs in den ersten block und wird bestimmt wieder in den nächsten:
Diese ist nicht erlaubt als ich gefallen aus dem Rahmen und ist nicht mehr sichtbar im äußeren Gültigkeitsbereich:
Und so weiter und so weiter.
{}
bekannt als Klammern?One of two marks of the form [ ] or ( ), and in mathematical use also {}, used for enclosing a word or number of words, a portion of a mathematical formula, or the like, so as to separate it from the context;
auf jeden Fall sind Sie nicht Klammern, sondern 'geschweifte Klammer' scheint OK.Halte ich
{}
als eine Anweisung enthält mehrere Anweisungen.Betrachten eine if-Anweisung besteht aus einem booleschen Ausdruck, gefolgt von eine - Anweisung.
Dies würde die Arbeit:
Diese würde auch funktionieren:
Wenn ich mich nicht Irre dies wird als eine block-Anweisung.
Seit
{}
können andere Anweisungen enthalten, es können auch andere{}
.Der Gültigkeitsbereich einer Variablen ist definiert durch Eltern
{}
(block-Anweisung).Den Punkt, den ich versuche zu machen ist, dass
{}
ist einfach eine Aussage, so dass es nicht erforderlich ist, eine wenn oder was auch immer...Die Allgemeine Regel in C-syntax-Sprachen ist "etwas zwischen
{ }
sollte behandelt werden wie eine einzelne Anweisung, und es kann dahin gehen, wo eine einzelne Anweisung könnte":if
.for
,while
oderdo
.Für alle Absichten und Zwecke, es ist wie die Sprache der Grammatik enthalten diese:
Ist, "eine Erklärung kann aus der (verschiedene Dinge) oder eine öffnende Klammer, gefolgt von einer Anweisung Liste (die einschließen können eine oder mehrere Aussagen), gefolgt von einer geschlossenen Klammer". I. E. "ein
{ }
block ersetzen kann, keine Aussage, anywhere". Darunter in der Mitte des Codes.Nicht so ein
{ }
block irgendwo eine einzige Anweisung gehen würde, eigentlich haben die Sprache, die definition komplexer.Weil C++ (und java) erlaubt code-Blöcken ohne eine vorhergehende Anweisung.
C++ erlaubt Ihnen, denn C hat.
Könnte man sagen, es läuft alles auf die Tatsache, dass die USA Programmsprache (C-basiert) design wird vielmehr als Europäisches Programm Sprache (Modula-2 basiert) design.
(Control statements wirken auf eine einzelne Anweisung, Aussagen können Gruppen erstellen Sie neue Anweisungen)
Eins, Weil...Die Halten den Bereich Bereich der der
Anweisung.. oder Funktion, Das ist wirklich nützlich für die Mähne, den großen code..
Fragte Sie "warum" C# ermöglicht code Blöcke ohne vorausgehende Aussagen. Die Frage "warum" könnte auch interpretiert werden als "das, was möglich wäre, die Vorteile dieses Konstrukts?"
Persönlich, ich benutze-Anweisung-weniger code-Blöcke in C#, wobei die Lesbarkeit ist deutlich verbessert, für die anderen Entwickler, während man bedenkt, dass der code-block beschränkt den Geltungsbereich von lokalen Variablen. Betrachten Sie beispielsweise den folgenden code-snippet, das ist viel einfacher zu Lesen, durch die zusätzliche code-Blöcke:
Ich bin mir bewusst, dass dies gelöst werden könnte, mehr elegant durch die Verwendung von Methoden für die einzelnen Struktur-Ebene. Aber dann wieder, denken Sie daran, dass Dinge wie sample-Daten Sämaschinen in der Regel müssen Sie schnell sein.
Obwohl also der code oben ausgeführt wird Linear, die code-Struktur stellt die "real-world" - Struktur der Objekte, wodurch es einfacher für andere Entwickler zu verstehen, zu pflegen und zu erweitern.