it-swarm.com.de

Anfänger: Warum sind Operationen nicht in Ausgabebefehlen enthalten?

Ich gehe ein einführendes Programmierbuch durch und es listet ein einfaches Beispiel im Pseudocode auf:

Start
  input myNumber
  set myAnswer = myNumber * 2
  output myAnswer
Stop

Warum können wir das Erstellen einer weiteren Variablen namens myAnswer nicht auslassen und die Operation einfach wie folgt in den Ausgabebefehl einfügen:

Start
  input myNumber
  output myNumber * 2
Stop

Warum ist das erstere richtig und das letztere nicht?

23
user1475207

Sie könnten, aber der andere ist, damit Sie sehen, was los ist, und Sie können myAnswer später im Programm verwenden. Wenn Sie Ihren zweiten verwenden, können Sie myAnswer nicht wiederverwenden.

Also später im Programm möchten Sie vielleicht:

myAnswer + 5
myAnswer + 1
etc.

Möglicherweise haben Sie verschiedene Vorgänge, für die Sie es verwenden möchten.

Erwägen Sie den Nummernwechsel:

Start
  input myNumber
  set myAnswerA = myNumber * 2
  output myAnswerA
  set myAnswerB = myNumber * 3
  output myAnswerB
  set temp = myAnswerA
  set myAnswerA = myAnswerB
  set myAnswerA = temp
  output myAnswerA
  output myAnswerB
Stop

Ohne Variablen wäre das schwierig. Computerbücher beginnen mit einfachen Grundlagen, und die meisten Programmierungen sind einfach, bis Sie Komplexität erkennen. Fast alles ist in Tutorials trivial, und nur in der Komplexität sehen Sie, wo Dinge Sinn machen oder nicht.

36
johnny

Ein weiterer Grund, Die Zuordnung set myAnswer = myNumber * 2 gibt dem resultierenden Wert ein Name. Eine Person, die die zweizeilige Version Ihres Codes liest, weiß nur, dass der Wert von myNumber * 2. Eine Person, die die dreizeilige Version liest, kann sehen, dass myNumber * 2 ist das Antwort.

In einem so trivialen Beispiel mag es nicht wichtig erscheinen, aber manchmal kann das Zuweisen eines Ergebniswerts zu einer Variablen mit einem aussagekräftigen Namen es viel für andere Programmierer einfacher machen, Ihren Code zu lesen und zu verstehen.

33
Solomon Slow

Das ist Pseudocode. Es wird nicht vermutet, dass es sich um eine bestimmte implementierte Sprache handelt.

Einige Programmiersprachen unterstützen es nicht, einen Ausdruck auszuwerten und das Ergebnis dann in derselben Codezeile auszugeben. Zum Beispiel unterstützen die meisten Assembler das nicht. Vielleicht wollte der Autor des Buches die Dinge auf einer niedrigen Ebene zeigen.

14

Andere Antworten haben sich mit den spezifischen mechanischen Details und Beispielen befasst, wann die eine oder andere Form besser wäre, aber ich möchte einen weiteren philosophischen Hintergrund erwähnen:

Du lernst eine Sprache.

Eine Sprache ist etwas, in dem Ideen ausgedrückt und verstanden (kommuniziert) werden können. Eine Computerprogrammiersprache hat die zusätzliche Eigenschaft, dass sie von einer Maschine mechanisch analysiert werden kann, die darauf ausgelegt ist, basierend auf Ideen (Entscheidungen), die in dieser Sprache spezifiziert und eingegeben werden, Maßnahmen zu ergreifen (auszuführen).

In JEDER Sprache, die überhaupt nützlich ist, gibt es mehr als eine Möglichkeit, fast jede Idee auszudrücken, die in dieser Sprache ausgedrückt werden kann.


Berücksichtigen Sie die Vielzahl der in der englischen Sprache verfügbaren Nuancen. Sogar ein einfacher Satz wie

Die Katze sprang auf die Kiste.

kann variiert werden, um leicht unterschiedliche Ideen auszudrücken oder verschiedene Teile der Szene hervorzuheben , während auf dieselbe exakte Aktion des physischen Universums Bezug genommen wird.

Erstens sind grammatikalische Variationen:

Die Kiste wurde von der Katze aufgesprungen.

Auf die Kiste sprang die Katze.

Dann gibt es immer größere Variationen, die sich immer noch auf dieselbe körperliche Handlung beziehen:

Die Kiste zitterte unter dem Aufprall der Katze.

Die Katze kam mit einem dumpfen Schlag auf die Oberseite der Kiste.

Die Katze sprang leicht in die Luft und landete ordentlich auf einer nahe gelegenen Kiste.

Schauen Sie sich die Implikationen des Wortes "in der Nähe" in diesem letzten Satz an. Seine Einbeziehung vermittelt eine ganze Reihe neuer Konzepte, die sonst nicht vorhanden sind.


Es gibt immer mehr als einen Weg, dies zu tun, Python Zen im Gegenteil .


Natürlich wird es EINEN Weg geben, der Ihre Absicht perfekt ausdrückt und am besten geeignet ist, genauso wie Sie nur EINEN der obigen englischen Sätze wählen würden, je nachdem, was genau Sie kommunizieren möchten. Darum geht es im Zen von Python).

In einem Programmier-Einführungskurs oder einem Englisch-Einführungskurs müssen Sie jedoch zunächst die verschiedenen Möglichkeiten (Formulierungen, Code-Schnipsel) kennenlernen, mit denen Sie eine Idee formulieren können bevor Sie das Urteil entwickeln, um zu wählen, das am besten passt.

9
Wildcard

Sie fragen nur nach der Variablen myAnswer, die redundant zu sein scheint. Andere Antworten erläutern bereits einige Gründe, warum und wann es sinnvoll wäre, sie wegzulassen oder zu verwenden, aber hier ist noch eine: Wie wäre es damit?

Start
  output input * 2
Stop

oder sogar das

Start output input * 2 Stop

In den meisten Sprachen würde dies immer noch funktionieren, aber können Sie es lesen? Es ist schwierig, daher verwenden wir häufig Helfer Variablen, da nicht nur Computer den Code lesen. Wir müssen es in wenigen Monaten warten und verstehen, und es ist noch schwieriger, Code zu schreiben, den Sie später noch verstehen können als einen funktionierenden ... normalerweise wissen Sie nach nur wenigen Tagen nicht, warum Sie etwas auf eine bestimmte Weise getan haben .

5
t3chb0t

Sie können beide Varianten ausführen (in diesem einfachen Fall), aber die erste Variante wird für komplexere Fälle lesbarer und strukturierter. Die erste Variante zeigt das IPO-Modell mit einer Zeile für jeden Schritt (zwei davon bereits mit dem richtigen Namen):

Start
  input myNumber                       // Input
  set myAnswer = myNumber * 2          // Process
  output myAnswer                      // Output
Stop