Hallo und herzlich willkommen. In dieser Vorlesung möchte ich über die switch-Anweisung sprechen.
Es ist eine Alternative zu einer
if-Anweisung, wird jedoch normalerweise nur in bestimmten Situationen verwendet.
Aber es hat eine nette coole Syntax, um einige Wiederholungen in Ihrer if-Anweisung durchzuführen.
Der bedingte Operator und die if than else-Anweisungen
erleichtern das Schreiben von Programmen, die zwischen zwei Alternativen wählen.
Es ist sehr einfach, Fragen zu stellen und Entscheidungen zu treffen.
Oft muss ein
Programm jedoch eine von mehreren Alternativen auswählen.
Und dies wäre im
Wesentlichen das wenn sonst wenn sonst wenn sonst wenn sonst wenn.
Es ist chaotisch, weil Sie dies offensichtlich mit der if-Anweisung implementieren können, wenn
Sie mehrere Alternativen haben, aber
Sie könnten hundert andere ifs haben. Es ist also langweilig, es sind fehleranfällige Fehler und
es ist wirklich nur ein Schmerz im Hintern. Es ist, als würde man einen Haufen Boilerplate-Code schreiben.
Die Alternative zu dieser Syntax und alles, was Sie im Switch
tun können, können Sie in einem if tun.
Aber es ist sauberer und einfacher und tatsächlich auch viel effizienter.
Wenn der Wert einer Variablen erfolgreich mit verschiedenen Werten verglichen wird, verwenden Sie
die switch-Anweisung.
Und was dies bedeutet, wenn Sie eine if-Anweisung haben und dann eine else if, else if, else if, else
if, else if, else if, verwenden Sie die switch-Anweisung.
Nun, wenn diese booleschen Ausdrücke etwas komplizierter sind.
Sie können keine switch-Anweisung verwenden. Sie können eine
switch-Anweisung nur verwenden, wenn Sie mit einem Wert wie einer Konstanten vergleichen.
Der Ausdruck kann nicht so kompliziert sein.
Es ist jedoch viel bequemer und sehr effizient, die switch-Anweisung zu verwenden, und die
meisten Sprachen haben dieses Konstrukt ebenfalls. Und sehen Sie, es ist sehr schön. Das einzige, was
Sie bemerken, dass viele Sprachen auf c basieren.
Wenn Sie programmiert haben, bevor
Sie viele dieser Konstrukte sehen und mit ihnen
vertraut sind, weil sie ursprünglich in c oder be, der vorherigen Sprache, veröffentlicht wurden.
Hier ist die Syntax einer switch-Anweisung. Sie haben das Schlüsselwort switch.
Und dann haben Sie innerhalb des Schalters diese linke und rechte
Klammer, die der Ausdruck ist. Es sieht also genauso aus wie die
if-Anweisung am Anfang, außer dass Sie anstelle des if-Schlüsselworts das switch-Schlüsselwort haben.
Sie haben dann die linke Klammer.
Die linken Klammern erforderlich. Diese linke Klammer startet den Körper des Schalters.
Und Sie sehen die rechte Endklammer ganz unten, die den Körper des Schalters beendet.
Die andere Sache, die hier wichtig ist, ist die Groß- und Kleinschreibung dieser Schlüsselwörter.
Fall ist eigentlich wie die
if-Anweisung selbst. Switch wird also
tatsächlich einen Ausdruck betrachten, nicht ob er
notwendigerweise wahr oder falsch ist oder nicht.
Der Schalter könnte nur eine Variable oder etwas anderes betrachten.
Und dann wird diese Variable in den case-Anweisungen ausgewertet.
Wenn also Wert 1 gleich Ausdruck ist,
wenn Wert n gleich Ausdruck ist.
Sie können dies jedoch so betrachten, als
ob sich der Schalter auf der obersten Ebene befindet und die Fälle jeweils eine
if-Anweisung sind, wobei die Werte mit den Ausdrücken im Schalter verglichen werden.
Fälle sind also auch Schlüsselwörter. Sie bemerken auch den Doppelpunkt nach dem Fall.
Sie haben also einen Fall und dann haben Sie Ihren Wert.
Und dann können Sie dort drinnen mehrere Programmanweisungen haben.
Und am Ende haben Sie ein Schlüsselwort break. Das ist ein anderes Schlüsselwort. Hier gibt es
also drei Schlüsselwörter, eigentlich vier. Es gibt das Schlüsselwort switch, das Schlüsselwort case, das
Schlüsselwort break und unten die Standardeinstellung.
Das sind also die wichtigen Dinge, die zu beachten sind. Wir werden ein detailliertes Beispiel
durchgehen, aber Sie können verschiedene Fälle haben. Und wieder ist dies nur wie ein Wenn sonst, wenn sonst, wenn sonst, sonst wenn.
Wenn also Wert eins gleich Ausdruck ist, führen Sie den Code aus.
Andernfalls, wenn Wert zwei gleich Ausdruck ist,
bewerten Sie dies. Andernfalls, wenn Wert drei gleich Ausdruck ist, bewerten Sie dies.
Andernfalls führen Sie den Code in diesem Block aus, wenn der Wert n gleich dem Ausdruck ist.
Und der Block für die Fälle beginnt mit dem Doppelpunkt und endet mit der Pause.
Und wenn Sie diese Pause dort nicht haben, wird
sie durch die anderen Fälle fallen. Wir werden noch einmal darüber reden.
Und das Letzte, was hier wichtig ist, ist dieses Standardschlüsselwort. Dies ist im Wesentlichen das
else, else if, else if, else if und dann else unten.
Dies wird also festgelegt, wenn keiner der anderen Fälle den Ausdruck bewertet.
Sprechen wir also über einige der Details, die ich erwähnt habe.
Der in Klammern eingeschlossene Ausdruck wird erfolgreich mit den Werten verglichen.
Wenn wir
also zur Syntax zurückkehren, wird der Ausdruck mit allen Werten verglichen.
Und wenn es einem der Werte entspricht, führen Sie den Code innerhalb dieses Werts aus.
Fälle müssen einfache Konstanten oder konstante Ausdrücke sein, Ausdrücke,
die als Konstante ausgewertet werden.
Sie könnten also x plus y einschalten, denn
wenn x 5 ist, würde dies nur 10 einschalten und die Werte mit 10 vergleichen.
Normalerweise schalten Sie jedoch eine Variable ein, die einer Zahl entspricht.
Wenn ein Fall gefunden wird, dessen Wert dem Wert des Ausdrucks entspricht, werden
die Anweisungen ausgeführt, die auf den Fall folgen.
Wenn mehr als eine Anweisung enthalten ist, müssen sie nicht in geschweiften Klammern geschlossen werden.
Das heißt also nur, dass,
wenn mehr als eine Anweisung enthalten ist, keine
geschweiften Klammern für die case-Anweisungen erforderlich sind.
Denken Sie daran, für die if-Anweisung müssten wir immer diese
Klammern haben, das ist nicht der Fall. Sie können sie einfach eine Zeile nach der anderen setzen, der Schlüssel ist die Unterbrechung dort.
Die break-Anweisung signalisiert das Ende des jeweiligen Falls und
bewirkt, dass die Ausführung der Anweisung beendet wird.
Sie springt heraus.
Wenn Sie dort keine Pause haben, fällt sie im nächsten Fall durch.
Sie möchten also das Ende der break-Anweisung in jedem Fall einfügen. Wenn Sie keine Pausen einfügen, bedeutet dies
normalerweise, dass ein Fehler vorliegt oder so.
Der einzige Grund, warum Sie eine Unterbrechung einfügen möchten, besteht darin, dass Sie mehrere Bedingungen
hatten, unter denen Sie Code ausführen wollten. Wenn Sie also mehrere Fälle hatten
und im Grunde sagten, wenn der
Ausdruck dieser Fall, dieser Fall oder dieser Fall war, dann
tun Sie dasselbe, dann
würden Sie die Pausen herausnehmen.
Seien Sie also vorsichtig mit den Pausen, da die Pausen Probleme verursachen
können, unabhängig davon, ob bestimmte Blöcke im nächsten Fall ausgeführt werden oder nicht.
Der als Standard bezeichnete optionale Sonderfall wird ausgeführt, wenn der
Wert des Ausdrucks keinem der Fälle entspricht. Es ist das gleiche wie ein Durchfall, sonst passiert
es, wenn keiner der Fälle wahr ist.
Hier ist ein schönes Beispiel, in dem wir einen Schalter erstellen, um eine Aufzählung auszuwerten.
In diesem Fall haben wir einen Aufzählungstyp namens Wochentag,
der nur durch alle Wochentage angegeben wird.
Und dann haben wir eine Variable vom Typ enum Wochentag erstellt und sie auf Montag gesetzt
und dann heute eingeschaltet.
Abhängig vom heutigen Wert der Variablen wird
eine der case-Anweisungen ausgeführt.
Wenn heute gleich Sonntag ist, wird es heute Sonntag
ausdrucken und dann herausspringen.
Wenn heute gleich Montag ist, wird heute heute Montag ausgedruckt und herausgesprungen.
Wenn es keinem von
ihnen entspricht, wird zum Standardfall übergegangen. Lassen Sie uns dieses Beispiel in Codeblöcken durchgehen.
Hier haben wir unseren Beispielcode. Und Sie werden sehen, dass, weil heute
gleich Montag ist, der Fall Montag
ausgewertet wird und Sie sehen werden, dass die Ausgabe heute Montag ist.
Lassen Sie uns also fortfahren und diesen Code erstellen und ausführen. Und das werden wir sehen, heute
ist Montag.
Denn was heute hier passiert, wird der Montag sein. Sie setzen diesen Ausdruck, den
Sie heute für die Variable auswerten möchten, und werten ihn dann aus.
Wichtige Dinge, die Sie hier beachten sollten, sind,
dass Sie eine Klammer haben, um die switch-Anweisung in Zeile 16 in
einer Endklammer zu beginnen, um den Switch-Namen in Zeile 29 zu beenden.
Sie können mehrere Zeilen in jeder case-Anweisung enthalten, ohne Klammern zu verwenden.
Nun wollen wir sehen, was passiert, wenn
wir die break-Anweisung nach Montag herausnehmen.
Denken Sie daran, dass die Pause direkt aus dem Gehäuse springt. Aber wenn wir
es entfernen, wird es bis Dienstag
durchfallen und Sie werden sehen, dass beide printfs für
den heutigen Montag ausgeführt werden und heute Dienstag ist.
Wenn wir jetzt das Programm
ausführen, sehen wir, dass heute Montag ist, heute Dienstag.
Das ist die Wichtigkeit der break-Anweisung.
Die Pause springt heraus.
Dies kann also nützlich sein, wenn Sie für Montag und Dienstag dieselbe Ausgabe wünschen.
So sehen Sie beispielsweise manchmal case-Anweisungen
wie diese, case Tuesday, weil Sie dieselbe Ausgabe wünschen und es
keine Rolle spielt, wie groß die Variable ist.
Möglicherweise sehen Sie solche Dinge, aber wenn Sie separate case-Anweisungen mit
unterschiedlicher Ausführung haben, müssen Sie diese Unterbrechung dort hinzufügen.
Wir schauen also nur auf Sonntag, Montag und Dienstag.
Was passiert, wenn wir den heutigen Wert auf Sonntag setzen, weil
es keine Fälle gibt, die dem entsprechen?
Nun, was passieren wird, ist, dass es durch die Standardeinstellung fällt und alles ausdrucken wird.
Versuchen wir es also noch einmal.
Und wir sehen heute ist Sonntag.
Entschuldigung, setzen Sie es auf die falsche Variable. Ich möchte es auf
Mittwoch einstellen. Wir hatten einen Fall für Sonntag.
Jetzt werden wir sehen, dass es tatsächlich alles druckt, weil es
keinem der Fälle entspricht.
Alles, was Sie für den Wechsel tun müssen, ist sich die Syntax zu merken.
Der Ausdruck wird in Klammern gesetzt, die Sie bewerten werden.
Die Fälle müssen mit dem Ausdruck übereinstimmen. Normalerweise machen Sie also Variablen, deshalb
müssen es Konstanten oder Ausdrücke sein, die einen bestimmten konstanten Wert ergeben.
Und dann haben Sie Fälle für jede Sache und dann einen Standardfall für alle, und vergessen Sie nicht die Pausen.
Lassen Sie uns zurückgehen und ein wenig mehr und ein weiteres Beispiel für das
Schalterkonstrukt mit Fällen sprechen.
In diesem nächsten Beispiel ist es etwas anders.
Was wir hier tun, ist, dass wir Daten vom Benutzer erhalten und diese dann einschalten.
In diesem Beispiel in unserer Hauptfunktion wird zunächst ein
paar Floats erstellt, anschließend ein Zeichenoperator erstellt und der Benutzer aufgefordert, einen
Wert, einen Operator und einen Wert zwei einzugeben.
Zur Unterscheidung werden Formatspezifizierer verwendet, die alle eine Adresse mit kaufmännischem Und haben.
Abhängig von dem Zeichen, das Sie für den Operator eingeben, ob es Plus-Minus oder Stern
ist, möchten Sie dies in Ihre Schalterhülle aufnehmen.
Wenn der Benutzer also ein Plus
eingegeben hat, sehen Sie in der nächsten Spalte hier das Schalterkonstrukt, den Einschaltoperator.
Es wird den Wert des Operators, den Wert des variablen Operators, mit
jeder dieser case-Anweisungen verglichen. Und Sie werden feststellen, dass
diese case-Anweisungen in einfachen Anführungszeichen stehen, da wir Zeichen vergleichen.
So können Sie
Zahlen, Variablen mit Werten bestimmter Konstanten oder Zeichen mit bestimmten Konstanten vergleichen.
Und dann drucken wir in jeder case-Anweisung ein bestimmtes Format aus.
Wert eins plus Wert zwei, Wert eins minus Wert zwei.
Wir führen tatsächlich Berechnungen in unserem Druck durch.
Und dann sehen Sie wieder diese wichtigen Break-Statements,
die herausspringen, und sie werden benötigt, wenn Sie keinen der anderen Fälle durchstehen wollen.
Sie bemerken auch, dass wir in dieser letzten Fallanweisung, in der der Teiler durch Schrägstriche gekennzeichnet
ist, eine if-Anweisung haben.
Wir haben keine Klammern um den
Fall, da wir ohne Klammern jeweils mehrere Anweisungen haben können.
Im letzten Fall, in dem wir sagen, dass der Wert zwei gleich 0 ist, führen
wir eine kleine Überprüfung durch, um sicherzustellen, dass wir nicht durch 0 teilen.
Und wenn wir nicht durch 0 teilen, werden wir unsere Division tatsächlich durchführen.
Und ganz am Ende dieses Falles haben wir noch eine Pause.
In unserem Standardfall haben Sie einen Operator eingegeben, mit dem wir nicht umgehen können.
Die switch-Anweisung ist jedoch sehr effizient.
Es ist sehr schnell zu schreiben, wenn Sie
viele verschiedene Werte mit einer bestimmten Variablen vergleichen und dann verschiedene Dinge tun möchten.
Das Letzte, was ich erwähnen wollte, war die Go-to-Erklärung in Bezug auf die Entscheidungsfindung.
Es ist keine direkte Entscheidungserklärung,
es geht eher darum, mit einem Label zu einer anderen Codezeile zu springen,
aber es ist in c verfügbar, und deshalb wollte ich es erwähnen.
Die Anweisung go to besteht aus zwei Teilen: dem Label und dem Schlüsselwort go to.
Für diejenigen unter Ihnen, die zuvor in Fortran
oder einer anderen Basissprache programmiert haben, werden Sie dies wahrscheinlich erkennen und Sie haben
es wahrscheinlich ziemlich oft benutzt.
Wenn Sie jetzt zu c kommen, müssen Sie es
nicht wirklich verwenden. Es gibt einige Fälle, in
denen ich gesehen habe, dass es ziemlich nützlich ist, was ich gleich erläutern werde, aber der Weg zu
springt zu einem Code, und Sie können zu jeder Codezeile gehen.
Einer der Gründe, warum die Leute es nicht mögen, weil es sehr schwer zu befolgen ist.
Wenn Sie ein Programm warten und es sequentiell ist, gehen Sie zeilenweise vor,
wenn Anweisungen in der while-Schleife ausgeführt werden.
Es ist schon schlimm genug, wenn Sie die if-Anweisungen in den while-Schleifen haben.
Aber jetzt, wenn Sie etwas haben, in dem Sie sich im Grunde genommen in Zeile 27
Ihres Quellcodes befinden und aus keinem anderen Grund als nur dem Schlüsselwort go to in Zeile 800 springen, überspringen Sie
plötzlich eine Menge Code. und es ist sehr schwer zu pflegen und zu folgen.
Also die beiden Teile und der Markenname. Die Bezeichnung des Etiketts
erfolgt nach der gleichen Konvention für die Benennung einer Variablen mit alphanumerischen Zeichen. Sie
können nicht mit Ziffern beginnen, sondern mit Unterstrichen.
Sie können mit Unterstrichen beginnen.
Grundsätzlich verwenden Sie einfach das Schlüsselwort go to und gehen zu einem
Bezeichner, Teil zwei. Teil zwei ist irgendwo ein Label.
Um also tatsächlich zu dieser Codezeile zu springen, müssen Sie diese Codezeile beschriften.
Es muss eine Aussage geben, die Teil zwei sagt.
Jetzt zeige ich Ihnen ein Beispiel dafür, aber Sie sollten es wegen
der mit der Wartung verbundenen Probleme niemals verwenden.
Ich wollte es jedoch erwähnen, wenn Sie zuvor programmiert haben und es gewohnt sind, es zu verwenden.
In c müssen Sie es nicht so oft verwenden.
Es gibt einen Anwendungsfall, den ich gesehen habe und der nützlich sein könnte.
Ich habe neulich mit einem anderen Programmierer gearbeitet,
und er hatte eine Reihe verschachtelter Schleifen
oder verschachtelter if-Anweisungen.
Aber die Schleifen sind wirklich wahrscheinlich das bessere Beispiel. Schleifen, denken Sie daran, Code zu wiederholen. Er hatte viele verschachtelte Schleifen.
Und an der innersten verschachtelten Schleife, wie der fünften,
wollte er aus allen Schleifen herausspringen, weil er einen Zustand hatte.
Und so ging er immer zu, um aus all diesen Schleifen herauszuspringen.
Die andere Möglichkeit, aus Schleifen herauszuspringen, ist die Verwendung des Schlüsselworts
Bremse, aber die Bremse springt nur aus dem Innersten heraus.
Es gab also wirklich keinen effektiven Weg, ohne dass er eine Reihe
von Flags setzte und eine Reihe von if-Anweisungen hatte, um jede einzelne Schleife
zu verlassen, also ging er zu. Und das war ein Fall, den ich für
ziemlich nützlich hielt, weil es die Menge an Code reduzierte, die Sie schreiben mussten, und es ziemlich klar war, was geschah.
Sie sind gerade aus allen verschachtelten Schleifen gesprungen, weil Sie
eine bestimmte Bedingung erfüllt haben.
Und das ist ein Fall. Aber zum größten Teil müssen Sie nicht wirklich gehen und
aus den Gründen, die ich erwähnt habe, ist es sehr problematisch, es ist schwierig, dem Code zu folgen, wenn Sie überall herumspringen.
Aber das Gehen zu ist genau so, wie Sie es verwenden, genau wie Sie es in anderen Sprachen verwenden.
Sie haben ein Schlüsselwort mit dem Namen des Labels.
Und was in Ihrem Code passieren wird, ist, dass Sie zu dieser Codezeile mit dem Etikett springen.
Sie können also alle Arten von Code überspringen.
In diesem Beispiel hier haben wir also eine Bezeichnung namens top
und einen Doppelpunkt. So weißt du, dass es ein Label ist.
Und oben hat einige Aussagen. Und ganz unten
haben Sie eine if-Anweisung. Und Sie sagen, wenn das Zeichen gleich y ist, gehen Sie nach oben.
Sie sehen also wieder, wie Sie einfach in Ihrem Code herumspringen können, und das macht es sehr schwierig, ihm zu folgen.
Verwenden Sie es also nicht grundsätzlich, es sei denn, Sie haben viele, viele, viele verschachtelte Schleifen
und möchten aus allen Schleifen herausspringen. Vielen Dank.